Hello,
I am trying to get the embedded version of fpc for arm to work.
Currently i try it for the lpc1768 from NXP using the lpcxpresso board.
The example compiles, but doesn't run on the target...

I created a simple example and it seems that the code it generates is NOT 
thumb2 code.
I disassembled the elf-file generated by fpc using "arm-none-eabi-objdump -S"
I also disassembled it using the debugger "arm-none-eabi-gdb"
Here is a fragment of the code from both:

From objdump:
000001c4 <FPC_INITIALIZEUNITS>:
 1c4:   e92d4070        push    {r4, r5, r6, lr}
 1c8:   ebfffff5        bl      1a4 <SYSTEM_$$_FPC_CPUINIT>
 1cc:   e59f006c        ldr     r0, [pc, #108]  ; 240 <FPC_INITIALIZEUNITS+0x7c>
 1d0:   e5904000        ldr     r4, [r0]
 1d4:   e3a05001        mov     r5, #1
 1d8:   e1540005        cmp     r4, r5
 1dc:   ba00000f        blt     220 <FPC_INITIALIZEUNITS+0x5c>

From gdb
   0x000001c4 <fpc_initializeunits+0>:            70 40 eors                   
r0, r6
   0x000001c6 <fpc_initializeunits+2>:            2d e9 f5 ff                  
stmdb      sp!, {r0, r2, r4, r5, r6, r7, r8, r9, r10, r11, r12, sp, lr, pc}
=> 0x000001ca <fpc_initializeunits+6>:         ff eb 6c 00                            
      ; <UNDEFINED> instruction: 0xebff006c
   0x000001ce <fpc_initializeunits+10>:           9f e5 b.n                     
               0xfffffd10
   0x000001d0 <fpc_initializeunits+12>:           00 40 ands                    
               r0, r0
   0x000001d2 <fpc_initializeunits+14>:           90 e5 b.n                     
               0xfffffcf6
   0x000001d4 <fpc_initializeunits+16>:           01 50 str                     
               r1, [r0, r0]
   0x000001d6 <fpc_initializeunits+18>:           a0 e3 b.n                     
               0x91a
   0x000001d8 <fpc_initializeunits+20>:           05 00 movs                    
               r5, r0
   0x000001da <fpc_initializeunits+22>:           54 e1 b.n                     
               0x486
   0x000001dc <fpc_initializeunits+24>:           0f 00 movs                    
               r7, r1

Note how the interpretation of the code is different, as is the length of most 
instructions.
It looks to me as if the code in the elf-file are (mostly) 32-bit values, while 
the debugger does interpret thee code as thumb2 (i think).

In the Makefile in rtl/embedded I find:

    ifeq ($(SUBARCH),armv7m)
    CPU_UNITS=lm3fury lm3tempest stm32f10x_ld stm32f10x_md stm32f10x_hd 
stm32f10x_xl stm32f10x_conn stm32f10x_cl lpc13xx lpc1768 lm4f120  xmc4500 
cortexm3 cortexm4 # thumb2_bare
    endif

So that suggest (via the comment) that fpc can do thumb2 code, which it should 
for cortexm3.

My PC is debian/jessie/64bit:  Free Pascal Compiler version 2.6.4+dfsg-3 
[2014/07/12] for x86_64
I got the sourcecode for the port from svn as described on the website.
To create the port I do:

    make clean buildbase installbase CROSSINSTALL=1 OS_TARGET=embedded 
CPU_TARGET=arm SUBARCH=armv7m   BINUTILSPREFIX=arm-none-eabi-

For the binutils I use the (current) stuff for the lpc1768 from NXP: 
lpcxpresso_7.4.0_229

To create a program I do:

    ppcrossarm -Ch1024 -Cs1024 -Tembedded -Parm -Cparmv7m -XParm-none-eabi- 
-Wplpc1768 -vu prog.p

Is there anybody that did get this port to work?

  Thanks in advance,
       Sietse



_______________________________________________
fpc-devel maillist  -  [email protected]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to