> Am 31.03.2024 um 21:35 schrieb Florian Klämpfl via fpc-devel 
> <fpc-devel@lists.freepascal.org>:
> 
> 
> 
>> Am 31.03.2024 um 17:11 schrieb Michael Ring via fpc-devel 
>> <fpc-devel@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: 
...
        sub     r1,#1
        lsl     r1,r1,#2
        ldr     r0,.Lj11
        ldr     r0,[r0, r1]
        mov     r15,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@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to