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

View file

@ -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

View file

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

View file

@ -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

View file

@ -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

View file

@ -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_*) }"

View file

@ -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) }
"

View file

@ -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

View file

@ -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

View file

@ -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"

View file

@ -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"

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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] .*

View file

@ -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:

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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 .*

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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.

View file

@ -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-*-*"]

View file

@ -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-*-*]