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@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:
...
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@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to