diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2010-10-19 21:13:25 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2010-10-19 21:13:25 +0000 |
commit | 7a815afd9b5121ee0f65dc1e1de1c0de6de97679 (patch) | |
tree | f61b968a46c92e81f6de581582cb064bf9dca27d /ld/emulparams | |
parent | 42f6b9ffef1927d55d15075d9e810435c590c404 (diff) |
Notes
Diffstat (limited to 'ld/emulparams')
76 files changed, 706 insertions, 149 deletions
diff --git a/ld/emulparams/a29k.sh b/ld/emulparams/a29k.sh deleted file mode 100644 index 89c8e85c1c82a..0000000000000 --- a/ld/emulparams/a29k.sh +++ /dev/null @@ -1,5 +0,0 @@ -SCRIPT_NAME=a29k -OUTPUT_FORMAT="coff-a29k-big" -TEXT_START_ADDR=0x1000000 -TARGET_PAGE_SIZE=0x1000000 -ARCH=a29k diff --git a/ld/emulparams/arm_epoc_pe.sh b/ld/emulparams/arm_epoc_pe.sh index 04fa22db879a5..7cc4b220faeb9 100644 --- a/ld/emulparams/arm_epoc_pe.sh +++ b/ld/emulparams/arm_epoc_pe.sh @@ -7,3 +7,4 @@ TEMPLATE_NAME=pe ENTRY="_mainCRTStartup" SUBSYSTEM=PE_DEF_SUBSYSTEM INITIAL_SYMBOL_CHAR=\"_\" +TARGET_PAGE_SIZE=0x1000 diff --git a/ld/emulparams/armelf.sh b/ld/emulparams/armelf.sh index 35a6d23257367..6dc50b271fa96 100644 --- a/ld/emulparams/armelf.sh +++ b/ld/emulparams/armelf.sh @@ -8,8 +8,15 @@ TEMPLATE_NAME=elf32 EXTRA_EM_FILE=armelf OTHER_TEXT_SECTIONS='*(.glue_7t) *(.glue_7)' OTHER_BSS_SYMBOLS='__bss_start__ = .;' -OTHER_BSS_END_SYMBOLS='_bss_end__ = . ; __bss_end__ = . ; __end__ = . ;' -OTHER_SECTIONS='.note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }' +OTHER_BSS_END_SYMBOLS='_bss_end__ = . ; __bss_end__ = . ;' +OTHER_END_SYMBOLS='__end__ = . ;' +OTHER_SECTIONS='.note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) } + .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) }' +OTHER_READONLY_SECTIONS=" + .ARM.extab ${RELOCATING-0} : { *(.ARM.extab${RELOCATING+* .gnu.linkonce.armextab.*}) } + ${RELOCATING+ __exidx_start = .; } + .ARM.exidx ${RELOCATING-0} : { *(.ARM.exidx${RELOCATING+* .gnu.linkonce.armexidx.*}) } + ${RELOCATING+ __exidx_end = .; }" DATA_START_SYMBOLS='__data_start = . ;'; diff --git a/ld/emulparams/armelf_fbsd.sh b/ld/emulparams/armelf_fbsd.sh index 52da34557d16b..ee9520dc4a904 100644 --- a/ld/emulparams/armelf_fbsd.sh +++ b/ld/emulparams/armelf_fbsd.sh @@ -1,2 +1,3 @@ . ${srcdir}/emulparams/armelf.sh . ${srcdir}/emulparams/elf_fbsd.sh +TARGET2_TYPE=got-rel diff --git a/ld/emulparams/armelf_linux.sh b/ld/emulparams/armelf_linux.sh index 88a2d19151d1e..39b7f656409f2 100644 --- a/ld/emulparams/armelf_linux.sh +++ b/ld/emulparams/armelf_linux.sh @@ -8,14 +8,17 @@ COMMONPAGESIZE=0x1000 TEMPLATE_NAME=elf32 EXTRA_EM_FILE=armelf GENERATE_SHLIB_SCRIPT=yes +GENERATE_PIE_SCRIPT=yes DATA_START_SYMBOLS='__data_start = . ;'; OTHER_TEXT_SECTIONS='*(.glue_7t) *(.glue_7)' OTHER_BSS_SYMBOLS='__bss_start__ = .;' -OTHER_BSS_END_SYMBOLS='_bss_end__ = . ; __bss_end__ = . ; __end__ = . ;' +OTHER_BSS_END_SYMBOLS='_bss_end__ = . ; __bss_end__ = . ;' +OTHER_END_SYMBOLS='__end__ = . ;' OTHER_SECTIONS='.note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }' TEXT_START_ADDR=0x00008000 +TARGET2_TYPE=got-rel # ARM does not support .s* sections. NO_SMALL_DATA=yes diff --git a/ld/emulparams/armelf_linux_eabi.sh b/ld/emulparams/armelf_linux_eabi.sh new file mode 100644 index 0000000000000..f6d475736dc2e --- /dev/null +++ b/ld/emulparams/armelf_linux_eabi.sh @@ -0,0 +1,9 @@ +. ${srcdir}/emulparams/armelf_linux.sh + +# Use the ARM ABI-compliant exception-handling sections. +OTHER_READONLY_SECTIONS=" + .ARM.extab ${RELOCATING-0} : { *(.ARM.extab${RELOCATING+* .gnu.linkonce.armextab.*}) } + ${RELOCATING+ __exidx_start = .; } + .ARM.exidx ${RELOCATING-0} : { *(.ARM.exidx${RELOCATING+* .gnu.linkonce.armexidx.*}) } + ${RELOCATING+ __exidx_end = .; }" + diff --git a/ld/emulparams/armelf_nbsd.sh b/ld/emulparams/armelf_nbsd.sh index 571483c69bfea..3d94839153568 100644 --- a/ld/emulparams/armelf_nbsd.sh +++ b/ld/emulparams/armelf_nbsd.sh @@ -1,6 +1,7 @@ . ${srcdir}/emulparams/armelf.sh MAXPAGESIZE=0x8000 TEXT_START_ADDR=0x00008000 +TARGET2_TYPE=got-rel unset STACK_ADDR unset EMBEDDED diff --git a/ld/emulparams/armelf_oabi.sh b/ld/emulparams/armelf_oabi.sh deleted file mode 100644 index 0c2c1d313c12c..0000000000000 --- a/ld/emulparams/armelf_oabi.sh +++ /dev/null @@ -1,23 +0,0 @@ -MACHINE= -SCRIPT_NAME=elf -OUTPUT_FORMAT="elf32-littlearm-oabi" -BIG_OUTPUT_FORMAT="elf32-bigarm-oabi" -LITTLE_OUTPUT_FORMAT="elf32-littlearm-oabi" -TEXT_START_ADDR=0x8000 -TEMPLATE_NAME=armelf_oabi -OTHER_TEXT_SECTIONS='*(.glue_7t) *(.glue_7)' -OTHER_BSS_SYMBOLS='__bss_start__ = .;' -OTHER_BSS_END_SYMBOLS='_bss_end__ = . ; __bss_end__ = . ;' - - -ARCH=arm -MACHINE= -MAXPAGESIZE=256 -ENTRY=_start -EMBEDDED=yes - -# This sets the stack to the top of the simulator memory (2^19 bytes). -STACK_ADDR=0x80000 - -# ARM does not support .s* sections. -NO_SMALL_DATA=yes diff --git a/ld/emulparams/armelf_vxworks.sh b/ld/emulparams/armelf_vxworks.sh new file mode 100644 index 0000000000000..7b6445e830828 --- /dev/null +++ b/ld/emulparams/armelf_vxworks.sh @@ -0,0 +1,6 @@ +. ${srcdir}/emulparams/armelf.sh +OUTPUT_FORMAT="elf32-littlearm-vxworks" +BIG_OUTPUT_FORMAT="elf32-bigarm-vxworks" +LITTLE_OUTPUT_FORMAT="$OUTPUT_FORMAT" +MAXPAGESIZE=0x1000 +. ${srcdir}/emulparams/vxworks.sh diff --git a/ld/emulparams/armelfb_linux_eabi.sh b/ld/emulparams/armelfb_linux_eabi.sh new file mode 100644 index 0000000000000..f71c74168ed16 --- /dev/null +++ b/ld/emulparams/armelfb_linux_eabi.sh @@ -0,0 +1,2 @@ +. ${srcdir}/emulparams/armelf_linux_eabi.sh +OUTPUT_FORMAT="elf32-bigarm" diff --git a/ld/emulparams/armnto.sh b/ld/emulparams/armnto.sh index 7e4644bc80c07..64296129dc2cb 100644 --- a/ld/emulparams/armnto.sh +++ b/ld/emulparams/armnto.sh @@ -8,7 +8,8 @@ TEMPLATE_NAME=elf32 EXTRA_EM_FILE=armelf OTHER_TEXT_SECTIONS='*(.glue_7t) *(.glue_7)' OTHER_BSS_SYMBOLS='__bss_start__ = .;' -OTHER_BSS_END_SYMBOLS='_bss_end__ = . ; __bss_end__ = . ; __end__ = . ;' +OTHER_BSS_END_SYMBOLS='_bss_end__ = . ; __bss_end__ = . ;' +OTHER_END_SYMBOLS='__end__ = . ;' DATA_START_SYMBOLS='__data_start = . ;'; diff --git a/ld/emulparams/armpe.sh b/ld/emulparams/armpe.sh index aa605366e8c97..5db5faf3468d8 100644 --- a/ld/emulparams/armpe.sh +++ b/ld/emulparams/armpe.sh @@ -11,3 +11,5 @@ TEMPLATE_NAME=pe ENTRY="_mainCRTStartup" SUBSYSTEM=PE_DEF_SUBSYSTEM INITIAL_SYMBOL_CHAR=\"_\" + +TARGET_PAGE_SIZE=0x1000 diff --git a/ld/emulparams/armsymbian.sh b/ld/emulparams/armsymbian.sh new file mode 100644 index 0000000000000..a52d05b248069 --- /dev/null +++ b/ld/emulparams/armsymbian.sh @@ -0,0 +1,25 @@ +. ${srcdir}/emulparams/armelf.sh +SCRIPT_NAME="armbpabi" +GENERATE_COMBRELOC_SCRIPT=1 +OUTPUT_FORMAT="elf32-littlearm-symbian" +BIG_OUTPUT_FORMAT="elf32-bigarm-symbian" +LITTLE_OUTPUT_FORMAT="$OUTPUT_FORMAT" +TARGET1_IS_REL=1 +TARGET2_TYPE=abs +# On BPABI systems, program headers should not be mapped. +EMBEDDED=yes + +# As for armelf.sh, but add the SymbianOS-specific +# .ARM.exidx$${Base,Limit} symbols. +OTHER_READONLY_SECTIONS=" + .ARM.extab ${RELOCATING-0} : { *(.ARM.extab${RELOCATING+* .gnu.linkonce.armextab.*}) } + ${RELOCATING+ .ARM.exidx\$\$Base = . ; } + ${RELOCATING+ __exidx_start = .; } + .ARM.exidx ${RELOCATING-0} : { *(.ARM.exidx${RELOCATING+* .gnu.linkonce.armexidx.*}) } + ${RELOCATING+ __exidx_end = .; } + ${RELOCATING+ .ARM.exidx\$\$Limit = . ; }" + +# This value should match ELF_MAXPAGESIZE in BFD. Otherwise, elf.c +# will not place read-write sections in a separate ELF segment from +# the read-only sections. +MAXPAGESIZE=0x8000 diff --git a/ld/emulparams/bfin.sh b/ld/emulparams/bfin.sh new file mode 100755 index 0000000000000..5e7adda4dd9b7 --- /dev/null +++ b/ld/emulparams/bfin.sh @@ -0,0 +1,14 @@ +SCRIPT_NAME=elf +OUTPUT_FORMAT="elf32-bfin" +TEXT_START_ADDR=0x0 +MAXPAGESIZE=0x1000 +TARGET_PAGE_SIZE=0x1000 +NONPAGED_TEXT_START_ADDR=${TEXT_START_ADDR} +ARCH=bfin +MACHINE= +ENTRY=__start +TEMPLATE_NAME=elf32 +GENERATE_SHLIB_SCRIPT=yes +EMBEDDED=yes +DATA_END_SYMBOLS="__edata = .; PROVIDE (_edata = .);" +END_SYMBOLS="__end = .; PROVIDE (_end = .);" diff --git a/ld/emulparams/criself.sh b/ld/emulparams/criself.sh index 91fdcc5980d17..0478f345af426 100644 --- a/ld/emulparams/criself.sh +++ b/ld/emulparams/criself.sh @@ -44,21 +44,18 @@ OTHER_SDATA_SECTIONS="${RELOCATING+PROVIDE (__Edata = .);}" # end symbol. OTHER_BSS_END_SYMBOLS=' PROVIDE (__Ebss = .); - PROVIDE (__end = .); __Sbss = ADDR (.bss); PROVIDE (_bss_start = __Sbss); ' +OTHER_END_SYMBOLS='PROVIDE (__end = .);' INIT_START=' . = ALIGN(2); ___init__start = .; PROVIDE (___do_global_ctors = .); - SHORT (0xe1fc); /* push srp */ - SHORT (0xbe7e); ' INIT_END=' - SHORT (0x0d3e); /* jump [sp+] */ PROVIDE (__init__end = .); PROVIDE (___init__end = .); ' @@ -67,12 +64,9 @@ FINI_START=' . = ALIGN (2); ___fini__start = .; PROVIDE (___do_global_dtors = .); - SHORT (0xe1fc); /* push srp */ - SHORT (0xbe7e); ' FINI_END=' - SHORT (0x0d3e); /* jump [sp+] */ PROVIDE (__fini__end = .); ___fini__end = .; ' @@ -96,7 +90,7 @@ CTOR_END=' ' # Also add the other symbols provided for rsim/xsim and elinux. -OTHER_END_SYMBOLS=' +OTHER_SYMBOLS=' PROVIDE (__Eall = .); PROVIDE (__Endmem = 0x10000000); PROVIDE (__Stacksize = 0); diff --git a/ld/emulparams/crislinux.sh b/ld/emulparams/crislinux.sh index e54f5fbca472c..98d12f3929b84 100644 --- a/ld/emulparams/crislinux.sh +++ b/ld/emulparams/crislinux.sh @@ -31,7 +31,7 @@ OTHER_BSS_SYMBOLS='PROVIDE (__Sbss = .);' OTHER_BSS_END_SYMBOLS='PROVIDE (__Ebss = .);' # Also add the other symbols provided for rsim/xsim and elinux. -OTHER_END_SYMBOLS=' +OTHER_SYMBOLS=' PROVIDE (__Eall = .); PROVIDE (__Endmem = 0x10000000); PROVIDE (__Stacksize = 0); diff --git a/ld/emulparams/ebmon29k.sh b/ld/emulparams/ebmon29k.sh deleted file mode 100644 index fbc2bd1e464c3..0000000000000 --- a/ld/emulparams/ebmon29k.sh +++ /dev/null @@ -1,5 +0,0 @@ -SCRIPT_NAME=ebmon29k -OUTPUT_FORMAT="coff-a29k-big" -TEXT_START_ADDR=0x8000 -TARGET_PAGE_SIZE=0x1000 -ARCH=a29k diff --git a/ld/emulparams/elf32_sparc_vxworks.sh b/ld/emulparams/elf32_sparc_vxworks.sh new file mode 100644 index 0000000000000..12a9b3844082e --- /dev/null +++ b/ld/emulparams/elf32_sparc_vxworks.sh @@ -0,0 +1,4 @@ +. ${srcdir}/emulparams/elf32_sparc.sh +OUTPUT_FORMAT="elf32-sparc-vxworks" +unset DATA_PLT +. ${srcdir}/emulparams/vxworks.sh diff --git a/ld/emulparams/elf32bfinfd.sh b/ld/emulparams/elf32bfinfd.sh new file mode 100644 index 0000000000000..9047c6a750f03 --- /dev/null +++ b/ld/emulparams/elf32bfinfd.sh @@ -0,0 +1,16 @@ +. ${srcdir}/emulparams/bfin.sh +unset STACK_ADDR +OUTPUT_FORMAT="elf32-bfinfdpic" +MAXPAGESIZE=0x4000 +TEMPLATE_NAME=elf32 +GENERATE_SHLIB_SCRIPT=yes +GENERATE_PIE_SCRIPT=yes +EMBEDDED= # This gets us program headers mapped as part of the text segment. +OTHER_GOT_SYMBOLS= +OTHER_READONLY_SECTIONS=" + .rofixup : { + ${RELOCATING+__ROFIXUP_LIST__ = .;} + *(.rofixup) + ${RELOCATING+__ROFIXUP_END__ = .;} + } +" diff --git a/ld/emulparams/elf32bmip.sh b/ld/emulparams/elf32bmip.sh index 94e1c9c9a242c..614856573faa0 100644 --- a/ld/emulparams/elf32bmip.sh +++ b/ld/emulparams/elf32bmip.sh @@ -11,12 +11,17 @@ MAXPAGESIZE=0x40000 COMMONPAGESIZE=0x1000 NONPAGED_TEXT_START_ADDR=0x0400000 SHLIB_TEXT_START_ADDR=0x5ffe0000 -test -n "${EMBEDDED}" || TEXT_DYNAMIC= +TEXT_DYNAMIC= INITIAL_READONLY_SECTIONS=" .reginfo ${RELOCATING-0} : { *(.reginfo) } " OTHER_TEXT_SECTIONS='*(.mips16.fn.*) *(.mips16.call.*)' +# If the output has a GOT section, there must be exactly 0x7ff0 bytes +# between .got and _gp. The ". = ." below stops the orphan code from +# inserting other sections between the assignment to _gp and the start +# of .got. OTHER_GOT_SYMBOLS=' + . = .; _gp = ALIGN(16) + 0x7ff0; ' OTHER_SDATA_SECTIONS=" @@ -29,9 +34,17 @@ OTHER_BSS_SYMBOLS='_fbss = .;' OTHER_SECTIONS=' .gptab.sdata : { *(.gptab.data) *(.gptab.sdata) } .gptab.sbss : { *(.gptab.bss) *(.gptab.sbss) } + .mdebug.abi32 : { KEEP(*(.mdebug.abi32)) } + .mdebug.abiN32 : { KEEP(*(.mdebug.abiN32)) } + .mdebug.abi64 : { KEEP(*(.mdebug.abi64)) } + .mdebug.abiO64 : { KEEP(*(.mdebug.abiO64)) } + .mdebug.eabi32 : { KEEP(*(.mdebug.eabi32)) } + .mdebug.eabi64 : { KEEP(*(.mdebug.eabi64)) } + .gcc_compiled_long32 : { KEEP(*(.gcc_compiled_long32)) } + .gcc_compiled_long64 : { KEEP(*(.gcc_compiled_long64)) } ' ARCH=mips MACHINE= TEMPLATE_NAME=elf32 -EXTRA_EM_FILE=mipself GENERATE_SHLIB_SCRIPT=yes +GENERATE_PIE_SCRIPT=yes diff --git a/ld/emulparams/elf32bmipn32-defs.sh b/ld/emulparams/elf32bmipn32-defs.sh index f7b0d08f858f1..b81ac49ec3050 100644 --- a/ld/emulparams/elf32bmipn32-defs.sh +++ b/ld/emulparams/elf32bmipn32-defs.sh @@ -30,13 +30,19 @@ fi LIBPATH_SUFFIX=$ELFSIZE GENERATE_SHLIB_SCRIPT=yes +GENERATE_PIE_SCRIPT=yes TEXT_START_ADDR=0x10000000 MAXPAGESIZE=0x100000 ENTRY=__start # GOT-related settings. +# If the output has a GOT section, there must be exactly 0x7ff0 bytes +# between .got and _gp. The ". = ." below stops the orphan code from +# inserting other sections between the assignment to _gp and the start +# of .got. OTHER_GOT_SYMBOLS=' + . = .; _gp = ALIGN(16) + 0x7ff0; ' OTHER_SDATA_SECTIONS=" diff --git a/ld/emulparams/elf32btsmip.sh b/ld/emulparams/elf32btsmip.sh index 4c5a9ab2735c0..e29e045daa74a 100644 --- a/ld/emulparams/elf32btsmip.sh +++ b/ld/emulparams/elf32btsmip.sh @@ -5,5 +5,6 @@ OUTPUT_FORMAT="elf32-tradbigmips" BIG_OUTPUT_FORMAT="elf32-tradbigmips" LITTLE_OUTPUT_FORMAT="elf32-tradlittlemips" +unset DATA_ADDR SHLIB_TEXT_START_ADDR=0 ENTRY=__start diff --git a/ld/emulparams/elf32cr16c.sh b/ld/emulparams/elf32cr16c.sh new file mode 100644 index 0000000000000..e78e5edc7fa6a --- /dev/null +++ b/ld/emulparams/elf32cr16c.sh @@ -0,0 +1,5 @@ +SCRIPT_NAME=elf32cr16c +TEMPLATE_NAME=elf32 +OUTPUT_FORMAT="elf32-cr16c" +ARCH=cr16c +ENTRY=_start diff --git a/ld/emulparams/elf32crx.sh b/ld/emulparams/elf32crx.sh new file mode 100644 index 0000000000000..24960ec52c9ea --- /dev/null +++ b/ld/emulparams/elf32crx.sh @@ -0,0 +1,6 @@ +SCRIPT_NAME=elf32crx +TEMPLATE_NAME=elf32 +OUTPUT_FORMAT="elf32-crx" +ARCH=crx +ENTRY=_start +EXTRA_EM_FILE=crxelf diff --git a/ld/emulparams/elf32ebmipvxworks.sh b/ld/emulparams/elf32ebmipvxworks.sh new file mode 100644 index 0000000000000..4145488ae28ef --- /dev/null +++ b/ld/emulparams/elf32ebmipvxworks.sh @@ -0,0 +1,11 @@ +. ${srcdir}/emulparams/elf32bmip.sh + +OUTPUT_FORMAT="elf32-bigmips-vxworks" +BIG_OUTPUT_FORMAT="elf32-bigmips-vxworks" +LITTLE_OUTPUT_FORMAT="elf32-littlemips-vxworks" +unset OTHER_GOT_SYMBOLS +SHLIB_TEXT_START_ADDR=0 +unset TEXT_DYNAMIC +unset DATA_ADDR + +. ${srcdir}/emulparams/vxworks.sh diff --git a/ld/emulparams/elf32elmipvxworks.sh b/ld/emulparams/elf32elmipvxworks.sh new file mode 100644 index 0000000000000..c1239441c4ea2 --- /dev/null +++ b/ld/emulparams/elf32elmipvxworks.sh @@ -0,0 +1,11 @@ +. ${srcdir}/emulparams/elf32bmip.sh + +OUTPUT_FORMAT="elf32-littlemips-vxworks" +BIG_OUTPUT_FORMAT="elf32-bigmips-vxworks" +LITTLE_OUTPUT_FORMAT="elf32-littlemips-vxworks" +unset OTHER_GOT_SYMBOLS +SHLIB_TEXT_START_ADDR=0 +unset TEXT_DYNAMIC +unset DATA_ADDR + +. ${srcdir}/emulparams/vxworks.sh diff --git a/ld/emulparams/elf32fr30.sh b/ld/emulparams/elf32fr30.sh index cec006c71f917..069c623cd30f7 100755 --- a/ld/emulparams/elf32fr30.sh +++ b/ld/emulparams/elf32fr30.sh @@ -7,4 +7,4 @@ MAXPAGESIZE=256 ENTRY=_start EMBEDDED=yes NOP=0x9fa09fa0 -OTHER_END_SYMBOLS='PROVIDE (__stack = 0x200000);' +OTHER_SYMBOLS='PROVIDE (__stack = 0x200000);' diff --git a/ld/emulparams/elf32frv.sh b/ld/emulparams/elf32frv.sh index 042ed8c21f896..16773b716cad7 100755 --- a/ld/emulparams/elf32frv.sh +++ b/ld/emulparams/elf32frv.sh @@ -7,7 +7,7 @@ MAXPAGESIZE=256 ENTRY=_start EMBEDDED=yes OTHER_EXCLUDE_FILES='*frvend.o' -OTHER_BSS_END_SYMBOLS='__end = .;' +OTHER_END_SYMBOLS='__end = .;' DATA_START_SYMBOLS='__data_start = . ;' STACK_ADDR=0x200000 NOP=0x80000000 diff --git a/ld/emulparams/elf32frvfd.sh b/ld/emulparams/elf32frvfd.sh index c49687807dfaa..42b36f7d63d65 100644 --- a/ld/emulparams/elf32frvfd.sh +++ b/ld/emulparams/elf32frvfd.sh @@ -4,6 +4,7 @@ OUTPUT_FORMAT="elf32-frvfdpic" MAXPAGESIZE=0x4000 TEMPLATE_NAME=elf32 GENERATE_SHLIB_SCRIPT=yes +GENERATE_PIE_SCRIPT=yes EMBEDDED= # This gets us program headers mapped as part of the text segment. OTHER_GOT_SYMBOLS= OTHER_READONLY_SECTIONS=" diff --git a/ld/emulparams/elf32m32c.sh b/ld/emulparams/elf32m32c.sh new file mode 100644 index 0000000000000..eaf2c4e8f5ba0 --- /dev/null +++ b/ld/emulparams/elf32m32c.sh @@ -0,0 +1,26 @@ +MACHINE= +SCRIPT_NAME=elf +OUTPUT_FORMAT="elf32-m32c" +# See also `include/elf/m32c.h' +TEXT_START_ADDR=0x2000 +ARCH=m32c +ENTRY=_start +EMBEDDED=yes +TEMPLATE_NAME=elf32 +EXTRA_EM_FILE=needrelax +ELFSIZE=32 +MAXPAGESIZE=256 +# This is like setting STACK_ADDR to 0x0073FFFF0, except that the setting can +# be overridden, e.g. --defsym _stack=0x0f00, and that we put an extra +# sentinal value at the bottom. +# N.B. We can't use PROVIDE to set the default value in a symbol because +# the address is needed to place the .stack section, which in turn is needed +# to hold the sentinel value(s). +test -z "$CREATE_SHLIB" && OTHER_SECTIONS=" .stack ${RELOCATING-0}${RELOCATING+(DEFINED(__stack) ? __stack : 0x7fc)} : + { + ${RELOCATING+__stack = .;} + *(.stack) + LONG(0xdeaddead) + }" +# We do not need .stack for shared library. +test -n "$CREATE_SHLIB" && OTHER_SECTIONS="" diff --git a/ld/emulparams/elf32mt.sh b/ld/emulparams/elf32mt.sh new file mode 100644 index 0000000000000..667979e65bb9c --- /dev/null +++ b/ld/emulparams/elf32mt.sh @@ -0,0 +1,24 @@ +MACHINE= +SCRIPT_NAME=elf +OUTPUT_FORMAT="elf32-mt" +# See also `include/elf/mt.h' +TEXT_START_ADDR=0x2000 +ARCH=mt +ENTRY=_start +EMBEDDED=yes +ELFSIZE=32 +MAXPAGESIZE=256 +# This is like setting STACK_ADDR to 0x0073FFFF0, except that the setting can +# be overridden, e.g. --defsym _stack=0x0f00, and that we put an extra +# sentinal value at the bottom. +# N.B. We can't use PROVIDE to set the default value in a symbol because +# the address is needed to place the .stack section, which in turn is needed +# to hold the sentinel value(s). +test -z "$CREATE_SHLIB" && OTHER_SECTIONS=" .stack ${RELOCATING-0}${RELOCATING+(DEFINED(__stack) ? __stack : 0x007FFFF0)} : + { + ${RELOCATING+__stack = .;} + *(.stack) + LONG(0xdeaddead) + }" +# We do not need .stack for shared library. +test -n "$CREATE_SHLIB" && OTHER_SECTIONS="" diff --git a/ld/emulparams/elf32ppc.sh b/ld/emulparams/elf32ppc.sh index d95cb78685634..587b8d3aca0a7 100644 --- a/ld/emulparams/elf32ppc.sh +++ b/ld/emulparams/elf32ppc.sh @@ -1,41 +1,15 @@ # If you change this file, please also look at files which source this one: # elf32lppc.sh elf32ppclinux.sh elf32ppcsim.sh -TEMPLATE_NAME=elf32 -EXTRA_EM_FILE=ppc32elf -GENERATE_SHLIB_SCRIPT=yes -GENERATE_PIE_SCRIPT=yes -SCRIPT_NAME=elf -OUTPUT_FORMAT="elf32-powerpc" -TEXT_START_ADDR=0x01800000 -MAXPAGESIZE=0x10000 -COMMONPAGESIZE=0x1000 -ARCH=powerpc:common -MACHINE= +. ${srcdir}/emulparams/elf32ppccommon.sh +# Yes, we want duplicate .got and .plt sections. The linker chooses the +# appropriate one magically in ppc_after_open +DATA_GOT= +SDATA_GOT= +SEPARATE_GOTPLT=0 BSS_PLT= -EXECUTABLE_SYMBOLS='PROVIDE (__stack = 0); PROVIDE (___stack = 0);' -OTHER_BSS_END_SYMBOLS='__end = .;' -OTHER_READWRITE_SECTIONS=" - .fixup ${RELOCATING-0} : { *(.fixup) } - .got1 ${RELOCATING-0} : { *(.got1) } - .got2 ${RELOCATING-0} : { *(.got2) } -" -OTHER_GOT_RELOC_SECTIONS=" - .rela.got1 ${RELOCATING-0} : { *(.rela.got1) } - .rela.got2 ${RELOCATING-0} : { *(.rela.got2) } -" - -# Treat a host that matches the target with the possible exception of "64" -# in the name as if it were native. -if test `echo "$host" | sed -e s/64//` = `echo "$target" | sed -e s/64//`; then - case " $EMULATION_LIBPATH " in - *" ${EMULATION_NAME} "*) - NATIVE=yes - ;; - esac -fi - -# Look for 64 bit target libraries in /lib64, /usr/lib64 etc., first. -case "$EMULATION_NAME" in - *64*) LIBPATH_SUFFIX=64 ;; -esac +GOT=".got ${RELOCATING-0} : SPECIAL { *(.got) }" +PLT=".plt ${RELOCATING-0} : SPECIAL { *(.plt) }" +GOTPLT="${PLT}" +OTHER_TEXT_SECTIONS="*(.glink)" +EXTRA_EM_FILE=ppc32elf diff --git a/ld/emulparams/elf32ppccommon.sh b/ld/emulparams/elf32ppccommon.sh new file mode 100644 index 0000000000000..b5fbc8d8e8989 --- /dev/null +++ b/ld/emulparams/elf32ppccommon.sh @@ -0,0 +1,49 @@ +# The PLT-agnostic parts of a generic 32-bit ELF PowerPC target. Included by: +# elf32ppc.sh elf32ppcvxworks.sh +TEMPLATE_NAME=elf32 +GENERATE_SHLIB_SCRIPT=yes +GENERATE_PIE_SCRIPT=yes +SCRIPT_NAME=elf +OUTPUT_FORMAT="elf32-powerpc" +TEXT_START_ADDR=0x01800000 +MAXPAGESIZE=0x10000 +COMMONPAGESIZE=0x1000 +ARCH=powerpc:common +MACHINE= +EXECUTABLE_SYMBOLS='PROVIDE (__stack = 0); PROVIDE (___stack = 0);' +if test -z "${CREATE_SHLIB}"; then + SDATA_START_SYMBOLS="PROVIDE (_SDA_BASE_ = 32768);" + SDATA2_START_SYMBOLS="PROVIDE (_SDA2_BASE_ = 32768);" + SBSS_START_SYMBOLS="PROVIDE (__sbss_start = .); PROVIDE (___sbss_start = .);" + SBSS_END_SYMBOLS="PROVIDE (__sbss_end = .); PROVIDE (___sbss_end = .);" +else + unset SDATA_START_SYMBOLS + unset SDATA2_START_SYMBOLS + unset SBSS_START_SYMBOLS + unset SBSS_END_SYMBOLS +fi +OTHER_END_SYMBOLS="__end = .;" +OTHER_RELRO_SECTIONS=" + .fixup ${RELOCATING-0} : { *(.fixup) } + .got1 ${RELOCATING-0} : { *(.got1) } + .got2 ${RELOCATING-0} : { *(.got2) } +" +OTHER_GOT_RELOC_SECTIONS=" + .rela.got1 ${RELOCATING-0} : { *(.rela.got1) } + .rela.got2 ${RELOCATING-0} : { *(.rela.got2) } +" + +# Treat a host that matches the target with the possible exception of "64" +# in the name as if it were native. +if test `echo "$host" | sed -e s/64//` = `echo "$target" | sed -e s/64//`; then + case " $EMULATION_LIBPATH " in + *" ${EMULATION_NAME} "*) + NATIVE=yes + ;; + esac +fi + +# Look for 64 bit target libraries in /lib64, /usr/lib64 etc., first. +case "$EMULATION_NAME" in + *64*) LIBPATH_SUFFIX=64 ;; +esac diff --git a/ld/emulparams/elf32ppclinux.sh b/ld/emulparams/elf32ppclinux.sh index 5ced00d1bec98..262731ab32e67 100644 --- a/ld/emulparams/elf32ppclinux.sh +++ b/ld/emulparams/elf32ppclinux.sh @@ -1,8 +1,8 @@ . ${srcdir}/emulparams/elf32ppc.sh TEXT_START_ADDR=0x10000000 unset EXECUTABLE_SYMBOLS -unset OTHER_BSS_END_SYMBOLS +unset OTHER_END_SYMBOLS test -z "${RELOCATING}" || OTHER_SECTIONS="/DISCARD/ : { *(.fixup) }" -OTHER_READWRITE_SECTIONS=" +OTHER_RELRO_SECTIONS=" .got1 ${RELOCATING-0} : { *(.got1) } .got2 ${RELOCATING-0} : { *(.got2) }" diff --git a/ld/emulparams/elf32ppcvxworks.sh b/ld/emulparams/elf32ppcvxworks.sh new file mode 100644 index 0000000000000..1bc3f3093c962 --- /dev/null +++ b/ld/emulparams/elf32ppcvxworks.sh @@ -0,0 +1,3 @@ +. ${srcdir}/emulparams/elf32ppccommon.sh +OUTPUT_FORMAT="elf32-powerpc-vxworks" +. ${srcdir}/emulparams/vxworks.sh diff --git a/ld/emulparams/elf32xc16x.sh b/ld/emulparams/elf32xc16x.sh new file mode 100644 index 0000000000000..808feeddc47af --- /dev/null +++ b/ld/emulparams/elf32xc16x.sh @@ -0,0 +1,8 @@ +SCRIPT_NAME=elf32xc16x +TEMPLATE_NAME=elf32 +OUTPUT_FORMAT="elf32-xc16x" +TEXT_START_ADDR=0x00400 +ARCH=xc16x +MAXPAGESIZE=256 +ENTRY=_start +EMBEDDED=yes diff --git a/ld/emulparams/elf32xc16xl.sh b/ld/emulparams/elf32xc16xl.sh new file mode 100644 index 0000000000000..333f2a6fd78ad --- /dev/null +++ b/ld/emulparams/elf32xc16xl.sh @@ -0,0 +1,8 @@ +SCRIPT_NAME=elf32xc16xl +TEMPLATE_NAME=elf32 +OUTPUT_FORMAT="elf32-xc16x" +TEXT_START_ADDR=0xc00300 +ARCH=xc16x:xc16xl +MAXPAGESIZE=256 +ENTRY=_start +EMBEDDED=yes diff --git a/ld/emulparams/elf32xc16xs.sh b/ld/emulparams/elf32xc16xs.sh new file mode 100644 index 0000000000000..df36f41097715 --- /dev/null +++ b/ld/emulparams/elf32xc16xs.sh @@ -0,0 +1,8 @@ +SCRIPT_NAME=elf32xc16xs +TEMPLATE_NAME=elf32 +OUTPUT_FORMAT="elf32-xc16x" +TEXT_START_ADDR=0xc00300 +ARCH=xc16x:xc16xs +MAXPAGESIZE=256 +ENTRY=_start +EMBEDDED=yes diff --git a/ld/emulparams/elf32xtensa.sh b/ld/emulparams/elf32xtensa.sh index 76f9da85d5a75..c4b13b9a511f8 100644 --- a/ld/emulparams/elf32xtensa.sh +++ b/ld/emulparams/elf32xtensa.sh @@ -15,6 +15,8 @@ MACHINE= GENERATE_SHLIB_SCRIPT=yes GENERATE_COMBRELOC_SCRIPT=yes NO_SMALL_DATA=yes +PLT="/* .plt* sections are embedded in .text */" +GOT=".got ${RELOCATING-0} : { *(.got) }" OTHER_READONLY_SECTIONS=" .got.loc ${RELOCATING-0} : { *(.got.loc) } .xt_except_table ${RELOCATING-0} : { KEEP (*(.xt_except_table)) } @@ -29,4 +31,5 @@ OTHER_READWRITE_SECTIONS=" OTHER_SECTIONS=" .xt.lit 0 : { *(.xt.lit${RELOCATING+ .xt.lit.* .gnu.linkonce.p.*}) } .xt.insn 0 : { *(.xt.insn${RELOCATING+ .gnu.linkonce.x.*}) } + .xt.prop 0 : { *(.xt.prop${RELOCATING+ .gnu.linkonce.prop.*}) } " diff --git a/ld/emulparams/elf64_ia64.sh b/ld/emulparams/elf64_ia64.sh index 60c8c4c9ebf56..c5be56e8508f1 100644 --- a/ld/emulparams/elf64_ia64.sh +++ b/ld/emulparams/elf64_ia64.sh @@ -33,3 +33,7 @@ test -n "$CREATE_PIE" && OTHER_GOT_RELOC_SECTIONS=" OTHER_READONLY_SECTIONS="${OTHER_READONLY_SECTIONS} .IA_64.unwind_info ${RELOCATING-0} : { *(.IA_64.unwind_info${RELOCATING+* .gnu.linkonce.ia64unwi.*}) } .IA_64.unwind ${RELOCATING-0} : { *(.IA_64.unwind${RELOCATING+* .gnu.linkonce.ia64unw.*}) }" +# Intel C++ compiler, prior to 9.0, puts small data in .ctors and +# .dtors. They have to be next to .sbss/.sbss2/.sdata/.sdata2. +SMALL_DATA_CTOR=" " +SMALL_DATA_DTOR=" " diff --git a/ld/emulparams/elf64_ia64_fbsd.sh b/ld/emulparams/elf64_ia64_fbsd.sh index 47cde5c5db072..ab7e78f292a71 100644 --- a/ld/emulparams/elf64_ia64_fbsd.sh +++ b/ld/emulparams/elf64_ia64_fbsd.sh @@ -1,4 +1,6 @@ . ${srcdir}/emulparams/elf64_ia64.sh TEXT_START_ADDR="0x2000000000000000" unset DATA_ADDR +unset SMALL_DATA_CTOR +unset SMALL_DATA_DTOR . ${srcdir}/emulparams/elf_fbsd.sh diff --git a/ld/emulparams/elf64_s390.sh b/ld/emulparams/elf64_s390.sh index 0c689a912f97b..ea75d319838b4 100644 --- a/ld/emulparams/elf64_s390.sh +++ b/ld/emulparams/elf64_s390.sh @@ -3,6 +3,7 @@ ELFSIZE=64 OUTPUT_FORMAT="elf64-s390" TEXT_START_ADDR=0x80000000 MAXPAGESIZE=0x1000 +COMMONPAGESIZE=0x1000 NONPAGED_TEXT_START_ADDR=0x80000000 ARCH="s390:64-bit" MACHINE= diff --git a/ld/emulparams/elf64alpha.sh b/ld/emulparams/elf64alpha.sh index 093c8dfd8e1b7..47a0bb009c77a 100644 --- a/ld/emulparams/elf64alpha.sh +++ b/ld/emulparams/elf64alpha.sh @@ -12,7 +12,13 @@ ARCH=alpha MACHINE= GENERATE_SHLIB_SCRIPT=yes GENERATE_PIE_SCRIPT=yes -DATA_PLT= + +# Yes, we want duplicate .plt sections. The linker chooses the +# appropriate one magically in alpha_after_open. +PLT=".plt ${RELOCATING-0} : SPECIAL { *(.plt) }" +DATA_PLT=yes +TEXT_PLT=yes + # Note that the number is always big-endian, thus we have to # reverse the digit string. NOP=0x0000fe2f1f04ff47 # unop; nop diff --git a/ld/emulparams/elf64mmix.sh b/ld/emulparams/elf64mmix.sh index 1ee9283289164..22b207fce1648 100644 --- a/ld/emulparams/elf64mmix.sh +++ b/ld/emulparams/elf64mmix.sh @@ -58,4 +58,4 @@ OTHER_SECTIONS=' # EXECUTABLE_SYMBOLS. # By default, put the high end of the stack where the register stack # begins. They grow in opposite directions. */ -OTHER_END_SYMBOLS="PROVIDE (__Stack_start = 0x6000000000000000);" +OTHER_SYMBOLS="PROVIDE (__Stack_start = 0x6000000000000000);" diff --git a/ld/emulparams/elf64ppc.sh b/ld/emulparams/elf64ppc.sh index c190b189f698e..8285723fba01e 100644 --- a/ld/emulparams/elf64ppc.sh +++ b/ld/emulparams/elf64ppc.sh @@ -15,13 +15,13 @@ NOP=0x60000000 OTHER_TEXT_SECTIONS="*(.sfpr .glink)" BSS_PLT= OTHER_BSS_SYMBOLS=" - .tocbss ${RELOCATING-0}${RELOCATING+ALIGN(8)} : { *(.tocbss)}" + .tocbss ${RELOCATING-0} :${RELOCATING+ ALIGN(8)} { *(.tocbss)}" OTHER_PLT_RELOC_SECTIONS=" .rela.tocbss ${RELOCATING-0} : { *(.rela.tocbss) }" if test x${RELOCATING+set} = xset; then GOT=" - .got ALIGN(8) : { *(.got .toc) }" + .got : ALIGN(8) { *(.got .toc) }" else GOT=" .got 0 : { *(.got) } @@ -30,8 +30,8 @@ fi OTHER_GOT_RELOC_SECTIONS=" .rela.toc ${RELOCATING-0} : { *(.rela.toc) }" OTHER_READWRITE_SECTIONS=" - .toc1 ${RELOCATING-0}${RELOCATING+ALIGN(8)} : { *(.toc1) } - .opd ${RELOCATING-0}${RELOCATING+ALIGN(8)} : { KEEP (*(.opd)) }" + .toc1 ${RELOCATING-0} :${RELOCATING+ ALIGN(8)} { *(.toc1) } + .opd ${RELOCATING-0} :${RELOCATING+ ALIGN(8)} { KEEP (*(.opd)) }" # Treat a host that matches the target with the possible exception of "64" # in the name as if it were native. diff --git a/ld/emulparams/elf_i386.sh b/ld/emulparams/elf_i386.sh index 2382286b9afa7..af7010b6836e3 100644 --- a/ld/emulparams/elf_i386.sh +++ b/ld/emulparams/elf_i386.sh @@ -11,3 +11,4 @@ TEMPLATE_NAME=elf32 GENERATE_SHLIB_SCRIPT=yes GENERATE_PIE_SCRIPT=yes NO_SMALL_DATA=yes +SEPARATE_GOTPLT=12 diff --git a/ld/emulparams/elf_i386_vxworks.sh b/ld/emulparams/elf_i386_vxworks.sh new file mode 100644 index 0000000000000..8bce8f722c0b6 --- /dev/null +++ b/ld/emulparams/elf_i386_vxworks.sh @@ -0,0 +1,14 @@ +SCRIPT_NAME=elf +OUTPUT_FORMAT="elf32-i386-vxworks" +TEXT_START_ADDR=0x08048000 +MAXPAGESIZE=0x1000 +COMMONPAGESIZE=0x1000 +NONPAGED_TEXT_START_ADDR=0x08048000 +ARCH=i386 +MACHINE= +NOP=0x90909090 +TEMPLATE_NAME=elf32 +GENERATE_SHLIB_SCRIPT=yes +GENERATE_PIE_SCRIPT=yes +NO_SMALL_DATA=yes +. ${srcdir}/emulparams/vxworks.sh diff --git a/ld/emulparams/elf_s390.sh b/ld/emulparams/elf_s390.sh index e710673111435..8d057dc3df14e 100644 --- a/ld/emulparams/elf_s390.sh +++ b/ld/emulparams/elf_s390.sh @@ -2,6 +2,7 @@ SCRIPT_NAME=elf OUTPUT_FORMAT="elf32-s390" TEXT_START_ADDR=0x00400000 MAXPAGESIZE=0x1000 +COMMONPAGESIZE=0x1000 NONPAGED_TEXT_START_ADDR=0x00400000 ARCH="s390:31-bit" MACHINE= diff --git a/ld/emulparams/elf_x86_64.sh b/ld/emulparams/elf_x86_64.sh index 6d3705828b2eb..35240df04cf9f 100644 --- a/ld/emulparams/elf_x86_64.sh +++ b/ld/emulparams/elf_x86_64.sh @@ -12,6 +12,8 @@ TEMPLATE_NAME=elf32 GENERATE_SHLIB_SCRIPT=yes GENERATE_PIE_SCRIPT=yes NO_SMALL_DATA=yes +LARGE_SECTIONS=yes +SEPARATE_GOTPLT=24 if [ "x${host}" = "x${target}" ]; then case " $EMULATION_LIBPATH " in diff --git a/ld/emulparams/h8300.sh b/ld/emulparams/h8300.sh index 49eb3c453db4d..68ecdb3be7d4e 100644 --- a/ld/emulparams/h8300.sh +++ b/ld/emulparams/h8300.sh @@ -3,3 +3,16 @@ OUTPUT_FORMAT="coff-h8300" TEXT_START_ADDR=0x8000 TARGET_PAGE_SIZE=128 ARCH=h8300 +TINY_READONLY_SECTION=".tinyrodata : + { + *(.tinyrodata) + } =0" +TINY_DATA_SECTION=".tinydata 0xff8000 : + { + *(.tinydata) + _tinydata = .; + }" +TINY_BSS_SECTION=".tinybss : AT (_tinydata) + { + *(.tinybss) + }" diff --git a/ld/emulparams/h8300elf.sh b/ld/emulparams/h8300elf.sh index 0617d5b1ccaa0..67d5b20361e8a 100644 --- a/ld/emulparams/h8300elf.sh +++ b/ld/emulparams/h8300elf.sh @@ -10,3 +10,16 @@ ARCH=h8300 TEMPLATE_NAME=elf32 EMBEDDED=yes STACK_ADDR=0xfefc +TINY_READONLY_SECTION=".tinyrodata : + { + *(.tinyrodata) + } =0" +TINY_DATA_SECTION=".tinydata 0xff8000 : + { + *(.tinydata) + _tinydata = .; + }" +TINY_BSS_SECTION=".tinybss : AT (_tinydata) + { + *(.tinybss) + }" diff --git a/ld/emulparams/h8300sxelf.sh b/ld/emulparams/h8300sxelf.sh index 18f82f64f433e..bac2cc3cd0e88 100644 --- a/ld/emulparams/h8300sxelf.sh +++ b/ld/emulparams/h8300sxelf.sh @@ -1,3 +1,16 @@ . ${srcdir}/emulparams/h8300elf.sh ARCH="h8300:h8300sx" STACK_ADDR=0x2fefc +TINY_READONLY_SECTION=".tinyrodata : + { + *(.tinyrodata) + } =0" +TINY_DATA_SECTION=".tinydata 0xff8000 : + { + *(.tinydata) + _tinydata = .; + }" +TINY_BSS_SECTION=".tinybss : AT (_tinydata) + { + *(.tinybss) + }" diff --git a/ld/emulparams/hppa64linux.sh b/ld/emulparams/hppa64linux.sh index 6e01c20b08ed6..aaf8c7251f5a5 100644 --- a/ld/emulparams/hppa64linux.sh +++ b/ld/emulparams/hppa64linux.sh @@ -27,15 +27,11 @@ OTHER_READWRITE_SECTIONS=" .plt ${RELOCATING-0} : { *(.plt) } .dlt ${RELOCATING-0} : { *(.dlt) }" -# The PA64 ELF port has two additional bss sections. huge bss and thread bss. -# Make sure they end up in the appropriate location. We also have to set -# __TLS_SIZE to the size of the thread bss section. -OTHER_BSS_SECTIONS=" - .hbss ${RELOCATING-0} : { *(.hbss) } - .tbss ${RELOCATING-0} : { *(.tbss) } -" -#OTHER_BSS_END_SYMBOLS='PROVIDE (__TLS_SIZE = SIZEOF (.tbss));' -OTHER_BSS_END_SYMBOLS=' +# The PA64 ELF port has an additional huge bss section. +LARGE_SECTIONS=".hbss ${RELOCATING-0} : { *(.hbss) }" + +#OTHER_SYMBOLS='PROVIDE (__TLS_SIZE = SIZEOF (.tbss));' +OTHER_SYMBOLS=' PROVIDE (__TLS_SIZE = 0); PROVIDE (__TLS_INIT_SIZE = 0); PROVIDE (__TLS_INIT_START = 0); @@ -53,6 +49,7 @@ OTHER_GOT_RELOC_SECTIONS=" DATA_START_SYMBOLS='. += 16;' DATA_PLT= +PLT_BEFORE_GOT= # .dynamic should be at the start of the .text segment. TEXT_DYNAMIC= diff --git a/ld/emulparams/hppalinux.sh b/ld/emulparams/hppalinux.sh index 08309b3dbf4c2..89a253f2e0a18 100644 --- a/ld/emulparams/hppalinux.sh +++ b/ld/emulparams/hppalinux.sh @@ -15,6 +15,8 @@ OTHER_READONLY_SECTIONS=" .PARISC.unwind ${RELOCATING-0} : { *(.PARISC.unwind) }" DATA_START_SYMBOLS='PROVIDE ($global$ = .);' DATA_PLT= +PLT_BEFORE_GOT= GENERATE_SHLIB_SCRIPT=yes +GENERATE_PIE_SCRIPT=yes TEMPLATE_NAME=elf32 EXTRA_EM_FILE=hppaelf diff --git a/ld/emulparams/i386lynx.sh b/ld/emulparams/i386lynx.sh index 988c1751b0824..3235ebea01a6e 100644 --- a/ld/emulparams/i386lynx.sh +++ b/ld/emulparams/i386lynx.sh @@ -1,9 +1,17 @@ -SCRIPT_NAME=i386lynx -OUTPUT_FORMAT="coff-i386-lynx" -# This is what LynxOS /lib/init1.o wants. +SCRIPT_NAME=elf +OUTPUT_FORMAT="elf32-i386" ENTRY=_main -# following are dubious -TARGET_PAGE_SIZE=0x1000 -TEXT_START_ADDR=0 +TEXT_BASE=0x0 +DYN_TEXT_BASE=0x00400000 +TEXT_START_ADDR="(DEFINED(_DYNAMIC) ? ${DYN_TEXT_BASE} : ${TEXT_BASE})" +MAXPAGESIZE=0x1000 NONPAGED_TEXT_START_ADDR=0x1000 ARCH=i386 +MACHINE= +NOP=0x9090 +TEMPLATE_NAME=elf32 +GENERATE_SHLIB_SCRIPT=yes +ELF_INTERPRETER_NAME=\"/usr/lib/ld.so.1\" + +# Leave room of SIZEOF_HEADERS before text. +EMBEDDED= diff --git a/ld/emulparams/i386pe.sh b/ld/emulparams/i386pe.sh index a8add23d6d1d6..879379f9c5dff 100644 --- a/ld/emulparams/i386pe.sh +++ b/ld/emulparams/i386pe.sh @@ -6,3 +6,4 @@ TEMPLATE_NAME=pe ENTRY="_mainCRTStartup" SUBSYSTEM=PE_DEF_SUBSYSTEM INITIAL_SYMBOL_CHAR=\"_\" +TARGET_PAGE_SIZE=0x1000 diff --git a/ld/emulparams/i386pe_posix.sh b/ld/emulparams/i386pe_posix.sh index 37f51b5eeeaac..afa00de0cdf21 100644 --- a/ld/emulparams/i386pe_posix.sh +++ b/ld/emulparams/i386pe_posix.sh @@ -7,3 +7,4 @@ ENTRY="___PosixProcessStartup" SUBSYSTEM=7 EXECUTABLE_NAME=a.out INITIAL_SYMBOL_CHAR=\"_\" +TARGET_PAGE_SIZE=0x1000 diff --git a/ld/emulparams/m32relf.sh b/ld/emulparams/m32relf.sh index c67472abf52e0..947c7a8eae184 100644 --- a/ld/emulparams/m32relf.sh +++ b/ld/emulparams/m32relf.sh @@ -9,4 +9,4 @@ MAXPAGESIZE=32 EMBEDDED=yes # This sets the stack to the top of simulator memory (8MB). -OTHER_END_SYMBOLS='PROVIDE (_stack = 0x800000);' +OTHER_SYMBOLS='PROVIDE (_stack = 0x800000);' diff --git a/ld/emulparams/m32relf_linux.sh b/ld/emulparams/m32relf_linux.sh index 814c91a792e59..be2ad23240cae 100644 --- a/ld/emulparams/m32relf_linux.sh +++ b/ld/emulparams/m32relf_linux.sh @@ -11,3 +11,4 @@ MAXPAGESIZE=0x1000 # top of simulator memory (32MB). OTHER_RELOCATING_SECTIONS='PROVIDE (_stack = 0x2000000);' GENERATE_SHLIB_SCRIPT=yes +GENERATE_PIE_SCRIPT=yes diff --git a/ld/emulparams/m68klynx.sh b/ld/emulparams/m68klynx.sh deleted file mode 100644 index b020febaaaa1e..0000000000000 --- a/ld/emulparams/m68klynx.sh +++ /dev/null @@ -1,8 +0,0 @@ -SCRIPT_NAME=m68klynx -OUTPUT_FORMAT="coff-m68k-lynx" -# This is what LynxOS /lib/init1.o wants. -ENTRY=__main -# following are dubious -TEXT_START_ADDR=0 -TARGET_PAGE_SIZE=0x1000 -ARCH=m68k diff --git a/ld/emulparams/maxqcoff.sh b/ld/emulparams/maxqcoff.sh new file mode 100644 index 0000000000000..d07533bad6b7d --- /dev/null +++ b/ld/emulparams/maxqcoff.sh @@ -0,0 +1,7 @@ +OUTPUT_FORMAT="coff-maxq" + +SCRIPT_NAME=maxqcoff + +ARCH=MAXQ + +TEXT_START_ADDR=0x8000 diff --git a/ld/emulparams/mcorepe.sh b/ld/emulparams/mcorepe.sh index 3c19e02ca1e81..8326c2e514426 100644 --- a/ld/emulparams/mcorepe.sh +++ b/ld/emulparams/mcorepe.sh @@ -7,3 +7,4 @@ TEMPLATE_NAME=pe ENTRY="_mainCRTStartup" SUBSYSTEM=PE_DEF_SUBSYSTEM INITIAL_SYMBOL_CHAR=\"_\" +TARGET_PAGE_SIZE=0x1000 diff --git a/ld/emulparams/mipsidt.sh b/ld/emulparams/mipsidt.sh index 63176f5fdeae1..f381267679e00 100644 --- a/ld/emulparams/mipsidt.sh +++ b/ld/emulparams/mipsidt.sh @@ -7,5 +7,6 @@ ARCH=mips ENTRY=start TEXT_START_ADDR=0xa0012000 DATA_ADDR=. -TEMPLATE_NAME=mipsecoff +TEMPLATE_NAME=generic +EXTRA_EM_FILE=mipsecoff EMBEDDED=yes diff --git a/ld/emulparams/mipsidtl.sh b/ld/emulparams/mipsidtl.sh index 02279ded6359d..52447ff09fda9 100644 --- a/ld/emulparams/mipsidtl.sh +++ b/ld/emulparams/mipsidtl.sh @@ -7,5 +7,6 @@ ARCH=mips ENTRY=start TEXT_START_ADDR=0xa0012000 DATA_ADDR=. -TEMPLATE_NAME=mipsecoff +TEMPLATE_NAME=generic +EXTRA_EM_FILE=mipsecoff EMBEDDED=yes diff --git a/ld/emulparams/mipspe.sh b/ld/emulparams/mipspe.sh index 9dd9ce761efb2..a5cfc2ef60e4a 100644 --- a/ld/emulparams/mipspe.sh +++ b/ld/emulparams/mipspe.sh @@ -7,3 +7,4 @@ TEMPLATE_NAME=pe SUBSYSTEM=PE_DEF_SUBSYSTEM INITIAL_SYMBOL_CHAR=\"_\" ENTRY="_mainCRTStartup" +TARGET_PAGE_SIZE=0x1000 diff --git a/ld/emulparams/msp430all.sh b/ld/emulparams/msp430all.sh index 3aa3289ee0d46..baee02eefd574 100644 --- a/ld/emulparams/msp430all.sh +++ b/ld/emulparams/msp430all.sh @@ -286,9 +286,9 @@ EMBEDDED=yes TEMPLATE_NAME=generic ROM_START=0x4000 -ROM_SIZE=0xbef0 +ROM_SIZE=0xbfe0 RAM_START=0x0200 -RAM_SIZE=0x07ff +RAM_SIZE=0x0800 STACK=0xa00 fi @@ -305,7 +305,7 @@ TEMPLATE_NAME=generic ROM_START=0x1100 ROM_SIZE=0xeee0 RAM_START=0x0200 -RAM_SIZE=0x07ff +RAM_SIZE=0x0800 STACK=0xa00 fi @@ -388,9 +388,9 @@ EMBEDDED=yes TEMPLATE_NAME=generic ROM_START=0x4000 -ROM_SIZE=0xbef0 +ROM_SIZE=0xbfe0 RAM_START=0x0200 -RAM_SIZE=0x07ff +RAM_SIZE=0x0800 STACK=0xa00 fi @@ -407,11 +407,130 @@ TEMPLATE_NAME=generic ROM_START=0x1100 ROM_SIZE=0xeee0 RAM_START=0x0200 -RAM_SIZE=0x07ff +RAM_SIZE=0x0800 STACK=0xa00 fi +if [ "${MSP430_NAME}" = "msp430x1610" ] ; then +ARCH=msp:16 +MACHINE= +SCRIPT_NAME=elf32msp430 +OUTPUT_FORMAT="elf32-msp430" +MAXPAGESIZE=1 +EMBEDDED=yes +TEMPLATE_NAME=generic + +ROM_START=0x8000 +ROM_SIZE=0x7fe0 +RAM_START=0x1100 +RAM_SIZE=0x1400 + +STACK=0x2500 +fi + +if [ "${MSP430_NAME}" = "msp430x1611" ] ; then +ARCH=msp:16 +MACHINE= +SCRIPT_NAME=elf32msp430 +OUTPUT_FORMAT="elf32-msp430" +MAXPAGESIZE=1 +EMBEDDED=yes +TEMPLATE_NAME=generic + +ROM_START=0x4000 +ROM_SIZE=0xbfe0 +RAM_START=0x1100 +RAM_SIZE=0x2800 + +STACK=0x3900 +fi + +if [ "${MSP430_NAME}" = "msp430x1612" ] ; then +ARCH=msp:16 +MACHINE= +SCRIPT_NAME=elf32msp430 +OUTPUT_FORMAT="elf32-msp430" +MAXPAGESIZE=1 +EMBEDDED=yes +TEMPLATE_NAME=generic + +ROM_START=0x2500 +ROM_SIZE=0xdae0 +RAM_START=0x1100 +RAM_SIZE=0x1400 + +STACK=0x2500 +fi + +if [ "${MSP430_NAME}" = "msp430x2101" ] ; then +ARCH=msp:21 +MACHINE= +SCRIPT_NAME=elf32msp430 +OUTPUT_FORMAT="elf32-msp430" +MAXPAGESIZE=1 +EMBEDDED=yes +TEMPLATE_NAME=generic + +ROM_START=0xFC00 +ROM_SIZE=0x03e0 +RAM_START=0x0200 +RAM_SIZE=128 + +STACK=0x280 +fi + +if [ "${MSP430_NAME}" = "msp430x2111" ] ; then +ARCH=msp:21 +MACHINE= +SCRIPT_NAME=elf32msp430 +OUTPUT_FORMAT="elf32-msp430" +MAXPAGESIZE=1 +EMBEDDED=yes +TEMPLATE_NAME=generic + +ROM_START=0xF800 +ROM_SIZE=0x07e0 +RAM_START=0x0200 +RAM_SIZE=128 + +STACK=0x280 +fi + +if [ "${MSP430_NAME}" = "msp430x2121" ] ; then +ARCH=msp:21 +MACHINE= +SCRIPT_NAME=elf32msp430 +OUTPUT_FORMAT="elf32-msp430" +MAXPAGESIZE=1 +EMBEDDED=yes +TEMPLATE_NAME=generic + +ROM_START=0xf000 +ROM_SIZE=0x0fe0 +RAM_START=0x0200 +RAM_SIZE=256 + +STACK=0x300 +fi + +if [ "${MSP430_NAME}" = "msp430x2131" ] ; then +ARCH=msp:21 +MACHINE= +SCRIPT_NAME=elf32msp430 +OUTPUT_FORMAT="elf32-msp430" +MAXPAGESIZE=1 +EMBEDDED=yes +TEMPLATE_NAME=generic + +ROM_START=0xe000 +ROM_SIZE=0x1fe0 +RAM_START=0x0200 +RAM_SIZE=256 + +STACK=0x300 +fi + if [ "${MSP430_NAME}" = "msp430x311" ] ; then ARCH=msp:31 MACHINE= @@ -599,6 +718,40 @@ RAM_SIZE=256 STACK=0x300 fi +if [ "${MSP430_NAME}" = "msp430x415" ] ; then +ARCH=msp:41 +MACHINE= +SCRIPT_NAME=elf32msp430 +OUTPUT_FORMAT="elf32-msp430" +MAXPAGESIZE=1 +EMBEDDED=yes +TEMPLATE_NAME=generic + +ROM_START=0xc000 +ROM_SIZE=0x3fe0 +RAM_START=0x0200 +RAM_SIZE=512 + +STACK=0x400 +fi + +if [ "${MSP430_NAME}" = "msp430x417" ] ; then +ARCH=msp:41 +MACHINE= +SCRIPT_NAME=elf32msp430 +OUTPUT_FORMAT="elf32-msp430" +MAXPAGESIZE=1 +EMBEDDED=yes +TEMPLATE_NAME=generic + +ROM_START=0x8000 +ROM_SIZE=0x7fe0 +RAM_START=0x0200 +RAM_SIZE=1024 + +STACK=0x600 +fi + if [ "${MSP430_NAME}" = "msp430x435" ] ; then ARCH=msp:43 MACHINE= @@ -662,7 +815,7 @@ TEMPLATE_NAME=generic ROM_START=0x8000 ROM_SIZE=0x7fe0 RAM_START=0x0200 -RAM_SIZE=1K +RAM_SIZE=1024 STACK=0x600 fi @@ -677,9 +830,9 @@ EMBEDDED=yes TEMPLATE_NAME=generic ROM_START=0x4000 -ROM_SIZE=0xbef0 +ROM_SIZE=0xbfe0 RAM_START=0x0200 -RAM_SIZE=0x07ff +RAM_SIZE=0x0800 STACK=0xa00 fi @@ -696,7 +849,7 @@ TEMPLATE_NAME=generic ROM_START=0x1100 ROM_SIZE=0xeee0 RAM_START=0x0200 -RAM_SIZE=0x07ff +RAM_SIZE=0x0800 STACK=0xa00 fi @@ -747,11 +900,62 @@ TEMPLATE_NAME=generic ROM_START=0x8000 ROM_SIZE=0x7fe0 RAM_START=0x0200 -RAM_SIZE=1K +RAM_SIZE=1024 STACK=0x600 fi +if [ "${MSP430_NAME}" = "msp430xG437" ] ; then +ARCH=msp:43 +MACHINE= +SCRIPT_NAME=elf32msp430 +OUTPUT_FORMAT="elf32-msp430" +MAXPAGESIZE=1 +EMBEDDED=yes +TEMPLATE_NAME=generic + +ROM_START=0x8000 +ROM_SIZE=0x7fe0 +RAM_START=0x0200 +RAM_SIZE=1024 + +STACK=0x600 +fi + +if [ "${MSP430_NAME}" = "msp430xG438" ] ; then +ARCH=msp:43 +MACHINE= +SCRIPT_NAME=elf32msp430 +OUTPUT_FORMAT="elf32-msp430" +MAXPAGESIZE=1 +EMBEDDED=yes +TEMPLATE_NAME=generic + +ROM_START=0x4000 +ROM_SIZE=0xbef0 +RAM_START=0x0200 +RAM_SIZE=0x0800 + +STACK=0xa00 +fi + +if [ "${MSP430_NAME}" = "msp430xG439" ] ; then +ARCH=msp:43 +MACHINE= +SCRIPT_NAME=elf32msp430 +OUTPUT_FORMAT="elf32-msp430" +MAXPAGESIZE=1 +EMBEDDED=yes +TEMPLATE_NAME=generic + +ROM_START=0x1100 +ROM_SIZE=0xeee0 +RAM_START=0x0200 +RAM_SIZE=0x0800 + +STACK=0xa00 +fi + if [ "${MSP430_NAME}" = "msp430xW423" ] ; then ARCH=msp:42 MACHINE= @@ -798,7 +1002,7 @@ TEMPLATE_NAME=generic ROM_START=0x8000 ROM_SIZE=0x7fe0 RAM_START=0x0200 -RAM_SIZE=1K +RAM_SIZE=0x400 STACK=0x600 fi diff --git a/ld/emulparams/ppclynx.sh b/ld/emulparams/ppclynx.sh new file mode 100644 index 0000000000000..2534687114ed9 --- /dev/null +++ b/ld/emulparams/ppclynx.sh @@ -0,0 +1,20 @@ +SCRIPT_NAME=elf +OUTPUT_FORMAT="elf32-powerpc" +TEXT_BASE=0x00002000 +DYN_TEXT_BASE=0x00400000 +TEXT_START_ADDR="(DEFINED(_DYNAMIC) ? ${DYN_TEXT_BASE} : ${TEXT_BASE})" +MAXPAGESIZE=0x10000 +NONPAGED_TEXT_START_ADDR=0x1000 +ARCH=powerpc +MACHINE= +TEMPLATE_NAME=elf32 +GENERATE_SHLIB_SCRIPT=yes +ELF_INTERPRETER_NAME=\"/usr/lib/ld.so.1\" + +# Leave room of SIZEOF_HEADERS before text. +EMBEDDED= +# PLT on PowerPC is generated at run-time. +BSS_PLT= +OTHER_READWRITE_SECTIONS=" + .got1 ${RELOCATING-0} : { *(.got1) } + .got2 ${RELOCATING-0} : { *(.got2) }" diff --git a/ld/emulparams/ppcpe.sh b/ld/emulparams/ppcpe.sh index a2d09ef2238b0..2e1e10207c889 100644 --- a/ld/emulparams/ppcpe.sh +++ b/ld/emulparams/ppcpe.sh @@ -5,3 +5,4 @@ TEMPLATE_NAME=pe ENTRY="_mainCRTStartup" SUBSYSTEM=PE_DEF_SUBSYSTEM INITIAL_SYMBOL_CHAR=\"_\" +TARGET_PAGE_SIZE=0x1000 diff --git a/ld/emulparams/sa29200.sh b/ld/emulparams/sa29200.sh deleted file mode 100644 index 8b52f92968dd3..0000000000000 --- a/ld/emulparams/sa29200.sh +++ /dev/null @@ -1,5 +0,0 @@ -SCRIPT_NAME=sa29200 -OUTPUT_FORMAT="coff-a29k-big" -TEXT_START_ADDR=0x40004000 -TARGET_PAGE_SIZE=0x1000 -ARCH=a29k diff --git a/ld/emulparams/shelf.sh b/ld/emulparams/shelf.sh index ef0de461915d5..6f66bf5efa4df 100644 --- a/ld/emulparams/shelf.sh +++ b/ld/emulparams/shelf.sh @@ -17,13 +17,13 @@ CTOR_START='___ctors = .;' CTOR_END='___ctors_end = .;' DTOR_START='___dtors = .;' DTOR_END='___dtors_end = .;' -# This is like setting STACK_ADDR to 0x30000, except that the setting can +# This is like setting STACK_ADDR to 0x300000, except that the setting can # be overridden, e.g. --defsym _stack=0x0f00, and that we put an extra # sentinal value at the bottom. # N.B. We can't use PROVIDE to set the default value in a symbol because # the address is needed to place the .stack section, which in turn is needed # to hold the sentinel value(s). -test -z "$CREATE_SHLIB" && OTHER_SECTIONS=" .stack ${RELOCATING-0}${RELOCATING+(DEFINED(_stack) ? _stack : 0x30000)} : +test -z "$CREATE_SHLIB" && OTHER_SECTIONS=" .stack ${RELOCATING-0}${RELOCATING+(DEFINED(_stack) ? _stack : 0x300000)} : { ${RELOCATING+_stack = .;} *(.stack) diff --git a/ld/emulparams/shlelf32_linux.sh b/ld/emulparams/shlelf32_linux.sh index 63a8356c53514..59d4179d31242 100644 --- a/ld/emulparams/shlelf32_linux.sh +++ b/ld/emulparams/shlelf32_linux.sh @@ -5,6 +5,7 @@ SCRIPT_NAME=elf OUTPUT_FORMAT="elf32-sh64-linux" TEXT_START_ADDR=0x400000 MAXPAGESIZE=0x10000 +COMMONPAGESIZE=0x1000 ARCH=sh MACHINE=sh5 ALIGNMENT=8 diff --git a/ld/emulparams/shlsymbian.sh b/ld/emulparams/shlsymbian.sh new file mode 100644 index 0000000000000..9c6dfba7b33fd --- /dev/null +++ b/ld/emulparams/shlsymbian.sh @@ -0,0 +1,17 @@ +TEXT_START_ADDR=0x8000 +SHLIB_TEXT_START_ADDR=0x8000 +SHLIB_DATA_ADDR=0x400000 + +. ${srcdir}/emulparams/shelf.sh + +# Use only two underscores for the constructor/destructor symbols +CTOR_START='__ctors = .;' +CTOR_END='__ctors_end = .;' +DTOR_START='__dtors = .;' +DTOR_END='__dtors_end = .;' + +# Suppress the .stack section. +test -z "$CREATE_SHLIB" && OTHER_SECTIONS="${RELOCATING+PROVIDE (_stack = 0x30000);}" + +OUTPUT_FORMAT="elf32-shl-symbian" +SCRIPT_NAME=elf32sh-symbian diff --git a/ld/emulparams/shpe.sh b/ld/emulparams/shpe.sh index 44aeef33be419..d50861f55d5a8 100644 --- a/ld/emulparams/shpe.sh +++ b/ld/emulparams/shpe.sh @@ -7,3 +7,4 @@ INITIAL_SYMBOL_CHAR=\"_\" ENTRY="_mainCRTStartup" SUBSYSTEM=PE_DEF_SUBSYSTEM INITIAL_SYMBOL_CHAR=\"_\" +TARGET_PAGE_SIZE=0x1000 diff --git a/ld/emulparams/sparclynx.sh b/ld/emulparams/sparclynx.sh deleted file mode 100644 index 9aeb30b133405..0000000000000 --- a/ld/emulparams/sparclynx.sh +++ /dev/null @@ -1,9 +0,0 @@ -SCRIPT_NAME=sparclynx -OUTPUT_FORMAT="coff-sparc-lynx" -# This is what LynxOS /lib/init1.o wants. -ENTRY=__main -# following are dubious -TARGET_PAGE_SIZE=0x1000 -TEXT_START_ADDR=0 -NONPAGED_TEXT_START_ADDR=0x1000 -ARCH=sparc diff --git a/ld/emulparams/vxworks.sh b/ld/emulparams/vxworks.sh new file mode 100644 index 0000000000000..4382859e645c4 --- /dev/null +++ b/ld/emulparams/vxworks.sh @@ -0,0 +1,28 @@ +# If you change this file, please also look at files which source this one: +# elf_i386_vxworks.sh elf32ppcvxworks.sh elf32ebmipvxworks.sh + +# The Diab tools use a different init/fini convention. Initialization code +# is place in sections named ".init$NN". These sections are then concatenated +# into the .init section. It is important that .init$00 be first and .init$99 +# be last. The other sections should be sorted, but the current linker script +# parse does not seem to allow that with the SORT keyword in this context. +INIT_START='_init = .; + KEEP (*(.init$00)); + KEEP (*(.init$0[1-9])); + KEEP (*(.init$[1-8][0-9])); + KEEP (*(.init$9[0-8]));' +INIT_END='KEEP (*(.init$99));' +FINI_START='_fini = .; + KEEP (*(.fini$00)); + KEEP (*(.fini$0[1-9])); + KEEP (*(.fini$[1-8][0-9])); + KEEP (*(.fini$9[0-8]));' +FINI_END='KEEP (*(.fini$99)); + PROVIDE (_etext = .);' + +ETEXT_NAME=etext_unrelocated +OTHER_SYMBOLS="PROVIDE (_ehdr = ${TEXT_START_ADDR});" +DATA_END_SYMBOLS=".edata : { PROVIDE (_edata = .); }" +VXWORKS_BASE_EM_FILE=$EXTRA_EM_FILE +EXTRA_EM_FILE=vxworks +unset EMBEDDED diff --git a/ld/emulparams/z80.sh b/ld/emulparams/z80.sh new file mode 100644 index 0000000000000..a4fdbd50b4a40 --- /dev/null +++ b/ld/emulparams/z80.sh @@ -0,0 +1,6 @@ +SCRIPT_NAME=z80 +OUTPUT_FORMAT="coff-z80" +OUTPUT_ARCH="z80" +TEXT_START_ADDR=0x100 +EXTRA_EM_FILE=z80 +ARCH=z80 |