[fpc-devel] Unaligned access on Cortex-M0 in Initialization code

Michael Ring mail at michael-ring.org
Sun Mar 31 22:18:48 CEST 2024


As a workaround I compiled rtl with -Oonopeephole and verified that the 
balign is there, looking good!

Should I open an issue on gitlab or will you take care?

Many thanks and have a nice rest of Easter holidays,

Michael

Am 31.03.24 um 21:58 schrieb Michael Ring via fpc-devel:
>
> This is what I see (guess the same thing):
>
> New Compiler:
>
> FPC_INITIALIZE:
> .Lc3882:
> # path: /Users/ring/devel/fpc/rtl/inc/
> # file: rtti.inc
> # indx: 19
> .Ll10741:
>         push    {r4,r5,r14}
> ...
>
>         ldr     r0,[r0, r1]
>         mov     r15,r0
> .La5:
>         .long   .Lj13323
>
> Old Compiler (2 years old):
>
> FPC_INITIALIZE:
> .Lc3594:
> # path: /Users/ring/devel/freepascal-sources/rtl/inc/
> # file: rtti.inc
> # indx: 19
> .Ll10488:
>         push    {r4,r5,r14}
> ...
>
>         mov     r15,r0
> *        .balign 4*
> .La5:
>         .long   .Lj12924
>
> Am 31.03.24 um 21:50 schrieb Florian Klämpfl via fpc-devel:
>>
>>
>>> Am 31.03.2024 um 21:35 schrieb Florian Klämpfl via fpc-devel 
>>> <fpc-devel at lists.freepascal.org>:
>>>
>>>
>>>
>>>> Am 31.03.2024 um 17:11 schrieb Michael Ring via fpc-devel 
>>>> <fpc-devel at lists.freepascal.org>:
>>>>
>>>> Hi,
>>>>
>>>> it has been a while since I have been deep,deep down in the rabbit 
>>>> hole of Cortex Assembly, so please forgive me if I am overlooking 
>>>> something...
>>>>
>>>> I have an application for Raspberry Pico (target embedded) and it 
>>>> fails during initialization as soon as I add a unit that includes 
>>>> an object and I reference the object in my code...
>>>>
>>>> In that case fpc_initialize (for rtti?) is called and I cannot find 
>>>> source code for fpc_initialize
>>>>
>>>> In the debugger I see that R0 is $1000177E and R1 is $28 This is in 
>>>> the flash area, so far, so good but $1000177E is obviously not word 
>>>> alligned, it is halfword aligned so this then triggers 
>>>> _HardFault_Handler.
>>>>
>>>> 10001778 4648                     ldr             r0, [pc, #280] ; 
>>>> (0x10001894 <fpc_initialize+316>)
>>>> 1000177A 4058                     ldr             r0, [r0, r1] ; 
>>>> Crash Boom Bang !!!!!
>>>>
>>>> Looking at the map file the address is within fpc_initialize, but 
>>>> as I cannot find the proper source I am a bit lost...
>>>>
>>>> .text.n_fpc_initialize
>>>>                0x0000000010001758      0x144 
>>>> /Users/tgdrimi9/fpcupdeluxe/fpc/units/arm-embedded/armv6m/eabi/rtl/system.o
>>>>                0x0000000010001758                fpc_initialize
>>>>                0x0000000010001758                FPC_INITIALIZE
>>>> .text.n_fpc_finalize
>>>>                0x000000001000189c      0x164 
>>>> /Users/tgdrimi9/fpcupdeluxe/fpc/units/arm-embedded/armv6m/eabi/rtl/system.o
>>>>
>>>> Any help appreciated,
>>>
>>> Can you post some more context? fpc_initalize is not that big so it 
>>> should be possible to identify where this comes from.
>>
>> Ok, I think I found it, it is one for Gareth:
>>
>> var
>>
>>   i : longint;
>>
>> begin
>>
>>   case i of
>>
>>     1: writeln(1);
>>
>>     2: writeln(2);
>>
>>     3: writeln(2);
>>
>>     4: writeln(2);
>>
>>     5: writeln(2);
>>
>>   end;
>>
>> end.
>>
>>
>> ppcarm -Cparmv6m -al -O2 t.pp -Tlinux -Oonopeephole
>>
>>
>> results in:
>> ...
>> subr1,#1
>> lslr1,r1,#2
>> ldrr0,.Lj11
>> ldrr0,[r0, r1]
>> movr15,r0
>> .balign 4
>> .La1:
>> .long.Lj4
>> .long.Lj5
>> .long.Lj6
>> .long.Lj7
>> .long.Lj8
>>>>
>> The peephole removes the alignment before case jump tables: if no 
>> -Oonopeephole is passed, the .balign 4 is gone.
>>
>>
>> _______________________________________________
>> fpc-devel maillist  -fpc-devel at lists.freepascal.org
>> https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel
>
> _______________________________________________
> fpc-devel maillist  -fpc-devel at lists.freepascal.org
> https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-devel/attachments/20240331/e5031948/attachment.htm>


More information about the fpc-devel mailing list