[fpc-pascal] Using arm-embedded-fpc
Koenraad Lelong
fpascal1 at de-brouwerij.be
Wed Oct 23 11:23:33 CEST 2013
Hi,
Searching the mail from this list it seems there are a number of people
that use fpc to compile for arm-embedded.
I would like to do also, but I never managed to get a clean compiler.
With this I mean I can make a cross-compiler now, but when I use it to
make a program I get an error at the linking stage.
It is very frustrating that I seem to be the only one experiencing this,
so I must be doing something wrong. This is what I do :
I have a 'virgin' virtual linux machine, opensuse 12.3, with fpc 2.6.2
installed. I'm following the wiki :
http://wiki.freepascal.org/TARGET_Embedded
I have the sources of binutils-2.23.1. There I do :
./configure --target=arm-none-eabi --prefix=/usr
--program-prefix=arm-embedded- --disable-werror
make
sudo make install
fpc at linux-npjb:~/binutils-2.23.1> arm-embedded-as -v
GNU assembler version 2.23.1 (arm-none-eabi) using BFD version (GNU
Binutils) 2.23.1
I have fpc svn 25843 (downloaded today). There I do :
make clean
make buildbase CROSSINSTALL=1 OS_TARGET=embedded CPU_TARGET=arm
SUBARCH=armv4 CROSSOPT="-CfSoft" PREFIX=/usr
sudo make installbase CROSSINSTALL=1 OS_TARGET=embedded CPU_TARGET=arm
SUBARCH=armv4 CROSSOPT="-CfSoft" PREFIX=/usr
As root I do :
cd /usr/bin
ln -s ../lib/fpc/2.7.1/ppcrossarm ppcrossarm
fpc at linux-npjb:~/src-arm-fpc> fpc -Parm -Tembedded -Wplpc2124 tled
Free Pascal Compiler version 2.7.1 [2013/10/23] for arm
Copyright (c) 1993-2013 by Florian Klaempfl and others
Target OS: Embedded
Compiling tled1.pp
Assembling program
Linking tled1
/usr/bin/arm-embedded-ld: error: no memory region specified for loadable
section `.note.gnu.build-id'
tled1.pp(54,4) Error: Error while linking
tled1.pp(54,4) Fatal: There were 1 errors compiling module, stopping
Fatal: Compilation aborted
Error: /usr/bin/ppcrossarm returned an error exitcode (normal if you did
not specify a source file to be compiled)
fpc at linux-npjb:~/src-arm-fpc> cat link.res
SEARCH_DIR("/usr/lib/fpc/2.7.1/units/arm-embedded/rtl/")
SEARCH_DIR("/usr/lib/fpc/2.7.1/")
INPUT (
tled1.o
/usr/lib/fpc/2.7.1/units/arm-embedded/rtl/system.o
/usr/lib/fpc/2.7.1/units/arm-embedded/rtl/lpc21x4.o
)
ENTRY(_START)
MEMORY
{
flash : ORIGIN = 0x00000000, LENGTH = 0x00040000
ram : ORIGIN = 0x40000000, LENGTH = 0x00004000
}
_stack_top = 0x40004000;
SECTIONS
{
.text :
{
_text_start = .;
KEEP(*(.init, .init.*))
*(.text, .text.*)
*(.strings)
*(.rodata, .rodata.*)
*(.comment)
_etext = .;
} >flash
.note.gnu.build-id : { *(.note.gnu.build-id) }
.data :
{
_data = .;
*(.data, .data.*)
KEEP (*(.fpc .fpc.n_version .fpc.n_links))
_edata = .;
} >ram AT >flash
.bss :
{
_bss_start = .;
*(.bss, .bss.*)
*(COMMON)
} >ram
. = ALIGN(4);
_bss_end = . ;
}
_end = .;
When I do :
fpc at linux-npjb:~/src-arm-fpc> arm-embedded-ld link.res
fpc at linux-npjb:~/src-arm-fpc> ls -l
total 312
-rwxr-xr-x 1 fpc users 357294 okt 23 09:33 a.out
-rw-r--r-- 1 fpc users 867 okt 23 09:31 link.res
-rw-r--r-- 1 fpc users 3164 okt 23 09:31 tled1.o
-rw-r--r-- 1 fpc users 1187 okt 23 08:55 tled1.pp
That seems to work. Dissassembling a.out seems to produce a valid
assembly source. I also tried this with binutils-2.21.1 with the same
problem.
Is there a way to see what parameters fpc generates to invoke the linker ?
I would be very gratefull when someone can pinpoint my error.
Thanks,
Koenraad Lelong
More information about the fpc-pascal
mailing list