View mode: basic / threaded / horizontal-split · Log in · Help
February 28, 2012
Random behavior using a wrapped C library
I'm getting some unexpected results (crashes or random behavior) when  
using a wrapped C struct in a library. I have no idea why this is  
happening as everything else (including other wrapped structs) seems to  
work just fine.
Could it be some alignment issues..?

extern(C):

//typedef unsigned char uint8;
alias ubyte uint8;

//typedef struct {
//	uint8 r,g,b;
//} TCOD_color_t;
struct TCOD_color_t {
	uint8 r,g,b;
};

//typedef void * TCOD_console_t;
alias void* TCOD_console_t;

//TCODLIB_API void TCOD_console_set_default_background(TCOD_console_t  
con,TCOD_color_t col);
void TCOD_console_set_default_background(TCOD_console_t con,TCOD_color_t  
col);

Whenever I use I call this function using TCOD_color_t(255,255,255) it  
seems to set a random other value.
Also, when calling get_default_background (not shown here), I get random  
results back.
I know the library works fine from C, so it has to be somewhere in my  
wrapper.

Does anyone spot any obvious flaws in my wrapping above? Or has any other  
hints on what might have gone wrong?

I've only tested this on linux64.

Thanks.
February 28, 2012
Re: Random behavior using a wrapped C library
http://d.puremagic.com/issues/show_bug.cgi?id=5570
February 28, 2012
Re: Random behavior using a wrapped C library
On Tue, 28 Feb 2012 16:58:13 +0100, Trass3r <un@known.com> wrote:

> http://d.puremagic.com/issues/show_bug.cgi?id=5570

Thanks. I've literally spent hours testing various things without any luck  
- would have been simpler if I knew asm :/

A blocker for using x64 on linux then.
February 28, 2012
Re: Random behavior using a wrapped C library
> A blocker for using x64 on linux then.

Use gdc. Better codegen anyway.
February 29, 2012
Re: Random behavior using a wrapped C library
On 2/29/2012 1:10 AM, simendsjo wrote:
> On Tue, 28 Feb 2012 16:58:13 +0100, Trass3r <un@known.com> wrote:
>
>> http://d.puremagic.com/issues/show_bug.cgi?id=5570
>
> Thanks. I've literally spent hours testing various things without any
> luck - would have been simpler if I knew asm :/
>
> A blocker for using x64 on linux then.

Have you tested on 32-bit yet? I had the exact same problem with one of 
my wrappers when passing a struct by value, but on 32-bit Windows. 
Luckily, in my case it was simple enough to implement the function in D 
to work around it. I'm curious to know if it's related.
February 29, 2012
Re: Random behavior using a wrapped C library
On Wed, 29 Feb 2012 05:03:30 +0100, Mike Parker <aldacron@gmail.com> wrote:

> On 2/29/2012 1:10 AM, simendsjo wrote:
>> On Tue, 28 Feb 2012 16:58:13 +0100, Trass3r <un@known.com> wrote:
>>
>>> http://d.puremagic.com/issues/show_bug.cgi?id=5570
>>
>> Thanks. I've literally spent hours testing various things without any
>> luck - would have been simpler if I knew asm :/
>>
>> A blocker for using x64 on linux then.
>
> Have you tested on 32-bit yet? I had the exact same problem with one of  
> my wrappers when passing a struct by value, but on 32-bit Windows.  
> Luckily, in my case it was simple enough to implement the function in D  
> to work around it. I'm curious to know if it's related.

Yes. Tested on x32, and it works just fine. I'll use ia32libs and -m32 for  
the time being then.

A strange thing is that memory consumption went _up_ when everything was  
compiled as x32.
February 29, 2012
Re: Random behavior using a wrapped C library
On 29 February 2012 19:30, simendsjo <simendsjo@gmail.com> wrote:
> On Wed, 29 Feb 2012 05:03:30 +0100, Mike Parker <aldacron@gmail.com> wrote:
>
>> On 2/29/2012 1:10 AM, simendsjo wrote:
>>>
>>> On Tue, 28 Feb 2012 16:58:13 +0100, Trass3r <un@known.com> wrote:
>>>
>>>> http://d.puremagic.com/issues/show_bug.cgi?id=5570
>>>
>>>
>>> Thanks. I've literally spent hours testing various things without any
>>> luck - would have been simpler if I knew asm :/
>>>
>>> A blocker for using x64 on linux then.
>>
>>
>> Have you tested on 32-bit yet? I had the exact same problem with one of my
>> wrappers when passing a struct by value, but on 32-bit Windows. Luckily, in
>> my case it was simple enough to implement the function in D to work around
>> it. I'm curious to know if it's related.
>
>
> Yes. Tested on x32, and it works just fine. I'll use ia32libs and -m32 for
> the time being then.
>
> A strange thing is that memory consumption went _up_ when everything was
> compiled as x32.

I don't know much, but wouldn't bigger register sizes mean that less
data needs shuffled in and out of memory? Resulting in less
instructions and therefore less memory usage?

I'm just guessing though

--
James Miller
February 29, 2012
Re: Random behavior using a wrapped C library
On Wednesday, 29 February 2012 at 06:30:27 UTC, simendsjo wrote:
> A strange thing is that memory consumption went _up_ when 
> everything was compiled as x32.

Data/code/symbols size?
February 29, 2012
Re: Random behavior using a wrapped C library
On Wed, 29 Feb 2012 07:44:23 +0100, James Miller <james@aatch.net> wrote:

> On 29 February 2012 19:30, simendsjo <simendsjo@gmail.com> wrote:
>> On Wed, 29 Feb 2012 05:03:30 +0100, Mike Parker <aldacron@gmail.com>  
>> wrote:
>>
>>> On 2/29/2012 1:10 AM, simendsjo wrote:
>>>>
>>>> On Tue, 28 Feb 2012 16:58:13 +0100, Trass3r <un@known.com> wrote:
>>>>
>>>>> http://d.puremagic.com/issues/show_bug.cgi?id=5570
>>>>
>>>>
>>>> Thanks. I've literally spent hours testing various things without any
>>>> luck - would have been simpler if I knew asm :/
>>>>
>>>> A blocker for using x64 on linux then.
>>>
>>>
>>> Have you tested on 32-bit yet? I had the exact same problem with one  
>>> of my
>>> wrappers when passing a struct by value, but on 32-bit Windows.  
>>> Luckily, in
>>> my case it was simple enough to implement the function in D to work  
>>> around
>>> it. I'm curious to know if it's related.
>>
>>
>> Yes. Tested on x32, and it works just fine. I'll use ia32libs and -m32  
>> for
>> the time being then.
>>
>> A strange thing is that memory consumption went _up_ when everything was
>> compiled as x32.
>
> I don't know much, but wouldn't bigger register sizes mean that less
> data needs shuffled in and out of memory? Resulting in less
> instructions and therefore less memory usage?
>
> I'm just guessing though
>
> --
> James Miller

Probably. Almost everything is done using structs right now. Guess it will  
be quite different when I get a lot of classes bouncing around.
Top | Discussion index | About this forum | D home