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: