memcpy(): alignment error
ba_f
ba_f at rbg.informatik.tu-darmstadt.de
Sat Oct 25 20:58:31 CEST 2014
Thank you so much.
This was exactly the fault.
Am 2014-10-21 23:31, schrieb Adam Lackorzynski:
> Hi,
>
> On Mon Oct 20, 2014 at 20:32:20 +0200, ba_f wrote:
>> Am 2014-10-19 23:48, schrieb Adam Lackorzynski:
>> >
>> >The alignment fault address is different (80006ece) from those mentioned
>> >in the memcpy (0x80006e80-0x80006e88). Are you sure it is the memcpy?
>> >
>> >Adam
>>
>> I do printf()-debugging.
>>
>> #define STORE32N(buffer,offset,value) { printf("memcpy(%x, %x,
>> 4);\n",&buffer[offset], &value); memcpy(&buffer[offset], &value, 4);
>> printf("No error, yet???\n");}
>>
>>
>> And output is the following:
>>
>> client | memcpy(80004e8e, 80004e3c, 4);
>> KERNEL0: alignment error at 80004e8e (PC: 00077a00, SP: 80004ac0, FSR:
>> 410801, PSR: 60000010)
>> client | No signal handler found
>>
>> printf("No error, yet???\n") is not reached. Client is broken, then.
>
> Ok, so there's an unaligned address for the destination. Maybe you're
> running into something like this:
> http://stackoverflow.com/questions/24883410/armcc-problems-with-memcpy-alignment-exceptions
> Assuming your buffer array is properly aligned on the stack, its data
> type size seems to be != 4 (smaller?), why copy 4 bytes there?
> And, why not just buffer[offset] = value? I'm sure the compiler would
> do it just right.
>
>> Is there something special to consider, since running an l4re-App?
>> Something like request_mem(), or editing a configuration file?
>
> No, it just has to work. You could switch off alignment checking in the
> Fiasco config to allow such unaligned accesses. Still, with the
> checking
> on, such alignment issues should not happen.
>
>
>
> Adam
More information about the l4-hackers
mailing list