ld/arc: Fix linker for big-endian arc targets

This aims to bring the linker for big-endian arc targets into line with
the linker for (the default) little endian arc targets.

The bulk of the changes are to extend the target pattern in the test
files from 'arc-*...' to 'arc*-*...' and so match both big and little
endian arc targets.

In the ld/emulparams/ directory the existing scripts checked for a
variable ARC_ENDIAN to switch between big and little endian targets,
however, this variable is never set up.

So, a new script snippet is introduced which sets up ARC_ENDIAN based on
the value of target, this snippet is then included from all of the
existing arc scripts.

The existing big-endian variants of all the scripts, which existed, but
were never used, are deleted in this commit.

ld/ChangeLog:

	* emulparams/arc-endianness.sh: New file.
	* emulparams/arcebelf.sh: Deleted.
	* emulparams/arcebelf_prof.sh: Deleted.
	* emulparams/arceblinux.sh: Deleted.
	* emulparams/arceblinux_prof.sh: Deleted.
	* emulparams/arcelf.sh: Include arc-endinness.sh.
	* emulparams/arcelf_prof.sh: Include arc-endinness.sh.
	* emulparams/arclinux.sh: Include arc-endinness.sh.
	* emulparams/arclinux_prof.sh: Include arc-endinness.sh.
	* emulparams/arcv2elf.sh: Include arc-endinness.sh.
	* emulparams/arcv2elfx.sh: Include arc-endinness.sh.
	* testsuite/ld-elf/compressed1d.d: Update pattern for big and
	little endian arc targets.
	* testsuite/ld-elf/eh-frame-hdr.d: Likewise.
	* testsuite/ld-elf/group1.d: Likewise.
	* testsuite/ld-elf/group3b.d: Likewise.
	* testsuite/ld-elf/group8a.d: Likewise.
	* testsuite/ld-elf/group8b.d: Likewise.
	* testsuite/ld-elf/group9a.d: Likewise.
	* testsuite/ld-elf/group9b.d: Likewise.
	* testsuite/ld-elf/linkonce2.d: Likewise.
	* testsuite/ld-elf/pr12851.d: Likewise.
	* testsuite/ld-elf/pr12975.d: Likewise.
	* testsuite/ld-elf/pr13177.d: Likewise.
	* testsuite/ld-elf/pr13195.d: Likewise.
	* testsuite/ld-elf/pr17615.d: Likewise.
	* testsuite/ld-elf/pr19162.d: Likewise.
	* testsuite/ld-elf/sec64k.exp: Likewise.
	* testsuite/lib/ld-lib.exp: Likewise.
This commit is contained in:
Andrew Burgess
2016-03-29 15:57:40 +01:00
parent 820f03ffe0
commit 9a5f28ae28
28 changed files with 65 additions and 93 deletions

@ -1,3 +1,35 @@
2016-04-05 Andrew Burgess <andrew.burgess@embecosm.com>
* emulparams/arc-endianness.sh: New file.
* emulparams/arcebelf.sh: Deleted.
* emulparams/arcebelf_prof.sh: Deleted.
* emulparams/arceblinux.sh: Deleted.
* emulparams/arceblinux_prof.sh: Deleted.
* emulparams/arcelf.sh: Include arc-endinness.sh.
* emulparams/arcelf_prof.sh: Include arc-endinness.sh.
* emulparams/arclinux.sh: Include arc-endinness.sh.
* emulparams/arclinux_prof.sh: Include arc-endinness.sh.
* emulparams/arcv2elf.sh: Include arc-endinness.sh.
* emulparams/arcv2elfx.sh: Include arc-endinness.sh.
* testsuite/ld-elf/compressed1d.d: Update pattern for big and
little endian arc targets.
* testsuite/ld-elf/eh-frame-hdr.d: Likewise.
* testsuite/ld-elf/group1.d: Likewise.
* testsuite/ld-elf/group3b.d: Likewise.
* testsuite/ld-elf/group8a.d: Likewise.
* testsuite/ld-elf/group8b.d: Likewise.
* testsuite/ld-elf/group9a.d: Likewise.
* testsuite/ld-elf/group9b.d: Likewise.
* testsuite/ld-elf/linkonce2.d: Likewise.
* testsuite/ld-elf/pr12851.d: Likewise.
* testsuite/ld-elf/pr12975.d: Likewise.
* testsuite/ld-elf/pr13177.d: Likewise.
* testsuite/ld-elf/pr13195.d: Likewise.
* testsuite/ld-elf/pr17615.d: Likewise.
* testsuite/ld-elf/pr19162.d: Likewise.
* testsuite/ld-elf/sec64k.exp: Likewise.
* testsuite/lib/ld-lib.exp: Likewise.
2016-04-05 Maciej W. Rozycki <macro@imgtec.com> 2016-04-05 Maciej W. Rozycki <macro@imgtec.com>
PR ld/19908 PR ld/19908

@ -0,0 +1,10 @@
case ${target} in
arceb-*)
ARC_ENDIAN="big"
;;
arc-*)
ARC_ENDIAN="little"
;;
*)
exit 1
esac

@ -1,15 +0,0 @@
SCRIPT_NAME=elfarc
TEMPLATE_NAME=elf32
OUTPUT_FORMAT="elf32-bigarc"
LITTLE_OUTPUT_FORMAT="elf32-littlearc"
BIG_OUTPUT_FORMAT="elf32-bigarc"
# leave room for vector table, 32 vectors * 8 bytes
TEXT_START_ADDR=0x100
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
#NONPAGED_TEXT_START_ADDR=0x0
ARCH=arc
MACHINE=
ENTRY=__start
SDATA_START_SYMBOLS='__SDATA_BEGIN__ = .;'
OTHER_SECTIONS="/DISCARD/ : { *(.__arc_profile_*) }"
EMBEDDED=yes

@ -1,21 +0,0 @@
SCRIPT_NAME=elfarc
TEMPLATE_NAME=elf32
OUTPUT_FORMAT="elf32-bigarc"
LITTLE_OUTPUT_FORMAT="elf32-littlearc"
BIG_OUTPUT_FORMAT="elf32-bigarc"
# leave room for vector table, 32 vectors * 8 bytes
TEXT_START_ADDR=0x100
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
#NONPAGED_TEXT_START_ADDR=0x0
ARCH=arc
MACHINE=
ENTRY=__start
SDATA_START_SYMBOLS='__SDATA_BEGIN__ = .;'
OTHER_READONLY_SECTIONS="
.__arc_profile_desc ${RELOCATING-0} : { *(.__arc_profile_desc) }
.__arc_profile_forward ${RELOCATING-0} : { *(.__arc_profile_forward) }
"
OTHER_BSS_SECTIONS="
.__arc_profile_counters ${RELOCATING-0} : { *(.__arc_profile_counters) }
"
EMBEDDED=yes

@ -1,17 +0,0 @@
SCRIPT_NAME=arclinux
OUTPUT_FORMAT="elf32-bigarc"
LITTLE_OUTPUT_FORMAT="elf32-littlearc"
BIG_OUTPUT_FORMAT="elf32-bigarc"
TEXT_START_ADDR=0x10000
MAXPAGESIZE=0x2000
COMMONPAGESIZE=0x2000
NONPAGED_TEXT_START_ADDR=0x10000
ARCH=arc
MACHINE=
ENTRY=__start
TEMPLATE_NAME=arclinux
TEMPLATE_NAME=elf32
EXTRA_EM_FILE=arclinux
GENERATE_SHLIB_SCRIPT=yes
SDATA_START_SYMBOLS='__SDATA_BEGIN__ = .;'
OTHER_SECTIONS="/DISCARD/ : { *(.__arc_profile_*) }"

@ -1,23 +0,0 @@
SCRIPT_NAME=arclinux
OUTPUT_FORMAT="elf32-bigarc"
LITTLE_OUTPUT_FORMAT="elf32-littlearc"
BIG_OUTPUT_FORMAT="elf32-bigarc"
TEXT_START_ADDR=0x10000
MAXPAGESIZE=0x2000
COMMONPAGESIZE=0x2000
NONPAGED_TEXT_START_ADDR=0x10000
ARCH=arc
MACHINE=
ENTRY=__start
TEMPLATE_NAME=arclinux
TEMPLATE_NAME=elf32
EXTRA_EM_FILE=arclinux
GENERATE_SHLIB_SCRIPT=yes
SDATA_START_SYMBOLS='__SDATA_BEGIN__ = .;'
OTHER_READONLY_SECTIONS="
.__arc_profile_desc ${RELOCATING-0} : { *(.__arc_profile_desc) }
.__arc_profile_forward ${RELOCATING-0} : { *(.__arc_profile_forward) }
"
OTHER_BSS_SECTIONS="
.__arc_profile_counters ${RELOCATING-0} : { *(.__arc_profile_counters) }
"

@ -1,3 +1,4 @@
. ${srcdir}/emulparams/arc-endianness.sh
SCRIPT_NAME=elfarc SCRIPT_NAME=elfarc
TEMPLATE_NAME=elf32 TEMPLATE_NAME=elf32
if [ "x${ARC_ENDIAN}" = "xbig" ]; then if [ "x${ARC_ENDIAN}" = "xbig" ]; then

@ -1,3 +1,4 @@
. ${srcdir}/emulparams/arc-endianness.sh
SCRIPT_NAME=elfarc SCRIPT_NAME=elfarc
TEMPLATE_NAME=elf32 TEMPLATE_NAME=elf32
if [ "x${ARC_ENDIAN}" = "xbig" ]; then if [ "x${ARC_ENDIAN}" = "xbig" ]; then

@ -1,3 +1,4 @@
. ${srcdir}/emulparams/arc-endianness.sh
SCRIPT_NAME=arclinux SCRIPT_NAME=arclinux
if [ "x${ARC_ENDIAN}" = "xbig" ]; then if [ "x${ARC_ENDIAN}" = "xbig" ]; then
OUTPUT_FORMAT="elf32-bigarc" OUTPUT_FORMAT="elf32-bigarc"

@ -1,3 +1,4 @@
. ${srcdir}/emulparams/arc-endianness.sh
SCRIPT_NAME=arclinux SCRIPT_NAME=arclinux
if [ "x${ARC_ENDIAN}" = "xbig" ]; then if [ "x${ARC_ENDIAN}" = "xbig" ]; then
OUTPUT_FORMAT="elf32-bigarc" OUTPUT_FORMAT="elf32-bigarc"

@ -1,3 +1,4 @@
. ${srcdir}/emulparams/arc-endianness.sh
MACHINE= MACHINE=
SCRIPT_NAME=elfarcv2 SCRIPT_NAME=elfarcv2
if [ "x${ARC_ENDIAN}" = "xbig" ]; then if [ "x${ARC_ENDIAN}" = "xbig" ]; then

@ -1,3 +1,4 @@
. ${srcdir}/emulparams/arc-endianness.sh
MACHINE= MACHINE=
SCRIPT_NAME=elfarcv2 SCRIPT_NAME=elfarcv2
if [ "x${ARC_ENDIAN}" = "xbig" ]; then if [ "x${ARC_ENDIAN}" = "xbig" ]; then

@ -2,7 +2,7 @@
#as: --compress-debug-sections=none #as: --compress-debug-sections=none
#ld: -r --compress-debug-sections=zlib-gnu #ld: -r --compress-debug-sections=zlib-gnu
#readelf: -SW #readelf: -SW
#notarget: arc-*-* d30v-*-* dlx-*-* fr30-*-* frv-*-* i370-*-* i860-*-* iq2000-*-* mn10200-*-* moxie-*-* msp430-*-* mt-*-* or1k-*-* pj-*-* #notarget: arc*-*-* d30v-*-* dlx-*-* fr30-*-* frv-*-* i370-*-* i860-*-* iq2000-*-* mn10200-*-* moxie-*-* msp430-*-* mt-*-* or1k-*-* pj-*-*
# Not all ELF targets use the elf.em emulation... # Not all ELF targets use the elf.em emulation...
#failif #failif

@ -2,7 +2,7 @@
#ld: -e _start --eh-frame-hdr #ld: -e _start --eh-frame-hdr
#objdump: -hw #objdump: -hw
#target: cfi #target: cfi
#xfail: arc-*-elf* avr*-*-* or1k*-*-elf or1k*-*-rtems* visium-*-* #xfail: arc*-*-elf* avr*-*-* or1k*-*-elf or1k*-*-rtems* visium-*-*
# These targets support CFI generation but not shared libraries. # These targets support CFI generation but not shared libraries.
#... #...
[0-9] .eh_frame_hdr 0*[12][048c] .* [0-9] .eh_frame_hdr 0*[12][048c] .*

@ -2,7 +2,7 @@
#source: group3a.s #source: group3a.s
#ld: -T group.ld #ld: -T group.ld
#readelf: -s #readelf: -s
#xfail: d30v-*-* dlx-*-* i960-*-* pj*-*-* #xfail: arc*-*-* d30v-*-* dlx-*-* i960-*-* pj*-*-*
# generic linker targets don't comply with all symbol merging rules # generic linker targets don't comply with all symbol merging rules
Symbol table '.symtab' contains .* entries: Symbol table '.symtab' contains .* entries:

@ -1,7 +1,7 @@
#source: group8.s #source: group8.s
#ld: -r --gc-sections --entry foo #ld: -r --gc-sections --entry foo
#readelf: -g --wide #readelf: -g --wide
#notarget: arc-*-* d30v-*-* dlx-*-* i960-*-* pj*-*-* #notarget: arc*-*-* d30v-*-* dlx-*-* i960-*-* pj*-*-*
#notarget: hppa64-*-* i370-*-* i860-*-* ia64-*-* mep-*-* mn10200-*-* #notarget: hppa64-*-* i370-*-* i860-*-* ia64-*-* mep-*-* mn10200-*-*
#xfail: cr16-*-* crx-*-* #xfail: cr16-*-* crx-*-*
# generic linker targets don't support --gc-sections, nor do a bunch of others # generic linker targets don't support --gc-sections, nor do a bunch of others

@ -1,7 +1,7 @@
#source: group8.s #source: group8.s
#ld: -r --gc-sections --entry bar #ld: -r --gc-sections --entry bar
#readelf: -g --wide #readelf: -g --wide
#notarget: arc-*-* d30v-*-* dlx-*-* i960-*-* pj*-*-* #notarget: arc*-*-* d30v-*-* dlx-*-* i960-*-* pj*-*-*
#notarget: hppa64-*-* i370-*-* i860-*-* ia64-*-* mep-*-* mn10200-*-* #notarget: hppa64-*-* i370-*-* i860-*-* ia64-*-* mep-*-* mn10200-*-*
#xfail: cr16-*-* crx-*-* #xfail: cr16-*-* crx-*-*
# generic linker targets don't support --gc-sections, nor do a bunch of others # generic linker targets don't support --gc-sections, nor do a bunch of others

@ -1,7 +1,7 @@
#source: group9.s #source: group9.s
#ld: -r --gc-sections --entry foo #ld: -r --gc-sections --entry foo
#readelf: -g --wide #readelf: -g --wide
#notarget: arc-*-* d30v-*-* dlx-*-* i960-*-* pj*-*-* #notarget: arc*-*-* d30v-*-* dlx-*-* i960-*-* pj*-*-*
#notarget: alpha-*-* hppa64-*-* i370-*-* i860-*-* ia64-*-* mep-*-* mn10200-*-* #notarget: alpha-*-* hppa64-*-* i370-*-* i860-*-* ia64-*-* mep-*-* mn10200-*-*
#xfail: cr16-*-* crx-*-* #xfail: cr16-*-* crx-*-*
# generic linker targets don't support --gc-sections, nor do a bunch of others # generic linker targets don't support --gc-sections, nor do a bunch of others

@ -1,7 +1,7 @@
#source: group9.s #source: group9.s
#ld: -r --gc-sections --entry bar #ld: -r --gc-sections --entry bar
#readelf: -g --wide #readelf: -g --wide
#notarget: arc-*-* d30v-*-* dlx-*-* i960-*-* pj*-*-* #notarget: arc*-*-* d30v-*-* dlx-*-* i960-*-* pj*-*-*
#notarget: alpha-*-* hppa64-*-* i370-*-* i860-*-* ia64-*-* mep-*-* mn10200-*-* #notarget: alpha-*-* hppa64-*-* i370-*-* i860-*-* ia64-*-* mep-*-* mn10200-*-*
#xfail: cr16-*-* crx-*-* #xfail: cr16-*-* crx-*-*
# generic linker targets don't support --gc-sections, nor do a bunch of others # generic linker targets don't support --gc-sections, nor do a bunch of others

@ -2,7 +2,7 @@
#source: linkonce1b.s #source: linkonce1b.s
#ld: -emit-relocs #ld: -emit-relocs
#objdump: -r #objdump: -r
#notarget: arc-*-* d30v-*-* dlx-*-* i960-*-* pj*-*-* #notarget: arc*-*-* d30v-*-* dlx-*-* i960-*-* pj*-*-*
# generic elf targets don't emit relocs # generic elf targets don't emit relocs
.*: file format .* .*: file format .*

@ -2,7 +2,7 @@
#source: start.s #source: start.s
#ld: --gc-sections #ld: --gc-sections
#readelf: -s --wide #readelf: -s --wide
#notarget: arc-*-* d30v-*-* dlx-*-* i960-*-* pj*-*-* #notarget: arc*-*-* d30v-*-* dlx-*-* i960-*-* pj*-*-*
#notarget: hppa64-*-* i370-*-* i860-*-* ia64-*-* mep-*-* mn10200-*-* #notarget: hppa64-*-* i370-*-* i860-*-* ia64-*-* mep-*-* mn10200-*-*
# generic linker targets don't support --gc-sections, nor do a bunch of others # generic linker targets don't support --gc-sections, nor do a bunch of others

@ -1,7 +1,7 @@
#ld: --gc-sections -shared -version-script pr12975.t #ld: --gc-sections -shared -version-script pr12975.t
#readelf: -s --wide #readelf: -s --wide
#target: *-*-linux* *-*-gnu* #target: *-*-linux* *-*-gnu*
#notarget: arc-*-* d30v-*-* dlx-*-* i960-*-* pj*-*-* #notarget: arc*-*-* d30v-*-* dlx-*-* i960-*-* pj*-*-*
#notarget: hppa64-*-* i370-*-* i860-*-* ia64-*-* mep-*-* mn10200-*-* #notarget: hppa64-*-* i370-*-* i860-*-* ia64-*-* mep-*-* mn10200-*-*
# generic linker targets don't support --gc-sections, nor do a bunch of others # generic linker targets don't support --gc-sections, nor do a bunch of others

@ -2,7 +2,7 @@
#ld: --gc-sections -shared #ld: --gc-sections -shared
#readelf: -s -D --wide #readelf: -s -D --wide
#target: *-*-linux* *-*-gnu* #target: *-*-linux* *-*-gnu*
#notarget: arc-*-* d30v-*-* dlx-*-* i960-*-* pj*-*-* #notarget: arc*-*-* d30v-*-* dlx-*-* i960-*-* pj*-*-*
#notarget: hppa64-*-* i370-*-* i860-*-* ia64-*-* mep-*-* mn10200-*-* #notarget: hppa64-*-* i370-*-* i860-*-* ia64-*-* mep-*-* mn10200-*-*
# generic linker targets don't support --gc-sections, nor do a bunch of others # generic linker targets don't support --gc-sections, nor do a bunch of others

@ -1,7 +1,7 @@
#ld: --gc-sections -shared -version-script pr13195.t #ld: --gc-sections -shared -version-script pr13195.t
#readelf: -s --wide -D #readelf: -s --wide -D
#target: *-*-linux* *-*-gnu* #target: *-*-linux* *-*-gnu*
#notarget: arc-*-* d30v-*-* dlx-*-* i960-*-* pj*-*-* #notarget: arc*-*-* d30v-*-* dlx-*-* i960-*-* pj*-*-*
#notarget: hppa64-*-* i370-*-* i860-*-* ia64-*-* mep-*-* mn10200-*-* #notarget: hppa64-*-* i370-*-* i860-*-* ia64-*-* mep-*-* mn10200-*-*
# generic linker targets don't support --gc-sections, nor do a bunch of others # generic linker targets don't support --gc-sections, nor do a bunch of others

@ -1,7 +1,7 @@
#ld: --gc-sections -shared #ld: --gc-sections -shared
#readelf: -S --wide --dyn-syms #readelf: -S --wide --dyn-syms
#target: *-*-linux* *-*-gnu* #target: *-*-linux* *-*-gnu*
#notarget: arc-*-* d30v-*-* dlx-*-* i960-*-* pj*-*-* #notarget: arc*-*-* d30v-*-* dlx-*-* i960-*-* pj*-*-*
#notarget: hppa64-*-* i370-*-* i860-*-* ia64-*-* mep-*-* mn10200-*-* #notarget: hppa64-*-* i370-*-* i860-*-* ia64-*-* mep-*-* mn10200-*-*
# generic linker targets don't support --gc-sections, nor do a bunch of others # generic linker targets don't support --gc-sections, nor do a bunch of others

@ -3,7 +3,7 @@
#ld: -shared -z max-page-size=0x200000 #ld: -shared -z max-page-size=0x200000
#readelf: -l --wide #readelf: -l --wide
#target: *-*-linux* *-*-gnu* *-*-nacl* #target: *-*-linux* *-*-gnu* *-*-nacl*
#notarget: arc-*-* hppa-*-* #notarget: arc*-*-* hppa-*-*
# arc target has an extra 64K stack section. # arc target has an extra 64K stack section.
# hppa fails due to PR 12376. # hppa fails due to PR 12376.

@ -29,7 +29,7 @@ if ![is_elf_format] {
# Targets using the generic linker backend don't sort section symbols # Targets using the generic linker backend don't sort section symbols
# before local symbols, so don't bother testing them. # before local symbols, so don't bother testing them.
if { [istarget "arc-*-*"] if { [istarget "arc*-*-*"]
|| [istarget "d30v-*-*"] || [istarget "d30v-*-*"]
|| [istarget "dlx-*-*"] || [istarget "dlx-*-*"]
|| [istarget "i960-*-*"] || [istarget "i960-*-*"]

@ -1664,7 +1664,7 @@ proc check_gc_sections_available { } {
if {![info exists gc_sections_available_saved]} { if {![info exists gc_sections_available_saved]} {
# Some targets don't support gc-sections despite whatever's # Some targets don't support gc-sections despite whatever's
# advertised by ld's options. # advertised by ld's options.
if { [istarget arc-*-*] if { [istarget arc*-*-*]
|| [istarget d30v-*-*] || [istarget d30v-*-*]
|| [istarget dlx-*-*] || [istarget dlx-*-*]
|| [istarget i960-*-*] || [istarget i960-*-*]
@ -1706,7 +1706,7 @@ proc check_gc_sections_available { } {
proc check_shared_lib_support { } { proc check_shared_lib_support { } {
if {![istarget aarch64*-*-elf] if {![istarget aarch64*-*-elf]
&& ![istarget arc-*-*] && ![istarget arc*-*-*]
&& ![istarget arm*-*-elf] && ![istarget arm*-*-elf]
&& ![istarget avr-*-*] && ![istarget avr-*-*]
&& ![istarget cr16-*-*] && ![istarget cr16-*-*]