I think I remember that we had a discussion on build-id before, it did
not work on linux but I thought that Florian has created a fix and I
think I have verified that it works after that on my linux system.
Are you on Linux? And using trunk compiler? If you do not use trunk then
please try to use it, hopefully the fix is in there.
Michael
Am 23.10.13 17:58, schrieb Koenraad Lelong:
op 23-10-13 13:54, Jonas Maebe schreef:
On 23 Oct 2013, at 12:05, Koenraad Lelong wrote:
fpc@linux:~/src-arm-fpc> fpc -Parm -Tembedded -Wplpc2124 -sh tled1.pp
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
tled1.pp(54,4) Fatal: Can't open executable tled1.elf
Fatal: Compilation aborted
Error: /usr/bin/ppcrossarm returned an error exitcode (normal if you
did not specify a source file to be compiled)
Can you try again after applying the attached patch?
Jonas
Thanks Jonas,
Now I can use -sh. The resulting ppas.sh :
#!/bin/sh
DoExitAsm ()
{ echo "An error occurred while assembling $1"; exit 1; }
DoExitLink ()
{ echo "An error occurred while linking $1"; exit 1; }
echo Assembling program
/usr/bin/arm-embedded-as -mfpu=softvfp -o tled1.o tled1.s
if [ $? != 0 ]; then DoExitAsm program; fi
rm tled1.s
echo Linking tled1
OFS=$IFS
IFS="
"
/usr/bin/arm-embedded-ld -g --build-id --gc-sections -L. -o
tled1.elf -T link.res
if [ $? != 0 ]; then DoExitLink tled1; fi
IFS=$OFS
echo Linking tled1
OFS=$IFS
IFS="
"
/usr/bin/arm-embedded-objcopy -O ihex tled1.elf tled1.hex
if [ $? != 0 ]; then DoExitLink tled1; fi
IFS=$OFS
Tinkering with it I found --build-id gives my problem. If that is
removed, there are no errors.
But I also analyzed 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 = .;
Deducing from the error-message :
/usr/bin/arm-embedded-ld: error: no memory region specified for
loadable section `.note.gnu.build-id'
in ppas.sh I modified the line
.note.gnu.build-id : { *(.note.gnu.build-id) }
to
.note.gnu.build-id : { *(.note.gnu.build-id) } >flash
Then ppas.sh reports no errors.
I modified compiler/systems/t_embed.pas to have that line, and then
the compilation of tled1 without -sh produces a tled1.elf. And the
disassembled tled1.elf seems to be the program when comparing with a
saved tled1.s.
So, is it safe to include that '>flash' to the linking script via the
compiler ? Did I find a bug, or am I doing something wrong ?
Thanks for your support.
Koenraad
_______________________________________________
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal
_______________________________________________
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal