[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Memory alignment of pointers for sparc64



At 02:16 PM 09/05/02 -0600, Jason Gunthorpe wrote:
>
>On Thu, 5 Sep 2002, Bill Moseley wrote:
>
>> 
>> Here's where it's blowing up:
>> 
>>     struct dev_ino *p;
>>     struct stat buf;
>>     ...
>>     // allocate a bit of memory from the pool.
>>     p = (struct dev_ino *) Mem_ZoneAlloc(
>>             sw->Index->entryZone,sizeof(struct dev_ino));
>> 
>>     p->dev = buf.st_dev;  // *poof!*  SIGBUS
>> 
>> SIGBUS when the address ends in 4 or C but OK when it ends in 0 or 8.
>
>Hum, that seems a bit surprising, what does your 'struct dev_ino' look
>like? 

struct dev_ino
{
    dev_t   dev;
    ino_t   ino;
    struct dev_ino *next;
};

And now I see another SIGBUS with this code:

Program received signal SIGBUS, Bus error.
0x0001ae60 in coalesce_word_locations (sw=0xdbdf0, indexf=0xf46e8,
e=0x7037dd50) at index.c:2691
2691            *(unsigned int *)size_p = tmp;

And if I print out the address:

tmp is an unsigned int.
size_p at: 9BB5D
Bus error.

My guess is that's another alignment error.

That bit of code is used to compress our data in RAM.


Thanks,



-- 
Bill Moseley
mailto:moseley@hank.org



Reply to: