summaryrefslogtreecommitdiff
path: root/ld/emulparams
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2010-10-19 21:13:25 +0000
committerDimitry Andric <dim@FreeBSD.org>2010-10-19 21:13:25 +0000
commit7a815afd9b5121ee0f65dc1e1de1c0de6de97679 (patch)
treef61b968a46c92e81f6de581582cb064bf9dca27d /ld/emulparams
parent42f6b9ffef1927d55d15075d9e810435c590c404 (diff)
Notes
Diffstat (limited to 'ld/emulparams')
-rw-r--r--ld/emulparams/a29k.sh5
-rw-r--r--ld/emulparams/arm_epoc_pe.sh1
-rw-r--r--ld/emulparams/armelf.sh11
-rw-r--r--ld/emulparams/armelf_fbsd.sh1
-rw-r--r--ld/emulparams/armelf_linux.sh5
-rw-r--r--ld/emulparams/armelf_linux_eabi.sh9
-rw-r--r--ld/emulparams/armelf_nbsd.sh1
-rw-r--r--ld/emulparams/armelf_oabi.sh23
-rw-r--r--ld/emulparams/armelf_vxworks.sh6
-rw-r--r--ld/emulparams/armelfb_linux_eabi.sh2
-rw-r--r--ld/emulparams/armnto.sh3
-rw-r--r--ld/emulparams/armpe.sh2
-rw-r--r--ld/emulparams/armsymbian.sh25
-rwxr-xr-xld/emulparams/bfin.sh14
-rw-r--r--ld/emulparams/criself.sh10
-rw-r--r--ld/emulparams/crislinux.sh2
-rw-r--r--ld/emulparams/ebmon29k.sh5
-rw-r--r--ld/emulparams/elf32_sparc_vxworks.sh4
-rw-r--r--ld/emulparams/elf32bfinfd.sh16
-rw-r--r--ld/emulparams/elf32bmip.sh17
-rw-r--r--ld/emulparams/elf32bmipn32-defs.sh6
-rw-r--r--ld/emulparams/elf32btsmip.sh1
-rw-r--r--ld/emulparams/elf32cr16c.sh5
-rw-r--r--ld/emulparams/elf32crx.sh6
-rw-r--r--ld/emulparams/elf32ebmipvxworks.sh11
-rw-r--r--ld/emulparams/elf32elmipvxworks.sh11
-rwxr-xr-xld/emulparams/elf32fr30.sh2
-rwxr-xr-xld/emulparams/elf32frv.sh2
-rw-r--r--ld/emulparams/elf32frvfd.sh1
-rw-r--r--ld/emulparams/elf32m32c.sh26
-rw-r--r--ld/emulparams/elf32mt.sh24
-rw-r--r--ld/emulparams/elf32ppc.sh48
-rw-r--r--ld/emulparams/elf32ppccommon.sh49
-rw-r--r--ld/emulparams/elf32ppclinux.sh4
-rw-r--r--ld/emulparams/elf32ppcvxworks.sh3
-rw-r--r--ld/emulparams/elf32xc16x.sh8
-rw-r--r--ld/emulparams/elf32xc16xl.sh8
-rw-r--r--ld/emulparams/elf32xc16xs.sh8
-rw-r--r--ld/emulparams/elf32xtensa.sh3
-rw-r--r--ld/emulparams/elf64_ia64.sh4
-rw-r--r--ld/emulparams/elf64_ia64_fbsd.sh2
-rw-r--r--ld/emulparams/elf64_s390.sh1
-rw-r--r--ld/emulparams/elf64alpha.sh8
-rw-r--r--ld/emulparams/elf64mmix.sh2
-rw-r--r--ld/emulparams/elf64ppc.sh8
-rw-r--r--ld/emulparams/elf_i386.sh1
-rw-r--r--ld/emulparams/elf_i386_vxworks.sh14
-rw-r--r--ld/emulparams/elf_s390.sh1
-rw-r--r--ld/emulparams/elf_x86_64.sh2
-rw-r--r--ld/emulparams/h8300.sh13
-rw-r--r--ld/emulparams/h8300elf.sh13
-rw-r--r--ld/emulparams/h8300sxelf.sh13
-rw-r--r--ld/emulparams/hppa64linux.sh15
-rw-r--r--ld/emulparams/hppalinux.sh2
-rw-r--r--ld/emulparams/i386lynx.sh20
-rw-r--r--ld/emulparams/i386pe.sh1
-rw-r--r--ld/emulparams/i386pe_posix.sh1
-rw-r--r--ld/emulparams/m32relf.sh2
-rw-r--r--ld/emulparams/m32relf_linux.sh1
-rw-r--r--ld/emulparams/m68klynx.sh8
-rw-r--r--ld/emulparams/maxqcoff.sh7
-rw-r--r--ld/emulparams/mcorepe.sh1
-rw-r--r--ld/emulparams/mipsidt.sh3
-rw-r--r--ld/emulparams/mipsidtl.sh3
-rw-r--r--ld/emulparams/mipspe.sh1
-rw-r--r--ld/emulparams/msp430all.sh228
-rw-r--r--ld/emulparams/ppclynx.sh20
-rw-r--r--ld/emulparams/ppcpe.sh1
-rw-r--r--ld/emulparams/sa29200.sh5
-rw-r--r--ld/emulparams/shelf.sh4
-rw-r--r--ld/emulparams/shlelf32_linux.sh1
-rw-r--r--ld/emulparams/shlsymbian.sh17
-rw-r--r--ld/emulparams/shpe.sh1
-rw-r--r--ld/emulparams/sparclynx.sh9
-rw-r--r--ld/emulparams/vxworks.sh28
-rw-r--r--ld/emulparams/z80.sh6
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