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

2024-04-01 Thread J. Gareth Moreton via fpc-devel

Oops - I'm sorry for my introduced bug!

Gareth aka. Kit

On 31/03/2024 21:48, Michael Ring via fpc-devel wrote:


Works, thank you!

Michael

Am 31.03.24 um 22:18 schrieb Florian Klämpfl via fpc-devel:



Am 31.03.2024 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



My last commit should fix it.


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


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

2024-03-31 Thread Michael Ring via fpc-devel

Works, thank you!

Michael

Am 31.03.24 um 22:18 schrieb Florian Klämpfl via fpc-devel:



Am 31.03.2024 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



My last commit should fix it.


___
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


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

2024-03-31 Thread Florian Klämpfl via fpc-devel


> Am 31.03.2024 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
> 

My last commit should fix it.

___
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel


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

2024-03-31 Thread Michael Ring via fpc-devel
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 
:




Am 31.03.2024 um 17:11 schrieb Michael Ring via fpc-devel 
:


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 )
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
   0x10001758  0x144 
/Users/tgdrimi9/fpcupdeluxe/fpc/units/arm-embedded/armv6m/eabi/rtl/system.o

   0x10001758    fpc_initialize
   0x10001758    FPC_INITIALIZE
.text.n_fpc_finalize
   0x1000189c  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___
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel


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

2024-03-31 Thread 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 
:




Am 31.03.2024 um 17:11 schrieb Michael Ring via fpc-devel 
:


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 )
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
   0x10001758  0x144 
/Users/tgdrimi9/fpcupdeluxe/fpc/units/arm-embedded/armv6m/eabi/rtl/system.o

   0x10001758    fpc_initialize
   0x10001758    FPC_INITIALIZE
.text.n_fpc_finalize
   0x1000189c  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


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

2024-03-31 Thread Florian Klämpfl via fpc-devel


> Am 31.03.2024 um 21:35 schrieb Florian Klämpfl via fpc-devel 
> :
> 
> 
> 
>> Am 31.03.2024 um 17:11 schrieb Michael Ring via fpc-devel 
>> :
>> 
>> 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 )
>> 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
>>0x10001758  0x144 
>> /Users/tgdrimi9/fpcupdeluxe/fpc/units/arm-embedded/armv6m/eabi/rtl/system.o
>>0x10001758fpc_initialize
>>0x10001758FPC_INITIALIZE
>> .text.n_fpc_finalize
>>0x1000189c  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


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

2024-03-31 Thread Florian Klämpfl via fpc-devel



> Am 31.03.2024 um 17:11 schrieb Michael Ring via fpc-devel 
> :
> 
> 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 )
> 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
> 0x10001758  0x144 
> /Users/tgdrimi9/fpcupdeluxe/fpc/units/arm-embedded/armv6m/eabi/rtl/system.o
> 0x10001758fpc_initialize
> 0x10001758FPC_INITIALIZE
>  .text.n_fpc_finalize
> 0x1000189c  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.

___
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel