3329 lines
116 KiB
Diff
3329 lines
116 KiB
Diff
From fa35de75a81dc38986949a090f3b08dd32effba3 Mon Sep 17 00:00:00 2001
|
|
From: yeqinglong <yeqinglong@kylinsec.com.cn>
|
|
Date: Wed, 30 Aug 2023 15:01:58 +0800
|
|
Subject: [PATCH] add sw_64 support not upstream modified files
|
|
|
|
---
|
|
Makefile.in | 1 +
|
|
Makefile.tpl | 1 +
|
|
bfd/Makefile.am | 12 ++-
|
|
bfd/Makefile.in | 16 ++-
|
|
bfd/archures.c | 12 +++
|
|
bfd/bfd-in2.h | 109 ++++++++++++++++++++
|
|
bfd/config.bfd | 50 +++++++++
|
|
bfd/config.in | 2 +
|
|
bfd/configure | 24 +++++
|
|
bfd/configure.ac | 6 ++
|
|
bfd/configure.com | 12 ++-
|
|
bfd/ecoff.c | 9 ++
|
|
bfd/elf-bfd.h | 3 +
|
|
bfd/elf.c | 3 +
|
|
bfd/elflink.c | 23 +++++
|
|
bfd/libbfd-in.h | 4 +
|
|
bfd/libbfd.h | 28 +++++
|
|
bfd/makefile.vms | 7 ++
|
|
bfd/peicode.h | 4 +
|
|
bfd/targets.c | 17 +++
|
|
binutils/config.in | 2 +
|
|
binutils/configure | 5 +
|
|
binutils/configure.com | 1 +
|
|
binutils/readelf.c | 103 ++++++++++++++++++
|
|
binutils/testsuite/binutils-all/nm.exp | 10 +-
|
|
binutils/testsuite/binutils-all/objcopy.exp | 1 +
|
|
binutils/testsuite/binutils-all/objdump.exp | 2 +-
|
|
binutils/testsuite/lib/binutils-common.exp | 2 +-
|
|
config.guess | 41 ++++++++
|
|
config.sub | 1 +
|
|
config/elf.m4 | 2 +-
|
|
config/intdiv0.m4 | 2 +-
|
|
config/picflag.m4 | 3 +
|
|
config/tcl.m4 | 6 ++
|
|
configure | 39 ++++++-
|
|
configure.ac | 37 ++++++-
|
|
elfcpp/elfcpp.h | 2 +
|
|
gas/Makefile.am | 2 +
|
|
gas/Makefile.in | 5 +
|
|
gas/as.c | 13 ++-
|
|
gas/as.h | 6 ++
|
|
gas/config.in | 9 ++
|
|
gas/config/obj-ecoff.c | 10 ++
|
|
gas/config/obj-elf.c | 6 ++
|
|
gas/config/obj-elf.h | 5 +
|
|
gas/configure | 19 ++++
|
|
gas/configure.tgt | 10 +-
|
|
gas/read.c | 2 +-
|
|
gas/testsuite/gas/all/gas.exp | 7 ++
|
|
gas/testsuite/gas/all/weakref1.d | 3 +-
|
|
gas/testsuite/gas/all/weakref1g.d | 2 +-
|
|
gas/testsuite/gas/all/weakref1l.d | 2 +-
|
|
gas/testsuite/gas/all/weakref1u.d | 2 +-
|
|
gas/testsuite/gas/all/weakref1w.d | 2 +-
|
|
gas/testsuite/gas/elf/common5a.d | 2 +
|
|
gas/testsuite/gas/elf/common5b.d | 2 +
|
|
gas/testsuite/gas/elf/common5c.d | 2 +
|
|
gas/testsuite/gas/elf/common5d.d | 2 +
|
|
gas/testsuite/gas/elf/elf.exp | 14 ++-
|
|
gas/testsuite/gas/elf/ifunc-1.d | 1 +
|
|
gas/testsuite/gas/elf/symtab.d | 1 +
|
|
gas/write.c | 58 ++++++++++-
|
|
gold/Makefile.am | 4 +-
|
|
gold/Makefile.in | 5 +-
|
|
gold/configure | 14 +++
|
|
gold/configure.ac | 1 +
|
|
gold/configure.tgt | 6 ++
|
|
gold/reloc.h | 1 +
|
|
gold/target-reloc.h | 4 +-
|
|
include/coff/ecoff.h | 14 +++
|
|
include/coff/pe.h | 4 +
|
|
include/elf/common.h | 5 +
|
|
include/longlong.h | 55 ++++++++++
|
|
ld/Makefile.am | 10 ++
|
|
ld/Makefile.in | 17 +++
|
|
ld/config.in | 2 +
|
|
ld/configure | 7 ++
|
|
ld/configure.tgt | 16 +++
|
|
ld/testsuite/config/default.exp | 20 ++++
|
|
ld/testsuite/ld-elf/binutils.exp | 1 +
|
|
ld/testsuite/ld-elf/compress1a.d | 2 +-
|
|
ld/testsuite/ld-elf/compressed1a.d | 2 +-
|
|
ld/testsuite/ld-elf/eh5.d | 2 +-
|
|
ld/testsuite/ld-elf/elf.exp | 2 +-
|
|
ld/testsuite/ld-elf/pr17550a.d | 2 +-
|
|
ld/testsuite/ld-elf/pr17550b.d | 2 +-
|
|
ld/testsuite/ld-elf/pr17550c.d | 3 +
|
|
ld/testsuite/ld-elf/pr17550d.d | 3 +
|
|
ld/testsuite/ld-elf/pr18720b.c | 2 +
|
|
ld/testsuite/ld-elf/shared.exp | 13 ++-
|
|
ld/testsuite/ld-elf/stab.d | 2 +-
|
|
ld/testsuite/ld-elfvers/vers.exp | 1 +
|
|
ld/testsuite/ld-elfvsb/elfvsb.exp | 4 +
|
|
ld/testsuite/ld-elfweak/elfweak.exp | 1 +
|
|
ld/testsuite/ld-ifunc/ifunc-26.d | 2 +-
|
|
ld/testsuite/ld-ifunc/ifunc.exp | 1 +
|
|
ld/testsuite/ld-misc/just-symbols.exp | 3 +-
|
|
ld/testsuite/ld-plugin/plugin-14.d | 1 +
|
|
ld/testsuite/ld-plugin/plugin-15.d | 1 +
|
|
ld/testsuite/ld-plugin/plugin-16.d | 1 +
|
|
ld/testsuite/ld-plugin/plugin-20.d | 1 +
|
|
ld/testsuite/ld-plugin/plugin-21.d | 1 +
|
|
ld/testsuite/ld-plugin/plugin-22.d | 1 +
|
|
ld/testsuite/ld-plugin/plugin-23.d | 1 +
|
|
ld/testsuite/ld-plugin/plugin-6.d | 1 +
|
|
ld/testsuite/ld-plugin/plugin-7.d | 1 +
|
|
ld/testsuite/ld-plugin/plugin-8.d | 1 +
|
|
ld/testsuite/ld-scripts/fill.d | 3 +-
|
|
ld/testsuite/ld-scripts/fill16.d | 3 +-
|
|
ld/testsuite/ld-scripts/pr27100.d | 2 +-
|
|
ld/testsuite/ld-shared/shared.exp | 4 +
|
|
ld/testsuite/ld-srec/srec.exp | 6 ++
|
|
makefile.vms | 8 ++
|
|
opcodes/Makefile.am | 2 +
|
|
opcodes/Makefile.in | 4 +
|
|
opcodes/config.in | 2 +
|
|
opcodes/configure | 7 ++
|
|
opcodes/configure.ac | 1 +
|
|
opcodes/configure.com | 8 ++
|
|
opcodes/disassemble.c | 10 ++
|
|
opcodes/disassemble.h | 3 +
|
|
121 files changed, 1041 insertions(+), 54 deletions(-)
|
|
|
|
diff --git a/Makefile.in b/Makefile.in
|
|
index 9b3a5d75..67156011 100644
|
|
--- a/Makefile.in
|
|
+++ b/Makefile.in
|
|
@@ -619,6 +619,7 @@ all:
|
|
#### host and target specific makefile fragments come in here.
|
|
@target_makefile_frag@
|
|
@alphaieee_frag@
|
|
+@sw_64ieee_frag@
|
|
@ospace_frag@
|
|
@host_makefile_frag@
|
|
###
|
|
diff --git a/Makefile.tpl b/Makefile.tpl
|
|
index 84fee3dd..dda97b5d 100644
|
|
--- a/Makefile.tpl
|
|
+++ b/Makefile.tpl
|
|
@@ -572,6 +572,7 @@ all:
|
|
#### host and target specific makefile fragments come in here.
|
|
@target_makefile_frag@
|
|
@alphaieee_frag@
|
|
+@sw_64ieee_frag@
|
|
@ospace_frag@
|
|
@host_makefile_frag@
|
|
###
|
|
diff --git a/bfd/Makefile.am b/bfd/Makefile.am
|
|
index 7c859428..3aec8a2b 100644
|
|
--- a/bfd/Makefile.am
|
|
+++ b/bfd/Makefile.am
|
|
@@ -92,6 +92,7 @@ BFD64_LIBS_CFILES = archive64.c
|
|
ALL_MACHINES = \
|
|
cpu-aarch64.lo \
|
|
cpu-alpha.lo \
|
|
+ cpu-sw_64.lo \
|
|
cpu-arc.lo \
|
|
cpu-arm.lo \
|
|
cpu-avr.lo \
|
|
@@ -176,6 +177,7 @@ ALL_MACHINES = \
|
|
ALL_MACHINES_CFILES = \
|
|
cpu-aarch64.c \
|
|
cpu-alpha.c \
|
|
+ cpu-sw_64.c \
|
|
cpu-arc.c \
|
|
cpu-arm.c \
|
|
cpu-avr.c \
|
|
@@ -536,6 +538,7 @@ BFD64_BACKENDS = \
|
|
aix5ppc-core.lo \
|
|
aout64.lo \
|
|
coff-alpha.lo \
|
|
+ coff-sw_64.lo \
|
|
coff-x86_64.lo \
|
|
coff64-rs6000.lo \
|
|
elf32-ia64.lo \
|
|
@@ -543,6 +546,7 @@ BFD64_BACKENDS = \
|
|
elf32-score.lo \
|
|
elf32-score7.lo \
|
|
elf64-alpha.lo \
|
|
+ elf64-sw_64.lo \
|
|
elf64-gen.lo \
|
|
elf64-hppa.lo \
|
|
elf64-ia64.lo \
|
|
@@ -574,18 +578,21 @@ BFD64_BACKENDS = \
|
|
pei-x86_64.lo \
|
|
pepigen.lo \
|
|
pex64igen.lo \
|
|
- vms-alpha.lo
|
|
+ vms-alpha.lo \
|
|
+ vms-sw_64.lo
|
|
|
|
BFD64_BACKENDS_CFILES = \
|
|
aix5ppc-core.c \
|
|
aout64.c \
|
|
coff-alpha.c \
|
|
+ coff-sw_64.c \
|
|
coff-x86_64.c \
|
|
coff64-rs6000.c \
|
|
elf32-mips.c \
|
|
elf32-score.c \
|
|
elf32-score7.c \
|
|
elf64-alpha.c \
|
|
+ elf64-sw_64.c \
|
|
elf64-gen.c \
|
|
elf64-hppa.c \
|
|
elf64-ia64-vms.c \
|
|
@@ -612,7 +619,8 @@ BFD64_BACKENDS_CFILES = \
|
|
pei-aarch64.c \
|
|
pei-ia64.c \
|
|
pei-x86_64.c \
|
|
- vms-alpha.c
|
|
+ vms-alpha.c \
|
|
+ vms-sw_64.c
|
|
|
|
OPTIONAL_BACKENDS = \
|
|
aix386-core.lo \
|
|
diff --git a/bfd/Makefile.in b/bfd/Makefile.in
|
|
index 66fa92c1..32c1df38 100644
|
|
--- a/bfd/Makefile.in
|
|
+++ b/bfd/Makefile.in
|
|
@@ -517,6 +517,7 @@ BFD64_LIBS_CFILES = archive64.c
|
|
ALL_MACHINES = \
|
|
cpu-aarch64.lo \
|
|
cpu-alpha.lo \
|
|
+ cpu-sw_64.lo \
|
|
cpu-arc.lo \
|
|
cpu-arm.lo \
|
|
cpu-avr.lo \
|
|
@@ -601,6 +602,7 @@ ALL_MACHINES = \
|
|
ALL_MACHINES_CFILES = \
|
|
cpu-aarch64.c \
|
|
cpu-alpha.c \
|
|
+ cpu-sw_64.c \
|
|
cpu-arc.c \
|
|
cpu-arm.c \
|
|
cpu-avr.c \
|
|
@@ -963,6 +965,7 @@ BFD64_BACKENDS = \
|
|
aix5ppc-core.lo \
|
|
aout64.lo \
|
|
coff-alpha.lo \
|
|
+ coff-sw_64.lo \
|
|
coff-x86_64.lo \
|
|
coff64-rs6000.lo \
|
|
elf32-ia64.lo \
|
|
@@ -970,6 +973,7 @@ BFD64_BACKENDS = \
|
|
elf32-score.lo \
|
|
elf32-score7.lo \
|
|
elf64-alpha.lo \
|
|
+ elf64-sw_64.lo \
|
|
elf64-gen.lo \
|
|
elf64-hppa.lo \
|
|
elf64-ia64.lo \
|
|
@@ -1001,18 +1005,21 @@ BFD64_BACKENDS = \
|
|
pei-x86_64.lo \
|
|
pepigen.lo \
|
|
pex64igen.lo \
|
|
- vms-alpha.lo
|
|
+ vms-alpha.lo \
|
|
+ vms-sw_64.lo
|
|
|
|
BFD64_BACKENDS_CFILES = \
|
|
aix5ppc-core.c \
|
|
aout64.c \
|
|
coff-alpha.c \
|
|
+ coff-sw_64.c \
|
|
coff-x86_64.c \
|
|
coff64-rs6000.c \
|
|
elf32-mips.c \
|
|
elf32-score.c \
|
|
elf32-score7.c \
|
|
elf64-alpha.c \
|
|
+ elf64-sw_64.c \
|
|
elf64-gen.c \
|
|
elf64-hppa.c \
|
|
elf64-ia64-vms.c \
|
|
@@ -1039,7 +1046,8 @@ BFD64_BACKENDS_CFILES = \
|
|
pei-aarch64.c \
|
|
pei-ia64.c \
|
|
pei-x86_64.c \
|
|
- vms-alpha.c
|
|
+ vms-alpha.c \
|
|
+ vms-sw_64.c
|
|
|
|
OPTIONAL_BACKENDS = \
|
|
aix386-core.lo \
|
|
@@ -1306,6 +1314,7 @@ distclean-compile:
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cf-i386lynx.Plo@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cisco-core.Plo@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-alpha.Plo@am__quote@
|
|
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-sw_64.Plo@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-bfd.Plo@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-go32.Plo@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-i386.Plo@am__quote@
|
|
@@ -1326,6 +1335,7 @@ distclean-compile:
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/corefile.Plo@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-aarch64.Plo@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-alpha.Plo@am__quote@
|
|
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-sw_64.Plo@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-arc.Plo@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-arm.Plo@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-avr.Plo@am__quote@
|
|
@@ -1490,6 +1500,7 @@ distclean-compile:
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32.Plo@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-aarch64.Plo@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-alpha.Plo@am__quote@
|
|
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-sw_64.Plo@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-bpf.Plo@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-gen.Plo@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-hppa.Plo@am__quote@
|
|
@@ -1579,6 +1590,7 @@ distclean-compile:
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vaxnetbsd.Plo@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/verilog.Plo@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vms-alpha.Plo@am__quote@
|
|
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vms-sw_64.Plo@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vms-lib.Plo@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vms-misc.Plo@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wasm-module.Plo@am__quote@
|
|
diff --git a/bfd/archures.c b/bfd/archures.c
|
|
index 390691bf..c5b07827 100644
|
|
--- a/bfd/archures.c
|
|
+++ b/bfd/archures.c
|
|
@@ -24,6 +24,9 @@
|
|
#include "libbfd.h"
|
|
#include "safe-ctype.h"
|
|
|
|
+/* add sw_64 target
|
|
+ * add cpu sw6a-1621, sw6b-3231. */
|
|
+
|
|
/*
|
|
|
|
SECTION
|
|
@@ -308,6 +311,11 @@ DESCRIPTION
|
|
.#define bfd_mach_alpha_ev4 0x10
|
|
.#define bfd_mach_alpha_ev5 0x20
|
|
.#define bfd_mach_alpha_ev6 0x30
|
|
+.#ifdef TARGET_SW_64
|
|
+. bfd_arch_sw_64, {* Sw_64 *}
|
|
+.#define bfd_mach_sw_64_sw6a 4
|
|
+.#define bfd_mach_sw_64_sw6b 8
|
|
+.#endif
|
|
. bfd_arch_arm, {* Advanced Risc Machines ARM. *}
|
|
.#define bfd_mach_arm_unknown 0
|
|
.#define bfd_mach_arm_2 1
|
|
@@ -610,6 +618,7 @@ DESCRIPTION
|
|
|
|
extern const bfd_arch_info_type bfd_aarch64_arch;
|
|
extern const bfd_arch_info_type bfd_alpha_arch;
|
|
+extern const bfd_arch_info_type bfd_sw_64_arch;
|
|
extern const bfd_arch_info_type bfd_arc_arch;
|
|
extern const bfd_arch_info_type bfd_arm_arch;
|
|
extern const bfd_arch_info_type bfd_avr_arch;
|
|
@@ -699,6 +708,9 @@ static const bfd_arch_info_type * const bfd_archures_list[] =
|
|
#else
|
|
&bfd_aarch64_arch,
|
|
&bfd_alpha_arch,
|
|
+#ifdef TARGET_SW_64
|
|
+ &bfd_sw_64_arch,
|
|
+#endif
|
|
&bfd_arc_arch,
|
|
&bfd_arm_arch,
|
|
&bfd_avr_arch,
|
|
diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h
|
|
index 5abde5fe..fc2f9b56 100644
|
|
--- a/bfd/bfd-in2.h
|
|
+++ b/bfd/bfd-in2.h
|
|
@@ -1680,6 +1680,11 @@ enum bfd_architecture
|
|
#define bfd_mach_alpha_ev4 0x10
|
|
#define bfd_mach_alpha_ev5 0x20
|
|
#define bfd_mach_alpha_ev6 0x30
|
|
+#ifdef TARGET_SW_64
|
|
+ bfd_arch_sw_64, /* Sw_64 */
|
|
+#define bfd_mach_sw_64_sw6a 4
|
|
+#define bfd_mach_sw_64_sw6b 8
|
|
+#endif
|
|
bfd_arch_arm, /* Advanced Risc Machines ARM. */
|
|
#define bfd_mach_arm_unknown 0
|
|
#define bfd_mach_arm_2 1
|
|
@@ -2518,6 +2523,110 @@ between two procedure entry points is < 2^21, or else a hint. */
|
|
BFD_RELOC_ALPHA_TPREL_LO16,
|
|
BFD_RELOC_ALPHA_TPREL16,
|
|
|
|
+#ifdef TARGET_SW_64
|
|
+/* Sw_64 ECOFF and ELF relocations. Some of these treat the symbol or
|
|
+"addend" in some special way.
|
|
+For GPDISP_HI16 ("gpdisp") relocations, the symbol is ignored when
|
|
+writing; when reading, it will be the absolute section symbol. The
|
|
+addend is the displacement in bytes of the "lda" instruction from
|
|
+the "ldah" instruction (which is at the address of this reloc). */
|
|
+ BFD_RELOC_SW_64_GPDISP_HI16,
|
|
+
|
|
+/* For GPDISP_LO16 ("ignore") relocations, the symbol is handled as
|
|
+with GPDISP_HI16 relocs. The addend is ignored when writing the
|
|
+relocations out, and is filled in with the file's GP value on
|
|
+reading, for convenience. */
|
|
+ BFD_RELOC_SW_64_GPDISP_LO16,
|
|
+
|
|
+/* The ELF GPDISP relocation is exactly the same as the GPDISP_HI16
|
|
+relocation except that there is no accompanying GPDISP_LO16
|
|
+relocation. */
|
|
+ BFD_RELOC_SW_64_GPDISP,
|
|
+
|
|
+/* The Sw_64 LITERAL/LITUSE relocs are produced by a symbol reference;
|
|
+the assembler turns it into a LDQ instruction to load the address of
|
|
+the symbol, and then fills in a register in the real instruction.
|
|
+
|
|
+The LITERAL reloc, at the LDQ instruction, refers to the .lita
|
|
+section symbol. The addend is ignored when writing, but is filled
|
|
+in with the file's GP value on reading, for convenience, as with the
|
|
+GPDISP_LO16 reloc.
|
|
+
|
|
+The ELF_LITERAL reloc is somewhere between 16_GOTOFF and GPDISP_LO16.
|
|
+It should refer to the symbol to be referenced, as with 16_GOTOFF,
|
|
+but it generates output not based on the position within the .got
|
|
+section, but relative to the GP value chosen for the file during the
|
|
+final link stage.
|
|
+
|
|
+The LITUSE reloc, on the instruction using the loaded address, gives
|
|
+information to the linker that it might be able to use to optimize
|
|
+away some literal section references. The symbol is ignored (read
|
|
+as the absolute section symbol), and the "addend" indicates the type
|
|
+of instruction using the register:
|
|
+1 - "memory" fmt insn
|
|
+2 - byte-manipulation (byte offset reg)
|
|
+3 - jsr (target of branch) */
|
|
+ BFD_RELOC_SW_64_LITERAL,
|
|
+ BFD_RELOC_SW_64_ELF_LITERAL,
|
|
+ BFD_RELOC_SW_64_ELF_LITERAL_GOT,
|
|
+ BFD_RELOC_SW_64_LITUSE,
|
|
+
|
|
+/* The HINT relocation indicates a value that should be filled into the
|
|
+"hint" field of a jmp/jsr/ret instruction, for possible branch-
|
|
+prediction logic which may be provided on some processors. */
|
|
+ BFD_RELOC_SW_64_HINT,
|
|
+
|
|
+/* The LINKAGE relocation outputs a linkage pair in the object file,
|
|
+which is filled by the linker. */
|
|
+ BFD_RELOC_SW_64_LINKAGE,
|
|
+
|
|
+/* The CODEADDR relocation outputs a STO_CA in the object file,
|
|
+which is filled by the linker. */
|
|
+ BFD_RELOC_SW_64_CODEADDR,
|
|
+
|
|
+/* The GPREL_HI/LO relocations together form a 32-bit offset from the
|
|
+GP register. */
|
|
+ BFD_RELOC_SW_64_GPREL_HI16,
|
|
+ BFD_RELOC_SW_64_GPREL_LO16,
|
|
+
|
|
+/* Like BFD_RELOC_23_PCREL_S2, except that the source and target must
|
|
+share a common GP, and the target address is adjusted for
|
|
+STO_SW_64_STD_GPLOAD. */
|
|
+ BFD_RELOC_SW_64_BRSGP,
|
|
+
|
|
+/* The NOP relocation outputs a NOP if the longword displacement
|
|
+between two procedure entry points is < 2^21. */
|
|
+ BFD_RELOC_SW_64_NOP,
|
|
+
|
|
+/* The BSR relocation outputs a BSR if the longword displacement
|
|
+between two procedure entry points is < 2^21. */
|
|
+ BFD_RELOC_SW_64_BSR,
|
|
+
|
|
+/* The LDA relocation outputs a LDA if the longword displacement
|
|
+between two procedure entry points is < 2^16. */
|
|
+ BFD_RELOC_SW_64_LDA,
|
|
+
|
|
+/* The BOH relocation outputs a BSR if the longword displacement
|
|
+between two procedure entry points is < 2^21, or else a hint. */
|
|
+ BFD_RELOC_SW_64_BOH,
|
|
+
|
|
+/* Sw_64 thread-local storage relocations. */
|
|
+ BFD_RELOC_SW_64_TLSGD,
|
|
+ BFD_RELOC_SW_64_TLSLDM,
|
|
+ BFD_RELOC_SW_64_DTPMOD64,
|
|
+ BFD_RELOC_SW_64_GOTDTPREL16,
|
|
+ BFD_RELOC_SW_64_DTPREL64,
|
|
+ BFD_RELOC_SW_64_DTPREL_HI16,
|
|
+ BFD_RELOC_SW_64_DTPREL_LO16,
|
|
+ BFD_RELOC_SW_64_DTPREL16,
|
|
+ BFD_RELOC_SW_64_GOTTPREL16,
|
|
+ BFD_RELOC_SW_64_TPREL64,
|
|
+ BFD_RELOC_SW_64_TPREL_HI16,
|
|
+ BFD_RELOC_SW_64_TPREL_LO16,
|
|
+ BFD_RELOC_SW_64_TPREL16,
|
|
+ BFD_RELOC_SW_64_BR26,
|
|
+#endif
|
|
+
|
|
/* The MIPS jump instruction. */
|
|
BFD_RELOC_MIPS_JMP,
|
|
BFD_RELOC_MICROMIPS_JMP,
|
|
diff --git a/bfd/config.bfd b/bfd/config.bfd
|
|
index 81f4943e..9cbf7016 100644
|
|
--- a/bfd/config.bfd
|
|
+++ b/bfd/config.bfd
|
|
@@ -165,6 +165,7 @@ targ_cpu=`echo $targ | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
|
|
case "${targ_cpu}" in
|
|
aarch64*) targ_archs="bfd_aarch64_arch bfd_arm_arch";;
|
|
alpha*) targ_archs=bfd_alpha_arch ;;
|
|
+sw_64*) targ_archs=bfd_sw_64_arch ;;
|
|
am33_2.0*) targ_archs=bfd_mn10300_arch ;;
|
|
arc*) targ_archs=bfd_arc_arch ;;
|
|
arm*) targ_archs=bfd_arm_arch ;;
|
|
@@ -299,6 +300,55 @@ case "${targ}" in
|
|
targ_defvec=alpha_ecoff_le_vec
|
|
want64=true
|
|
;;
|
|
+ sw_64*-*-freebsd* | sw_64*-*-kfreebsd*-gnu)
|
|
+ targ_defvec=sw_64_elf64_fbsd_vec
|
|
+ targ_selvecs="sw_64_elf64_vec sw_64_ecoff_le_vec"
|
|
+ want64=true
|
|
+ # FreeBSD <= 4.0 supports only the old nonstandard way of ABI labelling.
|
|
+ case "${targ}" in
|
|
+ sw_64*-*-freebsd3* | sw_64*-*-freebsd4 | sw_64*-*-freebsd4.0*)
|
|
+ targ_cflags=-DOLD_FREEBSD_ABI_LABEL ;;
|
|
+ esac
|
|
+ ;;
|
|
+ sw_64*-*-netbsd* | sw_64*-*-openbsd*)
|
|
+ targ_defvec=sw_64_elf64_vec
|
|
+ targ_selvecs=sw_64_ecoff_le_vec
|
|
+ want64=true
|
|
+ ;;
|
|
+ sw_64*-*-netware*)
|
|
+ targ_defvec=sw_64_ecoff_le_vec
|
|
+ targ_selvecs=sw_64_nlm32_vec
|
|
+ want64=true
|
|
+ ;;
|
|
+ sw_64*-*-linux*ecoff*)
|
|
+ targ_defvec=sw_64_ecoff_le_vec
|
|
+ targ_selvecs=sw_64_elf64_vec
|
|
+ want64=true
|
|
+ ;;
|
|
+ sw_64-*-linux-* | sw_64-*-elf*)
|
|
+ targ_defvec=sw_64_elf64_vec
|
|
+ targ_selvecs=sw_64_ecoff_le_vec
|
|
+ want64=true
|
|
+ ;;
|
|
+ sw_64sw6a-*-linux-* | sw_64sw6a-*-elf*)
|
|
+ targ_defvec=sw_64_elf64_vec
|
|
+ targ_selvecs=sw_64_ecoff_le_vec
|
|
+ want64=true
|
|
+ ;;
|
|
+ sw_64sw6b-*-linux-* | sw_64sw6b-*-elf*)
|
|
+ targ_defvec=sw_64_elf64_vec
|
|
+ targ_selvecs=sw_64_ecoff_le_vec
|
|
+ want64=true
|
|
+ ;;
|
|
+ sw_64*-*-*vms*)
|
|
+ targ_defvec=sw_64_vms_vec
|
|
+ targ_selvecs=sw_64_vms_lib_txt_vec
|
|
+ want64=true
|
|
+ ;;
|
|
+ sw_64*-*-*)
|
|
+ targ_defvec=sw_64_ecoff_le_vec
|
|
+ want64=true
|
|
+ ;;
|
|
ia64*-*-freebsd* | ia64*-*-netbsd* | ia64*-*-linux-* | ia64*-*-elf* | ia64*-*-kfreebsd*-gnu)
|
|
targ_defvec=ia64_elf64_le_vec
|
|
targ_selvecs="ia64_elf64_be_vec ia64_pei_vec"
|
|
diff --git a/bfd/config.in b/bfd/config.in
|
|
index f54a3cac..03d878d1 100644
|
|
--- a/bfd/config.in
|
|
+++ b/bfd/config.in
|
|
@@ -341,3 +341,5 @@
|
|
|
|
/* Use structured /proc on Solaris. */
|
|
#undef _STRUCTURED_PROC
|
|
+
|
|
+#undef TARGET_SW_64
|
|
diff --git a/bfd/configure b/bfd/configure
|
|
index fe8658e3..55e14c64 100755
|
|
--- a/bfd/configure
|
|
+++ b/bfd/configure
|
|
@@ -11907,6 +11907,11 @@ i[34567]86-*-linux-* | x86_64-*-linux-*)
|
|
ac_default_ld_z_separate_code=1
|
|
fi
|
|
;;
|
|
+sw_64-*-linux-*)
|
|
+cat >>confdefs.h <<_ACEOF
|
|
+#define TARGET_SW_64
|
|
+_ACEOF
|
|
+ ;;
|
|
esac
|
|
if test "${ac_default_ld_z_separate_code}" = unset; then
|
|
ac_default_ld_z_separate_code=0
|
|
@@ -13287,6 +13292,12 @@ do
|
|
alpha_elf64_fbsd_vec) tb="$tb elf64-alpha.lo elf64.lo $elf"; target_size=64 ;;
|
|
alpha_vms_vec) tb="$tb vms-alpha.lo vms-misc.lo vms-lib.lo"; target_size=64 ;;
|
|
alpha_vms_lib_txt_vec) tb="$tb vms-lib.lo vms-misc.lo" ;;
|
|
+ sw_64_ecoff_le_vec) tb="$tb coff-sw_64.lo ecoff.lo $ecoff"; target_size=64 ;;
|
|
+ sw_64_elf64_vec) tb="$tb elf64-sw_64.lo elf64.lo $elf"; target_size=64 ;;
|
|
+ sw_64_elf64_fbsd_vec) tb="$tb elf64-sw_64.lo elf64.lo $elf"; target_size=64 ;;
|
|
+ sw_64_nlm32_vec) tb="$tb nlm32-sw_64.lo nlm32.lo nlm.lo"; target_size=64 ;;
|
|
+ sw_64_vms_vec) tb="$tb vms-sw_64.lo vms-misc.lo vms-lib.lo"; target_size=64 ;;
|
|
+ sw_64_vms_lib_txt_vec) tb="$tb vms-lib.lo vms-misc.lo" ;;
|
|
am33_elf32_linux_vec) tb="$tb elf32-am33lin.lo elf32.lo $elf" ;;
|
|
aout0_be_vec) tb="$tb aout0.lo aout32.lo" ;;
|
|
aout64_vec) tb="$tb demo64.lo aout64.lo"; target_size=64 ;;
|
|
@@ -13701,6 +13712,19 @@ if test "${target}" = "${host}"; then
|
|
alpha*-*-*)
|
|
COREFILE=osf-core.lo
|
|
;;
|
|
+ sw_64*-*-freebsd* | sw_64*-*-kfreebsd*-gnu | sw_64*-*-*vms*)
|
|
+ COREFILE=''
|
|
+ ;;
|
|
+ sw_64*-*-linux-*)
|
|
+ COREFILE=trad-core.lo
|
|
+ TRAD_HEADER='"hosts/sw_64linux.h"'
|
|
+ ;;
|
|
+ sw_64*-*-netbsd* | sw_64*-*-openbsd*)
|
|
+ COREFILE=netbsd-core.lo
|
|
+ ;;
|
|
+ sw_64*-*-*)
|
|
+ COREFILE=osf-core.lo
|
|
+ ;;
|
|
arm-*-freebsd* | arm-*-kfreebsd*-gnu)
|
|
COREFILE='' ;;
|
|
arm*-*-netbsd* | arm-*-openbsd*)
|
|
diff --git a/bfd/configure.ac b/bfd/configure.ac
|
|
index 577824b5..9493b900 100644
|
|
--- a/bfd/configure.ac
|
|
+++ b/bfd/configure.ac
|
|
@@ -443,6 +443,12 @@ do
|
|
alpha_elf64_fbsd_vec) tb="$tb elf64-alpha.lo elf64.lo $elf"; target_size=64 ;;
|
|
alpha_vms_vec) tb="$tb vms-alpha.lo vms-misc.lo vms-lib.lo"; target_size=64 ;;
|
|
alpha_vms_lib_txt_vec) tb="$tb vms-lib.lo vms-misc.lo" ;;
|
|
+ sw_64_ecoff_le_vec) tb="$tb coff-sw_64.lo ecoff.lo $ecoff"; target_size=64 ;;
|
|
+ sw_64_elf64_vec) tb="$tb elf64-sw_64.lo elf64.lo $elf"; target_size=64 ;;
|
|
+ sw_64_elf64_fbsd_vec) tb="$tb elf64-sw_64.lo elf64.lo $elf"; target_size=64 ;;
|
|
+ sw_64_nlm32_vec) tb="$tb nlm32-sw_64.lo nlm32.lo nlm.lo"; target_size=64 ;;
|
|
+ sw_64_vms_vec) tb="$tb vms-sw_64.lo vms-misc.lo vms-lib.lo"; target_size=64 ;;
|
|
+ sw_64_vms_lib_txt_vec) tb="$tb vms-lib.lo vms-misc.lo" ;;
|
|
am33_elf32_linux_vec) tb="$tb elf32-am33lin.lo elf32.lo $elf" ;;
|
|
aout0_be_vec) tb="$tb aout0.lo aout32.lo" ;;
|
|
aout64_vec) tb="$tb demo64.lo aout64.lo"; target_size=64 ;;
|
|
diff --git a/bfd/configure.com b/bfd/configure.com
|
|
index 0a663ca0..fa4be994 100644
|
|
--- a/bfd/configure.com
|
|
+++ b/bfd/configure.com
|
|
@@ -26,9 +26,10 @@ $!
|
|
$ arch=F$GETSYI("ARCH_NAME")
|
|
$ arch=F$EDIT(arch,"LOWERCASE")
|
|
$if arch .eqs. "alpha" then target = "alpha"
|
|
+$if arch .eqs. "sw_64" then target = "sw_64"
|
|
$if arch .eqs. "ia64" then target = "ia64"
|
|
$!
|
|
-$if (arch .eqs. "alpha") .or. (arch .eqs. "ia64")
|
|
+$if (arch .eqs. "alpha") .or. (arch .eqs. "ia64") .or. (arch .eqs. "sw_64")
|
|
$then
|
|
$!
|
|
$ write sys$output "Configuring BFD for ''target' target"
|
|
@@ -328,6 +329,15 @@ $ DEFS="""SELECT_VECS=&alpha_vms_vec"","+-
|
|
$ FILES="cpu-alpha,vms,vms-hdr,vms-gsd,vms-tir,vms-misc,"
|
|
$EOD
|
|
$ endif
|
|
+$ if ARCH.eqs."sw_64"
|
|
+$ then
|
|
+$ create build.com
|
|
+$DECK
|
|
+$ DEFS="""SELECT_VECS=&sw_64_vms_vec"","+-
|
|
+ """SELECT_ARCHITECTURES=&bfd_sw_64_arch"""
|
|
+$ FILES="cpu-sw_64,vms,vms-hdr,vms-gsd,vms-tir,vms-misc,"
|
|
+$EOD
|
|
+$ endif
|
|
$ if ARCH.eqs."ia64"
|
|
$ then
|
|
$ create build.com
|
|
diff --git a/bfd/ecoff.c b/bfd/ecoff.c
|
|
index 7844a50b..f13ccb74 100644
|
|
--- a/bfd/ecoff.c
|
|
+++ b/bfd/ecoff.c
|
|
@@ -202,6 +202,12 @@ _bfd_ecoff_set_arch_mach_hook (bfd *abfd, void * filehdr)
|
|
mach = 0;
|
|
break;
|
|
|
|
+#ifdef TARGET_SW_64
|
|
+ case SW_64_MAGIC:
|
|
+ arch = bfd_arch_sw_64;
|
|
+ mach = 0;
|
|
+ break;
|
|
+#endif
|
|
default:
|
|
arch = bfd_arch_obscure;
|
|
mach = 0;
|
|
@@ -255,6 +261,9 @@ ecoff_get_magic (bfd *abfd)
|
|
case bfd_arch_alpha:
|
|
return ALPHA_MAGIC;
|
|
|
|
+ case bfd_arch_sw_64:
|
|
+ return SW_64_MAGIC;
|
|
+
|
|
default:
|
|
abort ();
|
|
return 0;
|
|
diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h
|
|
index 8f985ab8..f6499b34 100644
|
|
--- a/bfd/elf-bfd.h
|
|
+++ b/bfd/elf-bfd.h
|
|
@@ -496,6 +496,9 @@ enum elf_target_id
|
|
{
|
|
AARCH64_ELF_DATA = 1,
|
|
ALPHA_ELF_DATA,
|
|
+#ifdef TARGET_SW_64
|
|
+ SW_64_ELF_DATA,
|
|
+#endif
|
|
ARC_ELF_DATA,
|
|
ARM_ELF_DATA,
|
|
AVR_ELF_DATA,
|
|
diff --git a/bfd/elf.c b/bfd/elf.c
|
|
index 9c3f34c4..81a31ec0 100644
|
|
--- a/bfd/elf.c
|
|
+++ b/bfd/elf.c
|
|
@@ -11013,6 +11013,9 @@ elfcore_grok_netbsd_note (bfd *abfd, Elf_Internal_Note *note)
|
|
|
|
case bfd_arch_aarch64:
|
|
case bfd_arch_alpha:
|
|
+#ifdef TARGET_SW_64
|
|
+ case bfd_arch_sw_64:
|
|
+#endif
|
|
case bfd_arch_sparc:
|
|
switch (note->type)
|
|
{
|
|
diff --git a/bfd/elflink.c b/bfd/elflink.c
|
|
index 9a052082..5589c4d9 100644
|
|
--- a/bfd/elflink.c
|
|
+++ b/bfd/elflink.c
|
|
@@ -4106,6 +4106,16 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
|
|
}
|
|
|
|
ehdr = elf_elfheader (abfd);
|
|
+#ifdef TARGET_SW_64
|
|
+ if(ehdr->e_machine != 0x9916)
|
|
+ {
|
|
+ char obj_elf_path[4096]={0};
|
|
+ char obj_buff[4094];
|
|
+ readlink("/proc/sel/exe",obj_elf_path,4096);
|
|
+ sprintf(obj_buff,"fail to load_symbols %s,process_name %s\n",abfd->filename,obj_elf_path);
|
|
+ //syslog(LOG_ALERT,obj_buff,strlen(obj_buff));
|
|
+ }
|
|
+#endif
|
|
if (info->warn_alternate_em
|
|
&& bed->elf_machine_code != ehdr->e_machine
|
|
&& ((bed->elf_machine_alt1 != 0
|
|
@@ -5922,6 +5932,19 @@ elf_link_add_archive_symbols (bfd *abfd, struct bfd_link_info *info)
|
|
if (!bfd_link_add_symbols (element, info))
|
|
goto error_return;
|
|
|
|
+#ifdef TARGET_SW_64
|
|
+ Elf_Internal_Ehdr *archive_ehdrp; /* Elf file header, internal form. */
|
|
+ archive_ehdrp = elf_elfheader (element);
|
|
+ if(archive_ehdrp->e_machine != 0x9916)
|
|
+ {
|
|
+ char archive_elf_path[4096]={0};
|
|
+ char archive_buff[4096];
|
|
+ readlink("/proc/sel/exe",archive_elf_path,4096);
|
|
+ sprintf(archive_buff,"fail to load_symbols %s,process_name %s\n",element->filename,archive_elf_path);
|
|
+ //syslog(LOG_ALERT,archive_buff,strlen(archive_buff));
|
|
+ }
|
|
+#endif
|
|
+
|
|
/* If there are any new undefined symbols, we need to make
|
|
another pass through the archive in order to see whether
|
|
they can be defined. FIXME: This isn't perfect, because
|
|
diff --git a/bfd/libbfd-in.h b/bfd/libbfd-in.h
|
|
index 1f7e2218..21935c2f 100644
|
|
--- a/bfd/libbfd-in.h
|
|
+++ b/bfd/libbfd-in.h
|
|
@@ -424,8 +424,12 @@ extern bfd_cleanup _bfd_vms_lib_alpha_archive_p
|
|
(bfd *) ATTRIBUTE_HIDDEN;
|
|
extern bfd_cleanup _bfd_vms_lib_ia64_archive_p
|
|
(bfd *) ATTRIBUTE_HIDDEN;
|
|
+extern const bfd_target *_bfd_vms_lib_sw_64_archive_p
|
|
+ (bfd *) ATTRIBUTE_HIDDEN;
|
|
extern bool _bfd_vms_lib_alpha_mkarchive
|
|
(bfd *) ATTRIBUTE_HIDDEN;
|
|
+extern bfd_boolean _bfd_vms_lib_sw_64_mkarchive
|
|
+ (bfd *) ATTRIBUTE_HIDDEN;
|
|
extern bool _bfd_vms_lib_ia64_mkarchive
|
|
(bfd *) ATTRIBUTE_HIDDEN;
|
|
|
|
diff --git a/bfd/libbfd.h b/bfd/libbfd.h
|
|
index c37ddc03..9ad9adf5 100644
|
|
--- a/bfd/libbfd.h
|
|
+++ b/bfd/libbfd.h
|
|
@@ -1214,6 +1214,34 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
|
|
"BFD_RELOC_ALPHA_TPREL_HI16",
|
|
"BFD_RELOC_ALPHA_TPREL_LO16",
|
|
"BFD_RELOC_ALPHA_TPREL16",
|
|
+#ifdef TARGET_SW_64
|
|
+ "BFD_RELOC_SW_64_GPDISP_HI16",
|
|
+ "BFD_RELOC_SW_64_GPDISP_LO16",
|
|
+ "BFD_RELOC_SW_64_GPDISP",
|
|
+ "BFD_RELOC_SW_64_LITERAL",
|
|
+ "BFD_RELOC_SW_64_ELF_LITERAL",
|
|
+ "BFD_RELOC_SW_64_LITUSE",
|
|
+ "BFD_RELOC_SW_64_HINT",
|
|
+ "BFD_RELOC_SW_64_LINKAGE",
|
|
+ "BFD_RELOC_SW_64_CODEADDR",
|
|
+ "BFD_RELOC_SW_64_GPREL_HI16",
|
|
+ "BFD_RELOC_SW_64_GPREL_LO16",
|
|
+ "BFD_RELOC_SW_64_BRSGP"
|
|
+ "BFD_RELOC_SW_64_NOP",
|
|
+ "BFD_RELOC_SW_64_BSR",
|
|
+ "BFD_RELOC_SW_64_LDA",
|
|
+ "BFD_RELOC_SW_64_BOH",
|
|
+ "BFD_RELOC_SW_64_TLSGD",
|
|
+ "BFD_RELOC_SW_64_TLSLDM",
|
|
+ "BFD_RELOC_SW_64_DTPMOD64",
|
|
+ "BFD_RELOC_SW_64_GOTDTPREL16",
|
|
+ "BFD_RELOC_SW_64_DTPREL64",
|
|
+ "BFD_RELOC_SW_64_DTPREL_HI16",
|
|
+ "BFD_RELOC_SW_64_DTPREL_LO16",
|
|
+ "BFD_RELOC_SW_64_DTPREL16",
|
|
+ "BFD_RELOC_SW_64_GOTTPREL16",
|
|
+ "BFD_RELOC_SW_64_TPREL64",
|
|
+#endif
|
|
"BFD_RELOC_MIPS_JMP",
|
|
"BFD_RELOC_MICROMIPS_JMP",
|
|
"BFD_RELOC_MIPS16_JMP",
|
|
diff --git a/bfd/makefile.vms b/bfd/makefile.vms
|
|
index 4efe1581..21b9f16e 100644
|
|
--- a/bfd/makefile.vms
|
|
+++ b/bfd/makefile.vms
|
|
@@ -36,6 +36,13 @@ OBJS:=vms-alpha.obj,vms-lib.obj,vms-misc.obj,cpu-alpha.obj
|
|
DEFS=SELECT_VECS="&alpha_vms_vec",SELECT_ARCHITECTURES="&bfd_alpha_arch"
|
|
endif
|
|
|
|
+ifeq ($(ARCH),SW_64)
|
|
+HOSTFILE=sw_64vms.h
|
|
+OBJS:=vms-sw_64.obj,vms-lib.obj,vms-misc.obj,cpu-sw_64.obj
|
|
+DEFS=SELECT_VECS="&sw_64_vms_vec",SELECT_ARCHITECTURES="&bfd_sw_64_arch"
|
|
+endif
|
|
+
|
|
+
|
|
OBJS:=$(OBJS),archive.obj,archive64.obj,archures.obj,bfd.obj,bfdio.obj,\
|
|
binary.obj,cache.obj,coffgen.obj,compress.obj,corefile.obj,dwarf2.obj,\
|
|
elf.obj,format.obj,hash.obj,ihex.obj,init.obj,libbfd.obj,linker.obj,\
|
|
diff --git a/bfd/peicode.h b/bfd/peicode.h
|
|
index 9374e232..4e7a7486 100644
|
|
--- a/bfd/peicode.h
|
|
+++ b/bfd/peicode.h
|
|
@@ -1176,6 +1176,10 @@ pe_ILF_object_p (bfd * abfd)
|
|
case IMAGE_FILE_MACHINE_UNKNOWN:
|
|
case IMAGE_FILE_MACHINE_ALPHA:
|
|
case IMAGE_FILE_MACHINE_ALPHA64:
|
|
+#ifdef TARGET_SW_64
|
|
+ case IMAGE_FILE_MACHINE_SW_64:
|
|
+ case IMAGE_FILE_MACHINE_SW_6464:
|
|
+#endif
|
|
case IMAGE_FILE_MACHINE_IA64:
|
|
break;
|
|
|
|
diff --git a/bfd/targets.c b/bfd/targets.c
|
|
index ae6075b3..362a0dc9 100644
|
|
--- a/bfd/targets.c
|
|
+++ b/bfd/targets.c
|
|
@@ -685,6 +685,14 @@ extern const bfd_target alpha_elf64_vec;
|
|
extern const bfd_target alpha_elf64_fbsd_vec;
|
|
extern const bfd_target alpha_vms_vec;
|
|
extern const bfd_target alpha_vms_lib_txt_vec;
|
|
+#ifdef TARGET_SW_64
|
|
+extern const bfd_target sw_64_ecoff_le_vec;
|
|
+extern const bfd_target sw_64_elf64_vec;
|
|
+extern const bfd_target sw_64_elf64_fbsd_vec;
|
|
+extern const bfd_target sw_64_nlm32_vec;
|
|
+extern const bfd_target sw_64_vms_vec;
|
|
+extern const bfd_target sw_64_vms_lib_txt_vec;
|
|
+#endif
|
|
extern const bfd_target am33_elf32_linux_vec;
|
|
extern const bfd_target aout_vec;
|
|
extern const bfd_target arc_elf32_be_vec;
|
|
@@ -1003,6 +1011,15 @@ static const bfd_target * const _bfd_target_vector[] =
|
|
#endif
|
|
&alpha_vms_lib_txt_vec,
|
|
|
|
+#ifdef BFD64
|
|
+ &sw_64_ecoff_le_vec,
|
|
+ &sw_64_elf64_vec,
|
|
+ &sw_64_elf64_fbsd_vec,
|
|
+ &sw_64_nlm32_vec,
|
|
+ &sw_64_vms_vec,
|
|
+#endif
|
|
+ &sw_64_vms_lib_txt_vec,
|
|
+
|
|
&am33_elf32_linux_vec,
|
|
|
|
#if 0
|
|
diff --git a/binutils/config.in b/binutils/config.in
|
|
index e6fa66fc..44c1d17a 100644
|
|
--- a/binutils/config.in
|
|
+++ b/binutils/config.in
|
|
@@ -260,3 +260,5 @@
|
|
|
|
/* Define to 1 if you need to in order for `stat' and other things to work. */
|
|
#undef _POSIX_SOURCE
|
|
+
|
|
+#undef TARGET_SW_64
|
|
diff --git a/binutils/configure b/binutils/configure
|
|
index 186ed103..e2f04ca1 100755
|
|
--- a/binutils/configure
|
|
+++ b/binutils/configure
|
|
@@ -14614,6 +14614,11 @@ do
|
|
mep-*)
|
|
OBJDUMP_DEFS="-DSKIP_ZEROES=256 -DSKIP_ZEROES_AT_END=0"
|
|
;;
|
|
+ sw_64-*-*)
|
|
+cat >>confdefs.h <<_ACEOF
|
|
+#define TARGET_SW_64
|
|
+_ACEOF
|
|
+ ;;
|
|
esac
|
|
|
|
# Add objdump private vectors.
|
|
diff --git a/binutils/configure.com b/binutils/configure.com
|
|
index 7b4a0b8d..85eddd39 100644
|
|
--- a/binutils/configure.com
|
|
+++ b/binutils/configure.com
|
|
@@ -84,6 +84,7 @@ $! Add TARGET.
|
|
$!
|
|
$ if arch .eqs. "ia64" then target = "elf64-ia64-vms"
|
|
$ if arch .eqs. "alpha" then target = "vms-alpha"
|
|
+$ if arch .eqs. "sw_64" then target = "vms-sw_64"
|
|
$ if arch .eqs. "vax" then target = "vms-vax"
|
|
$!
|
|
$ open/append tfile config.h
|
|
diff --git a/binutils/readelf.c b/binutils/readelf.c
|
|
index cc9023aa..06dba4cf 100644
|
|
--- a/binutils/readelf.c
|
|
+++ b/binutils/readelf.c
|
|
@@ -91,6 +91,9 @@
|
|
|
|
#include "elf/aarch64.h"
|
|
#include "elf/alpha.h"
|
|
+#ifdef TARGET_SW_64
|
|
+#include "elf/sw_64.h"
|
|
+#endif
|
|
#include "elf/arc.h"
|
|
#include "elf/arm.h"
|
|
#include "elf/avr.h"
|
|
@@ -1021,6 +1024,9 @@ guess_is_rela (unsigned int e_machine)
|
|
case EM_AARCH64:
|
|
case EM_ADAPTEVA_EPIPHANY:
|
|
case EM_ALPHA:
|
|
+#ifdef TARGET_SW_64
|
|
+ case EM_SW_64:
|
|
+#endif
|
|
case EM_ALTERA_NIOS2:
|
|
case EM_ARC:
|
|
case EM_ARC_COMPACT:
|
|
@@ -1617,6 +1623,12 @@ dump_relocations (Filedata * filedata,
|
|
rtype = elf_alpha_reloc_type (type);
|
|
break;
|
|
|
|
+#ifdef TARGET_SW_64
|
|
+ case EM_SW_64:
|
|
+ rtype = elf_sw_64_reloc_type (type);
|
|
+ break;
|
|
+#endif
|
|
+
|
|
case EM_ARM:
|
|
rtype = elf_arm_reloc_type (type);
|
|
break;
|
|
@@ -1833,6 +1845,35 @@ dump_relocations (Filedata * filedata,
|
|
res = false;
|
|
}
|
|
}
|
|
+#ifdef TARGET_SW_64
|
|
+ else if (filedata->file_header.e_machine == EM_SW_64
|
|
+ && rtype != NULL
|
|
+ && streq (rtype, "R_SW_64_LITUSE")
|
|
+ )
|
|
+ //&& is_rela)
|
|
+ {
|
|
+ switch (rels[i].r_addend)
|
|
+ {
|
|
+ case LITUSE_SW_64_ADDR: rtype = "ADDR"; break;
|
|
+ case LITUSE_SW_64_BASE: rtype = "BASE"; break;
|
|
+ case LITUSE_SW_64_BYTOFF: rtype = "BYTOFF"; break;
|
|
+ case LITUSE_SW_64_JSR: rtype = "JSR"; break;
|
|
+ case LITUSE_SW_64_TLSGD: rtype = "TLSGD"; break;
|
|
+ case LITUSE_SW_64_TLSLDM: rtype = "TLSLDM"; break;
|
|
+ case LITUSE_SW_64_JSRDIRECT: rtype = "JSRDIRECT"; break;
|
|
+ default: rtype = NULL;
|
|
+ }
|
|
+ if (rtype)
|
|
+ printf (" (%s)", rtype);
|
|
+ else
|
|
+ {
|
|
+ putchar (' ');
|
|
+ printf (_("<unknown addend: %lx>"),
|
|
+ (unsigned long) rels[i].r_addend);
|
|
+ res = false;
|
|
+ }
|
|
+ }
|
|
+#endif
|
|
else if (symtab_index)
|
|
{
|
|
if (symtab == NULL || symtab_index >= nsyms)
|
|
@@ -2238,6 +2279,18 @@ get_alpha_dynamic_type (unsigned long type)
|
|
}
|
|
}
|
|
|
|
+#ifdef TARGET_SW_64
|
|
+static const char *
|
|
+get_sw_64_dynamic_type (unsigned long type)
|
|
+{
|
|
+ switch (type)
|
|
+ {
|
|
+ case DT_SW_64_PLTRO: return "SW_64_PLTRO";
|
|
+ default: return NULL;
|
|
+ }
|
|
+}
|
|
+#endif
|
|
+
|
|
static const char *
|
|
get_score_dynamic_type (unsigned long type)
|
|
{
|
|
@@ -2428,6 +2481,11 @@ get_dynamic_type (Filedata * filedata, unsigned long type)
|
|
case EM_ALPHA:
|
|
result = get_alpha_dynamic_type (type);
|
|
break;
|
|
+#ifdef TARGET_SW_64
|
|
+ case EM_SW_64:
|
|
+ result = get_sw_64_dynamic_type (type);
|
|
+ break;
|
|
+#endif
|
|
case EM_SCORE:
|
|
result = get_score_dynamic_type (type);
|
|
break;
|
|
@@ -2845,6 +2903,9 @@ get_machine_name (unsigned e_machine)
|
|
/* Large numbers... */
|
|
case EM_MT: return "Morpho Techologies MT processor";
|
|
case EM_ALPHA: return "Alpha";
|
|
+#ifdef TARGET_SW_64
|
|
+ case EM_SW_64: return "Sw_64";
|
|
+#endif
|
|
case EM_WEBASSEMBLY: return "Web Assembly";
|
|
case EM_DLX: return "OpenDLX";
|
|
case EM_XSTORMY16: return "Sanyo XStormy16 CPU core";
|
|
@@ -12355,6 +12416,21 @@ get_alpha_symbol_other (unsigned int other)
|
|
}
|
|
}
|
|
|
|
+#ifdef TARGET_SW_64
|
|
+static const char *
|
|
+get_sw_64_symbol_other (unsigned int other)
|
|
+{
|
|
+ switch (other)
|
|
+ {
|
|
+ case STO_SW_64_NOPV: return "NOPV";
|
|
+ case STO_SW_64_STD_GPLOAD: return "STD GPLOAD";
|
|
+ default:
|
|
+ error (_("Unrecognized sw_64 specific other value: %u"), other);
|
|
+ return _("<unknown>");
|
|
+ }
|
|
+}
|
|
+#endif
|
|
+
|
|
static const char *
|
|
get_solaris_symbol_visibility (unsigned int visibility)
|
|
{
|
|
@@ -12497,6 +12573,11 @@ get_symbol_other (Filedata * filedata, unsigned int other)
|
|
case EM_ALPHA:
|
|
result = get_alpha_symbol_other (other);
|
|
break;
|
|
+#ifdef TARGET_SW_64
|
|
+ case EM_SW_64:
|
|
+ result = get_sw_64_symbol_other (other);
|
|
+ break;
|
|
+#endif
|
|
case EM_AARCH64:
|
|
result = get_aarch64_symbol_other (other);
|
|
break;
|
|
@@ -13790,6 +13871,10 @@ is_32bit_abs_reloc (Filedata * filedata, unsigned int reloc_type)
|
|
return reloc_type == 3;
|
|
case EM_ALPHA:
|
|
return reloc_type == 1; /* R_ALPHA_REFLONG. */
|
|
+#ifdef TARGET_SW_64
|
|
+ case EM_SW_64:
|
|
+ return reloc_type == 1; /* R_SW_64_REFLONG. */
|
|
+#endif
|
|
case EM_ARC:
|
|
return reloc_type == 1; /* R_ARC_32. */
|
|
case EM_ARC_COMPACT:
|
|
@@ -13987,6 +14072,10 @@ is_32bit_pcrel_reloc (Filedata * filedata, unsigned int reloc_type)
|
|
return reloc_type == 6;
|
|
case EM_ALPHA:
|
|
return reloc_type == 10; /* R_ALPHA_SREL32. */
|
|
+#ifdef TARGET_SW_64
|
|
+ case EM_SW_64:
|
|
+ return reloc_type == 10; /* R_SW_64_SREL32. */
|
|
+#endif
|
|
case EM_ARC_COMPACT:
|
|
case EM_ARC_COMPACT2:
|
|
return reloc_type == 49; /* R_ARC_32_PCREL. */
|
|
@@ -14055,6 +14144,10 @@ is_64bit_abs_reloc (Filedata * filedata, unsigned int reloc_type)
|
|
return reloc_type == 257; /* R_AARCH64_ABS64. */
|
|
case EM_ALPHA:
|
|
return reloc_type == 2; /* R_ALPHA_REFQUAD. */
|
|
+#ifdef TARGET_SW_64
|
|
+ case EM_SW_64:
|
|
+ return reloc_type == 2; /* R_SW_64_REFQUAD. */
|
|
+#endif
|
|
case EM_IA_64:
|
|
return (reloc_type == 0x26 /* R_IA64_DIR64MSB. */
|
|
|| reloc_type == 0x27 /* R_IA64_DIR64LSB. */);
|
|
@@ -14097,6 +14190,10 @@ is_64bit_pcrel_reloc (Filedata * filedata, unsigned int reloc_type)
|
|
return reloc_type == 260; /* R_AARCH64_PREL64. */
|
|
case EM_ALPHA:
|
|
return reloc_type == 11; /* R_ALPHA_SREL64. */
|
|
+#ifdef TARGET_SW_64
|
|
+ case EM_SW_64:
|
|
+ return reloc_type == 11; /* R_SW_64_SREL64. */
|
|
+#endif
|
|
case EM_IA_64:
|
|
return (reloc_type == 0x4e /* R_IA64_PCREL64MSB. */
|
|
|| reloc_type == 0x4f /* R_IA64_PCREL64LSB. */);
|
|
@@ -14402,6 +14499,9 @@ is_none_reloc (Filedata * filedata, unsigned int reloc_type)
|
|
case EM_68K: /* R_68K_NONE. */
|
|
case EM_ADAPTEVA_EPIPHANY:
|
|
case EM_ALPHA: /* R_ALPHA_NONE. */
|
|
+#ifdef TARGET_SW_64
|
|
+ case EM_SW_64: /* R_SW_64_NONE. */
|
|
+#endif
|
|
case EM_ALTERA_NIOS2: /* R_NIOS2_NONE. */
|
|
case EM_ARC: /* R_ARC_NONE. */
|
|
case EM_ARC_COMPACT2: /* R_ARC_NONE. */
|
|
@@ -20039,6 +20139,9 @@ get_netbsd_elfcore_note_type (Filedata * filedata, unsigned e_type)
|
|
|
|
case EM_OLD_ALPHA:
|
|
case EM_ALPHA:
|
|
+#ifdef TARGET_SW_64
|
|
+ case EM_SW_64:
|
|
+#endif
|
|
case EM_SPARC:
|
|
case EM_SPARC32PLUS:
|
|
case EM_SPARCV9:
|
|
diff --git a/binutils/testsuite/binutils-all/nm.exp b/binutils/testsuite/binutils-all/nm.exp
|
|
index 93753199..5a352dd2 100644
|
|
--- a/binutils/testsuite/binutils-all/nm.exp
|
|
+++ b/binutils/testsuite/binutils-all/nm.exp
|
|
@@ -44,7 +44,7 @@ if {![binutils_assemble $srcdir/$subdir/bintest.s tmpdir/bintest.o]} then {
|
|
|
|
# This test does not work correctly on ECOFF targets, because ECOFF
|
|
# stores most symbols twice, which messes up the nm output.
|
|
- setup_xfail "alpha*-*-osf*"
|
|
+ setup_xfail "alpha*-*-osf*" "sw_64*-*-ecoff*"
|
|
setup_xfail "mips*-*-ultrix*" "mips*-*-ecoff*" "mips*-*-irix4*"
|
|
setup_xfail "mips*-*-riscos*" "mips*-*-sysv3*"
|
|
|
|
@@ -104,7 +104,7 @@ if {![binutils_assemble $srcdir/$subdir/bintest.s tmpdir/bintest.o]} then {
|
|
|
|
# This test does not work correctly on ECOFF targets, because ECOFF
|
|
# stores most symbols twice, which messes up the nm output.
|
|
- setup_xfail "alpha*-*-osf*"
|
|
+ setup_xfail "alpha*-*-osf*" "sw_64*-*-ecoff*"
|
|
setup_xfail "mips*-*-ultrix*" "mips*-*-ecoff*" "mips*-*-irix4*"
|
|
setup_xfail "mips*-*-riscos*" "mips*-*-sysv3*"
|
|
|
|
@@ -183,7 +183,7 @@ if {![binutils_assemble $srcdir/$subdir/$nm_1_src tmpdir/nm-1.o]} then {
|
|
|
|
# This test does not work correctly on ECOFF targets, because ECOFF
|
|
# stores most symbols twice, which messes up the nm output.
|
|
- setup_xfail "alpha*-*-osf*"
|
|
+ setup_xfail "alpha*-*-osf*" "sw_64*-*-ecoff*"
|
|
setup_xfail "mips*-*-ultrix*" "mips*-*-ecoff*" "mips*-*-irix4*"
|
|
setup_xfail "mips*-*-riscos*" "mips*-*-sysv3*"
|
|
|
|
@@ -263,7 +263,7 @@ if [is_elf_format] {
|
|
setup_xfail "sh*-*-*"
|
|
# The pre-compiled dwarf info in dw4.s is not compatible with the
|
|
# ALPHA, HPPA, IA64 and MIPS targets.
|
|
- setup_xfail "alpha*-*-*" "hppa*-*-*" "ia64*-*-*" "mips*-*-*"
|
|
+ setup_xfail "alpha*-*-*" "sw_64*-*-*" "hppa*-*-*" "ia64*-*-*" "mips*-*-*"
|
|
# Assembling the source file triggers an ICE in the FT32 assembler.
|
|
# FIXME: Fix the ICE...
|
|
setup_xfail "ft32-*-*"
|
|
@@ -303,7 +303,7 @@ if [is_elf_format] {
|
|
# Test nm --ifunc-chars on a indirect symbols.
|
|
|
|
# The following targets are known to not support ifuncs.
|
|
- setup_xfail "alpha*-*-*"
|
|
+ setup_xfail "alpha*-*-*" "sw_64*-*-*"
|
|
setup_xfail "arm*-elf" "arm*-*-nto*" "arm*-*-netbsdelf*"
|
|
setup_xfail "*-*-hpux*"
|
|
setup_xfail "mips*-*-*" "tx39*-*-*"
|
|
diff --git a/binutils/testsuite/binutils-all/objcopy.exp b/binutils/testsuite/binutils-all/objcopy.exp
|
|
index e1df9ff7..46bfd2a3 100644
|
|
--- a/binutils/testsuite/binutils-all/objcopy.exp
|
|
+++ b/binutils/testsuite/binutils-all/objcopy.exp
|
|
@@ -120,6 +120,7 @@ proc objcopy_test {testname srcfile type asflags ldflags} {
|
|
|
|
# On OSF/1, this succeeds with gas and fails with /bin/as.
|
|
setup_xfail "alpha*-*-osf*"
|
|
+ setup_xfail "sw_64*-*-osf*"
|
|
|
|
fail "objcopy $type ($testname)"
|
|
}
|
|
diff --git a/binutils/testsuite/binutils-all/objdump.exp b/binutils/testsuite/binutils-all/objdump.exp
|
|
index c9a7eec7..81f82721 100644
|
|
--- a/binutils/testsuite/binutils-all/objdump.exp
|
|
+++ b/binutils/testsuite/binutils-all/objdump.exp
|
|
@@ -34,7 +34,7 @@ send_user "Version [binutil_version $OBJDUMP]"
|
|
set got [binutils_run $OBJDUMP "$OBJDUMPFLAGS -i"]
|
|
|
|
set cpus_expected [list]
|
|
-lappend cpus_expected aarch64 alpha am33-2 arc ARC700 ARCv2 arm cris
|
|
+lappend cpus_expected aarch64 alpha sw_64 am33-2 arc ARC700 ARCv2 arm cris
|
|
lappend cpus_expected d10v d30v fr30 fr500 fr550 h8 hppa i386 iamcu ip2022
|
|
lappend cpus_expected m16c m32c m32r m68hc11 m68hc12 m68k MCore mep c5 h1 MicroBlaze
|
|
lappend cpus_expected mips mn10200 mn10300 ms1 msp MSP430 nds32 n1h_v3 ns32k
|
|
diff --git a/binutils/testsuite/lib/binutils-common.exp b/binutils/testsuite/lib/binutils-common.exp
|
|
index 59e25df9..bd4119e1 100644
|
|
--- a/binutils/testsuite/lib/binutils-common.exp
|
|
+++ b/binutils/testsuite/lib/binutils-common.exp
|
|
@@ -1627,7 +1627,7 @@ proc get_standard_section_names {} {
|
|
if [istarget "rx-*-elf"] {
|
|
return { "P" "D_1" "B_1" }
|
|
}
|
|
- if { [istarget "alpha*-*-*vms*"] || [is_som_format] } {
|
|
+ if { [istarget "alpha*-*-*vms*"] || [istarget "sw_64*-*-*vms*"] || [is_som_format] } {
|
|
return { {\$CODE\$} {\$DATA\$} {\$BSS\$} }
|
|
}
|
|
return
|
|
diff --git a/config.guess b/config.guess
|
|
index cc7a8107..9d4fbafa 100755
|
|
--- a/config.guess
|
|
+++ b/config.guess
|
|
@@ -355,6 +355,36 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
|
|
exitcode=$?
|
|
trap '' 0
|
|
exit $exitcode ;;
|
|
+ sw_64:OSF1:*:*)
|
|
+ case $UNAME_RELEASE in
|
|
+ *4.0)
|
|
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
|
|
+ ;;
|
|
+ *5.*)
|
|
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
|
|
+ ;;
|
|
+ esac
|
|
+ # According to Compaq, /usr/sbin/psrinfo has been available on
|
|
+ # OSF/1 and Tru64 systems produced since 1995. I hope that
|
|
+ # covers most systems running today. This code pipes the CPU
|
|
+ # types through head -n 1, so we only detect the type of CPU 0.
|
|
+ SW_64_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The sw_64 \(.*\) processor.*$/\1/p' | head -n 1`
|
|
+ case "$SW_64_CPU_TYPE" in
|
|
+ "SW6A (21264)")
|
|
+ UNAME_MACHINE="sw_64sw6a" ;;
|
|
+ "SW6B (21264)")
|
|
+ UNAME_MACHINE="sw_64sw6b" ;;
|
|
+ "SW6 (21264A)")
|
|
+ UNAME_MACHINE="sw_64sw6" ;;
|
|
+ esac
|
|
+ # A Pn.n version is a patched version.
|
|
+ # A Vn.n version is a released version.
|
|
+ # A Tn.n version is a released field test version.
|
|
+ # A Xn.n version is an unreleased experimental baselevel.
|
|
+ # 1.2 uses "1.2" for uname -r.
|
|
+ OSF_REL=`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
|
|
+ GUESS=$UNAME_MACHINE-dec-osf$OSF_REL
|
|
+ ;;
|
|
Amiga*:UNIX_System_V:4.0:*)
|
|
echo m68k-unknown-sysv4
|
|
exit ;;
|
|
@@ -953,6 +983,16 @@ EOF
|
|
if test "$?" = 0 ; then LIBC=gnulibc1 ; fi
|
|
echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
|
|
exit ;;
|
|
+ sw_64:Linux:*:*)
|
|
+ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null` in
|
|
+ SW6A) UNAME_MACHINE=sw_64sw6a ;;
|
|
+ SW6B) UNAME_MACHINE=sw_64sw6b ;;
|
|
+ SW6) UNAME_MACHINE=sw_64sw6 ;;
|
|
+ esac
|
|
+ objdump --private-headers /bin/sh | grep -q ld.so.1
|
|
+ if test "$?" = 0 ; then LIBC="gnulibc1" ; fi
|
|
+ GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}
|
|
+ ;;
|
|
arc:Linux:*:* | arceb:Linux:*:* | arc64:Linux:*:*)
|
|
echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
|
|
exit ;;
|
|
@@ -1474,6 +1514,7 @@ EOF
|
|
UNAME_MACHINE=$( (uname -p) 2>/dev/null)
|
|
case "$UNAME_MACHINE" in
|
|
A*) echo alpha-dec-vms ; exit ;;
|
|
+ S*) echo sw_64-dec-vms ; exit ;;
|
|
I*) echo ia64-dec-vms ; exit ;;
|
|
V*) echo vax-dec-vms ; exit ;;
|
|
esac ;;
|
|
diff --git a/config.sub b/config.sub
|
|
index 7384e919..f4fb2e2c 100755
|
|
--- a/config.sub
|
|
+++ b/config.sub
|
|
@@ -1163,6 +1163,7 @@ case $cpu-$vendor in
|
|
| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] \
|
|
| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] \
|
|
| alphapca5[67] | alpha64pca5[67] \
|
|
+ | sw_64 | sw_64sw6a | sw_64sw6b \
|
|
| am33_2.0 \
|
|
| amdgcn \
|
|
| arc | arceb | arc64 \
|
|
diff --git a/config/elf.m4 b/config/elf.m4
|
|
index 1772a443..537373c3 100644
|
|
--- a/config/elf.m4
|
|
+++ b/config/elf.m4
|
|
@@ -17,7 +17,7 @@ target_elf=no
|
|
case $target in
|
|
*-darwin* | *-aix* | *-cygwin* | *-mingw* | *-aout* | *-*coff* | \
|
|
*-msdosdjgpp* | *-vms* | *-wince* | *-*-pe* | \
|
|
- alpha*-dec-osf* | *-interix* | hppa[[12]]*-*-hpux* | \
|
|
+ alpha*-dec-osf* | sw_64*-dec-osf* | *-interix* | hppa[[12]]*-*-hpux* | \
|
|
nvptx-*-none)
|
|
target_elf=no
|
|
;;
|
|
diff --git a/config/intdiv0.m4 b/config/intdiv0.m4
|
|
index 55dddcf1..8519d49e 100644
|
|
--- a/config/intdiv0.m4
|
|
+++ b/config/intdiv0.m4
|
|
@@ -56,7 +56,7 @@ int main ()
|
|
[
|
|
# Guess based on the CPU.
|
|
case "$host_cpu" in
|
|
- alpha* | i[34567]86 | m68k | s390*)
|
|
+ alpha* | sw_64* | i[34567]86 | m68k | s390*)
|
|
gt_cv_int_divbyzero_sigfpe="guessing yes";;
|
|
*)
|
|
gt_cv_int_divbyzero_sigfpe="guessing no";;
|
|
diff --git a/config/picflag.m4 b/config/picflag.m4
|
|
index 8b106f9a..1397e3a1 100644
|
|
--- a/config/picflag.m4
|
|
+++ b/config/picflag.m4
|
|
@@ -20,6 +20,9 @@ case "${$2}" in
|
|
alpha*-dec-osf5*)
|
|
# PIC is the default.
|
|
;;
|
|
+ sw_64*-dec-osf5*)
|
|
+ # PIC is the default.
|
|
+ ;;
|
|
hppa*64*-*-hpux*)
|
|
# PIC is the default for 64-bit PA HP-UX.
|
|
;;
|
|
diff --git a/config/tcl.m4 b/config/tcl.m4
|
|
index 4542a4b2..64319b54 100644
|
|
--- a/config/tcl.m4
|
|
+++ b/config/tcl.m4
|
|
@@ -1368,6 +1368,9 @@ dnl AC_CHECK_TOOL(AR, ar)
|
|
if test "`uname -m`" = "alpha" ; then
|
|
CFLAGS="$CFLAGS -mieee"
|
|
fi
|
|
+ if test "`uname -m`" = "sw_64" ; then
|
|
+ CFLAGS="$CFLAGS -mieee"
|
|
+ fi
|
|
if test $do64bit = yes; then
|
|
AC_CACHE_CHECK([if compiler accepts -m64 flag], tcl_cv_cc_m64, [
|
|
hold_cflags=$CFLAGS
|
|
@@ -1418,6 +1421,9 @@ dnl AC_CHECK_TOOL(AR, ar)
|
|
if test "`uname -m`" = "alpha" ; then
|
|
CFLAGS="$CFLAGS -mieee"
|
|
fi
|
|
+ if test "`uname -m`" = "sw_64" ; then
|
|
+ CFLAGS="$CFLAGS -mieee"
|
|
+ fi
|
|
;;
|
|
Lynx*)
|
|
SHLIB_CFLAGS="-fPIC"
|
|
diff --git a/configure b/configure
|
|
index 3dd20652..4c675f0a 100755
|
|
--- a/configure
|
|
+++ b/configure
|
|
@@ -778,6 +778,7 @@ ac_subst_files='serialization_dependencies
|
|
host_makefile_frag
|
|
target_makefile_frag
|
|
alphaieee_frag
|
|
+sw_64ieee_frag
|
|
ospace_frag'
|
|
ac_user_opts='
|
|
enable_option_checking
|
|
@@ -3013,7 +3014,7 @@ case "${ENABLE_GOLD}" in
|
|
*-*-elf* | *-*-sysv4* | *-*-unixware* | *-*-eabi* | hppa*64*-*-hpux* \
|
|
| *-*-linux* | *-*-gnu* | frv-*-uclinux* | *-*-irix5* | *-*-irix6* \
|
|
| *-*-netbsd* | *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* \
|
|
- | *-*-solaris2* | *-*-nto* | *-*-nacl*)
|
|
+ | *-*-solaris2* | *-*-nto* | *-*-nacl* | sw_64-*-*-*)
|
|
case "${target}" in
|
|
*-*-linux*aout* | *-*-linux*oldld*)
|
|
;;
|
|
@@ -3027,7 +3028,7 @@ case "${ENABLE_GOLD}" in
|
|
# Check for target supported by gold.
|
|
case "${target}" in
|
|
i?86-*-* | x86_64-*-* | sparc*-*-* | powerpc*-*-* | arm*-*-* \
|
|
- | aarch64*-*-* | tilegx*-*-* | mips*-*-* | s390*-*-*)
|
|
+ | aarch64*-*-* | tilegx*-*-* | mips*-*-* | s390*-*-* | sw_64-*-*-*)
|
|
configdirs="$configdirs gold"
|
|
if test x${ENABLE_GOLD} = xdefault; then
|
|
default_ld=gold
|
|
@@ -3436,6 +3437,9 @@ case "${target}" in
|
|
alpha*-*-*vms*)
|
|
noconfigdirs="$noconfigdirs target-libffi"
|
|
;;
|
|
+ sw_64*-*-*vms*)
|
|
+ noconfigdirs="$noconfigdirs target-libffi"
|
|
+ ;;
|
|
arm*-*-freebsd*)
|
|
noconfigdirs="$noconfigdirs target-libffi"
|
|
;;
|
|
@@ -3570,6 +3574,9 @@ case "${target}" in
|
|
alpha*-dec-osf*)
|
|
noconfigdirs="$noconfigdirs target-newlib target-libgloss"
|
|
;;
|
|
+ sw_64*-dec-osf*)
|
|
+ noconfigdirs="$noconfigdirs target-newlib target-libgloss"
|
|
+ ;;
|
|
i[3456789]86-*-linux*)
|
|
# This section makes it possible to build newlib natively on linux.
|
|
# If we are using a cross compiler then don't configure newlib.
|
|
@@ -3702,6 +3709,18 @@ case "${target}" in
|
|
# newlib is not 64 bit ready
|
|
noconfigdirs="$noconfigdirs target-newlib target-libgloss"
|
|
;;
|
|
+ sw_64*-dec-osf*)
|
|
+ # ld works, but does not support shared libraries.
|
|
+ # gas doesn't generate exception information.
|
|
+ noconfigdirs="$noconfigdirs gas ld"
|
|
+ ;;
|
|
+ sw_64*-*-*vms*)
|
|
+ noconfigdirs="$noconfigdirs gdb target-newlib target-libgloss"
|
|
+ ;;
|
|
+ sw_64*-*-*)
|
|
+ # newlib is not 64 bit ready
|
|
+ noconfigdirs="$noconfigdirs target-newlib target-libgloss"
|
|
+ ;;
|
|
sh*-*-pe|mips*-*-pe|*arm-wince-pe)
|
|
noconfigdirs="$noconfigdirs tcl tk itcl libgui sim"
|
|
;;
|
|
@@ -3965,6 +3984,9 @@ fi
|
|
alpha*-linux*)
|
|
host_makefile_frag="config/mh-alpha-linux"
|
|
;;
|
|
+ sw_64*-linux*)
|
|
+ host_makefile_frag="config/mh-sw_64-linux"
|
|
+ ;;
|
|
hppa*-hp-hpux10*)
|
|
host_makefile_frag="config/mh-pa-hpux10"
|
|
;;
|
|
@@ -6359,7 +6381,7 @@ target_elf=no
|
|
case $target in
|
|
*-darwin* | *-aix* | *-cygwin* | *-mingw* | *-aout* | *-*coff* | \
|
|
*-msdosdjgpp* | *-vms* | *-wince* | *-*-pe* | \
|
|
- alpha*-dec-osf* | *-interix* | hppa[12]*-*-hpux* | \
|
|
+ alpha*-dec-osf* | sw_64*-dec-osf* | *-interix* | hppa[12]*-*-hpux* | \
|
|
nvptx-*-none)
|
|
target_elf=no
|
|
;;
|
|
@@ -7292,6 +7314,15 @@ case $target in
|
|
;;
|
|
esac
|
|
|
|
+sw_64ieee_frag=/dev/null
|
|
+case $target in
|
|
+ sw_64*-*-*)
|
|
+ # This just makes sure to use the -mieee option to build target libs.
|
|
+ # This should probably be set individually by each library.
|
|
+ sw_64ieee_frag="config/mt-sw_64ieee"
|
|
+ ;;
|
|
+esac
|
|
+
|
|
# If --enable-target-optspace always use -Os instead of -O2 to build
|
|
# the target libraries, similarly if it is not specified, use -Os
|
|
# on selected platforms.
|
|
@@ -7996,7 +8027,7 @@ case "${target}" in
|
|
esac
|
|
|
|
# Makefile fragments.
|
|
-for frag in host_makefile_frag target_makefile_frag alphaieee_frag ospace_frag;
|
|
+for frag in host_makefile_frag target_makefile_frag alphaieee_frag sw_64ieee_frag ospace_frag;
|
|
do
|
|
eval fragval=\$$frag
|
|
if test $fragval != /dev/null; then
|
|
diff --git a/configure.ac b/configure.ac
|
|
index 48f679b8..12b4c56c 100644
|
|
--- a/configure.ac
|
|
+++ b/configure.ac
|
|
@@ -336,7 +336,7 @@ case "${ENABLE_GOLD}" in
|
|
*-*-elf* | *-*-sysv4* | *-*-unixware* | *-*-eabi* | hppa*64*-*-hpux* \
|
|
| *-*-linux* | *-*-gnu* | frv-*-uclinux* | *-*-irix5* | *-*-irix6* \
|
|
| *-*-netbsd* | *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* \
|
|
- | *-*-solaris2* | *-*-nto* | *-*-nacl*)
|
|
+ | *-*-solaris2* | *-*-nto* | *-*-nacl* | sw_64-*-*-*)
|
|
case "${target}" in
|
|
*-*-linux*aout* | *-*-linux*oldld*)
|
|
;;
|
|
@@ -350,7 +350,7 @@ case "${ENABLE_GOLD}" in
|
|
# Check for target supported by gold.
|
|
case "${target}" in
|
|
i?86-*-* | x86_64-*-* | sparc*-*-* | powerpc*-*-* | arm*-*-* \
|
|
- | aarch64*-*-* | tilegx*-*-* | mips*-*-* | s390*-*-*)
|
|
+ | aarch64*-*-* | tilegx*-*-* | mips*-*-* | s390*-*-* | sw_64-*-*-*)
|
|
configdirs="$configdirs gold"
|
|
if test x${ENABLE_GOLD} = xdefault; then
|
|
default_ld=gold
|
|
@@ -722,6 +722,9 @@ case "${target}" in
|
|
alpha*-*-*vms*)
|
|
noconfigdirs="$noconfigdirs target-libffi"
|
|
;;
|
|
+ sw_64*-*-*vms*)
|
|
+ noconfigdirs="$noconfigdirs target-libffi"
|
|
+ ;;
|
|
arm*-*-freebsd*)
|
|
noconfigdirs="$noconfigdirs target-libffi"
|
|
;;
|
|
@@ -853,6 +856,9 @@ case "${target}" in
|
|
alpha*-dec-osf*)
|
|
noconfigdirs="$noconfigdirs target-newlib target-libgloss"
|
|
;;
|
|
+ sw_64*-dec-osf*)
|
|
+ noconfigdirs="$noconfigdirs target-newlib target-libgloss"
|
|
+ ;;
|
|
i[[3456789]]86-*-linux*)
|
|
# This section makes it possible to build newlib natively on linux.
|
|
# If we are using a cross compiler then don't configure newlib.
|
|
@@ -985,6 +991,18 @@ case "${target}" in
|
|
# newlib is not 64 bit ready
|
|
noconfigdirs="$noconfigdirs target-newlib target-libgloss"
|
|
;;
|
|
+ sw_64*-dec-osf*)
|
|
+ # ld works, but does not support shared libraries.
|
|
+ # gas doesn't generate exception information.
|
|
+ noconfigdirs="$noconfigdirs gas ld"
|
|
+ ;;
|
|
+ sw_64*-*-*vms*)
|
|
+ noconfigdirs="$noconfigdirs gdb target-newlib target-libgloss"
|
|
+ ;;
|
|
+ sw_64*-*-*)
|
|
+ # newlib is not 64 bit ready
|
|
+ noconfigdirs="$noconfigdirs target-newlib target-libgloss"
|
|
+ ;;
|
|
sh*-*-pe|mips*-*-pe|*arm-wince-pe)
|
|
noconfigdirs="$noconfigdirs tcl tk itcl libgui sim"
|
|
;;
|
|
@@ -1229,6 +1247,9 @@ case "${host}" in
|
|
alpha*-linux*)
|
|
host_makefile_frag="config/mh-alpha-linux"
|
|
;;
|
|
+ sw_64*-linux*)
|
|
+ host_makefile_frag="config/mh-sw_64-linux"
|
|
+ ;;
|
|
hppa*-hp-hpux10*)
|
|
host_makefile_frag="config/mh-pa-hpux10"
|
|
;;
|
|
@@ -2608,6 +2629,15 @@ case $target in
|
|
;;
|
|
esac
|
|
|
|
+sw_64ieee_frag=/dev/null
|
|
+case $target in
|
|
+ sw_64*-*-*)
|
|
+ # This just makes sure to use the -mieee option to build target libs.
|
|
+ # This should probably be set individually by each library.
|
|
+ sw_64ieee_frag="config/mt-sw_64ieee"
|
|
+ ;;
|
|
+esac
|
|
+
|
|
# If --enable-target-optspace always use -Os instead of -O2 to build
|
|
# the target libraries, similarly if it is not specified, use -Os
|
|
# on selected platforms.
|
|
@@ -3307,7 +3337,7 @@ case "${target}" in
|
|
esac
|
|
|
|
# Makefile fragments.
|
|
-for frag in host_makefile_frag target_makefile_frag alphaieee_frag ospace_frag;
|
|
+for frag in host_makefile_frag target_makefile_frag alphaieee_frag sw_64ieee_frag ospace_frag;
|
|
do
|
|
eval fragval=\$$frag
|
|
if test $fragval != /dev/null; then
|
|
@@ -3317,6 +3347,7 @@ done
|
|
AC_SUBST_FILE(host_makefile_frag)
|
|
AC_SUBST_FILE(target_makefile_frag)
|
|
AC_SUBST_FILE(alphaieee_frag)
|
|
+AC_SUBST_FILE(sw_64ieee_frag)
|
|
AC_SUBST_FILE(ospace_frag)
|
|
|
|
# Miscellanea: directories, flags, etc.
|
|
diff --git a/elfcpp/elfcpp.h b/elfcpp/elfcpp.h
|
|
index fdee7ce3..98ea57ce 100644
|
|
--- a/elfcpp/elfcpp.h
|
|
+++ b/elfcpp/elfcpp.h
|
|
@@ -279,6 +279,7 @@ enum EM
|
|
EM_FRV = 0x5441,
|
|
// Infineon Technologies 16-bit microcontroller with C166-V2 core.
|
|
EM_X16X = 0x4688,
|
|
+ EM_SW_64 = 0x9916,
|
|
// Xstorym16
|
|
EM_XSTORMY16 = 0xad45,
|
|
// Renesas M32C
|
|
@@ -792,6 +793,7 @@ enum DT
|
|
// symbol in the symbol table.
|
|
DT_SPARC_REGISTER = 0x70000001,
|
|
|
|
+ DT_SW_64_PLTRO = 0x70000000,
|
|
// MIPS specific dynamic array tags.
|
|
// 32 bit version number for runtime linker interface.
|
|
DT_MIPS_RLD_VERSION = 0x70000001,
|
|
diff --git a/gas/Makefile.am b/gas/Makefile.am
|
|
index 3ad8422d..6d7d981b 100644
|
|
--- a/gas/Makefile.am
|
|
+++ b/gas/Makefile.am
|
|
@@ -132,6 +132,7 @@ HFILES = \
|
|
TARGET_CPU_CFILES = \
|
|
config/tc-aarch64.c \
|
|
config/tc-alpha.c \
|
|
+ config/tc-sw_64.c \
|
|
config/tc-arc.c \
|
|
config/tc-arm.c \
|
|
config/tc-avr.c \
|
|
@@ -207,6 +208,7 @@ TARGET_CPU_CFILES = \
|
|
TARGET_CPU_HFILES = \
|
|
config/tc-aarch64.h \
|
|
config/tc-alpha.h \
|
|
+ config/tc-sw_64.h \
|
|
config/tc-arc.h \
|
|
config/tc-arm.h \
|
|
config/tc-avr.h \
|
|
diff --git a/gas/Makefile.in b/gas/Makefile.in
|
|
index 62439483..ba765d1c 100644
|
|
--- a/gas/Makefile.in
|
|
+++ b/gas/Makefile.in
|
|
@@ -521,6 +521,7 @@ HFILES = \
|
|
TARGET_CPU_CFILES = \
|
|
config/tc-aarch64.c \
|
|
config/tc-alpha.c \
|
|
+ config/tc-sw_64.c \
|
|
config/tc-arc.c \
|
|
config/tc-arm.c \
|
|
config/tc-avr.c \
|
|
@@ -596,6 +597,7 @@ TARGET_CPU_CFILES = \
|
|
TARGET_CPU_HFILES = \
|
|
config/tc-aarch64.h \
|
|
config/tc-alpha.h \
|
|
+ config/tc-sw_64.h \
|
|
config/tc-arc.h \
|
|
config/tc-arm.h \
|
|
config/tc-avr.h \
|
|
@@ -893,6 +895,8 @@ config/tc-aarch64.$(OBJEXT): config/$(am__dirstamp) \
|
|
config/$(DEPDIR)/$(am__dirstamp)
|
|
config/tc-alpha.$(OBJEXT): config/$(am__dirstamp) \
|
|
config/$(DEPDIR)/$(am__dirstamp)
|
|
+config/tc-sw_64.$(OBJEXT): config/$(am__dirstamp) \
|
|
+ config/$(DEPDIR)/$(am__dirstamp)
|
|
config/tc-arc.$(OBJEXT): config/$(am__dirstamp) \
|
|
config/$(DEPDIR)/$(am__dirstamp)
|
|
config/tc-arm.$(OBJEXT): config/$(am__dirstamp) \
|
|
@@ -1160,6 +1164,7 @@ distclean-compile:
|
|
@AMDEP_TRUE@@am__include@ @am__quote@config/$(DEPDIR)/rx-parse.Po@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@config/$(DEPDIR)/tc-aarch64.Po@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@config/$(DEPDIR)/tc-alpha.Po@am__quote@
|
|
+@AMDEP_TRUE@@am__include@ @am__quote@config/$(DEPDIR)/tc-sw_64.Po@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@config/$(DEPDIR)/tc-arc.Po@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@config/$(DEPDIR)/tc-arm.Po@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@config/$(DEPDIR)/tc-avr.Po@am__quote@
|
|
diff --git a/gas/as.c b/gas/as.c
|
|
index 7de8af24..e32b4c2f 100644
|
|
--- a/gas/as.c
|
|
+++ b/gas/as.c
|
|
@@ -232,9 +232,10 @@ print_version_id (void)
|
|
if (printed)
|
|
return;
|
|
printed = 1;
|
|
+ char *VERSION_SW="2.37-v1.0";
|
|
|
|
fprintf (stderr, _("GNU assembler version %s (%s) using BFD version %s\n"),
|
|
- VERSION, TARGET_ALIAS, BFD_VERSION_STRING);
|
|
+ VERSION_SW, TARGET_ALIAS, BFD_VERSION_STRING);
|
|
}
|
|
|
|
#ifdef DEFAULT_FLAG_COMPRESS_DEBUG
|
|
@@ -503,7 +504,8 @@ parse_args (int * pargc, char *** pargv)
|
|
OPTION_WARN_FATAL,
|
|
OPTION_COMPRESS_DEBUG,
|
|
OPTION_NOCOMPRESS_DEBUG,
|
|
- OPTION_NO_PAD_SECTIONS /* = STD_BASE + 40 */
|
|
+ OPTION_NO_PAD_SECTIONS, /* = STD_BASE + 40 */
|
|
+ OPTION_ORG_BACKWARDS
|
|
/* When you add options here, check that they do
|
|
not collide with OPTION_MD_BASE. See as.h. */
|
|
};
|
|
@@ -581,6 +583,7 @@ parse_args (int * pargc, char *** pargv)
|
|
,{"target-help", no_argument, NULL, OPTION_TARGET_HELP}
|
|
,{"traditional-format", no_argument, NULL, OPTION_TRADITIONAL_FORMAT}
|
|
,{"warn", no_argument, NULL, OPTION_WARN}
|
|
+ ,{"pal", no_argument, NULL, OPTION_ORG_BACKWARDS}
|
|
};
|
|
|
|
/* Construct the option lists from the standard list and the target
|
|
@@ -683,6 +686,12 @@ parse_args (int * pargc, char *** pargv)
|
|
flag_traditional_format = 1;
|
|
break;
|
|
|
|
+#ifdef TARGET_SW_64
|
|
+ case OPTION_ORG_BACKWARDS:
|
|
+ pal_org_backwrards =1;
|
|
+ break;
|
|
+#endif
|
|
+
|
|
case OPTION_VERSION:
|
|
/* This output is intended to follow the GNU standards document. */
|
|
printf (_("GNU assembler %s\n"), BFD_VERSION_STRING);
|
|
diff --git a/gas/as.h b/gas/as.h
|
|
index 14a768f8..98564652 100644
|
|
--- a/gas/as.h
|
|
+++ b/gas/as.h
|
|
@@ -344,6 +344,12 @@ COMMON int linkrelax;
|
|
|
|
COMMON int do_not_pad_sections_to_alignment;
|
|
|
|
+#ifdef TARGET_SW_64
|
|
+/* Support -pal for hmcode. */
|
|
+COMMON int pal_org_backwrards;
|
|
+#endif
|
|
+
|
|
+
|
|
/* TRUE if we should produce a listing. */
|
|
extern int listing;
|
|
|
|
diff --git a/gas/config.in b/gas/config.in
|
|
index e243fd27..c68a0443 100644
|
|
--- a/gas/config.in
|
|
+++ b/gas/config.in
|
|
@@ -325,3 +325,12 @@
|
|
|
|
/* Define to 1 if you need to in order for `stat' and other things to work. */
|
|
#undef _POSIX_SOURCE
|
|
+
|
|
+/* Default CPU for SW_64 targets. */
|
|
+#undef SW_CPU_STRING_DEFAULT
|
|
+
|
|
+/*Define Git verion for elf flags*/
|
|
+#undef GIT_REVISION
|
|
+
|
|
+#undef TARGET_SW_64
|
|
+
|
|
diff --git a/gas/config/obj-ecoff.c b/gas/config/obj-ecoff.c
|
|
index adc70778..e6156250 100644
|
|
--- a/gas/config/obj-ecoff.c
|
|
+++ b/gas/config/obj-ecoff.c
|
|
@@ -128,6 +128,16 @@ ecoff_frob_file_before_fix (void)
|
|
fprmask = alpha_fprmask;
|
|
#endif
|
|
|
|
+#ifdef TC_SW_64
|
|
+ sw_64_frob_ecoff_data ();
|
|
+
|
|
+ if (! bfd_ecoff_set_gp_value (stdoutput, sw_64_gp_value))
|
|
+ as_fatal (_("Can't set GP value"));
|
|
+
|
|
+ gprmask = sw_64_gprmask;
|
|
+ fprmask = sw_64_fprmask;
|
|
+#endif
|
|
+
|
|
if (! bfd_ecoff_set_regmasks (stdoutput, gprmask, fprmask, cprmask))
|
|
as_fatal (_("Can't set register masks"));
|
|
}
|
|
diff --git a/gas/config/obj-elf.c b/gas/config/obj-elf.c
|
|
index e93d59cb..5e870c51 100644
|
|
--- a/gas/config/obj-elf.c
|
|
+++ b/gas/config/obj-elf.c
|
|
@@ -40,6 +40,12 @@
|
|
#include "elf/alpha.h"
|
|
#endif
|
|
|
|
+#ifdef TARGET_SW_64
|
|
+#ifdef TC_SW_64
|
|
+#include "elf/sw_64.h"
|
|
+#endif
|
|
+#endif
|
|
+
|
|
#ifdef TC_MIPS
|
|
#include "elf/mips.h"
|
|
#endif
|
|
diff --git a/gas/config/obj-elf.h b/gas/config/obj-elf.h
|
|
index d1fd3152..f54817fc 100644
|
|
--- a/gas/config/obj-elf.h
|
|
+++ b/gas/config/obj-elf.h
|
|
@@ -43,6 +43,11 @@
|
|
extern int alpha_flag_mdebug;
|
|
#endif
|
|
|
|
+#ifdef TC_SW_64
|
|
+#define ECOFF_DEBUGGING (sw_64_flag_mdebug > 0)
|
|
+extern int sw_64_flag_mdebug;
|
|
+#endif
|
|
+
|
|
/* For now, always set ECOFF_DEBUGGING for a MIPS target. */
|
|
#ifdef TC_MIPS
|
|
#define ECOFF_DEBUGGING mips_flag_mdebug
|
|
diff --git a/gas/configure b/gas/configure
|
|
index 73750257..40af0cf5 100755
|
|
--- a/gas/configure
|
|
+++ b/gas/configure
|
|
@@ -12188,6 +12188,25 @@ _ACEOF
|
|
;;
|
|
esac
|
|
|
|
+ case ${cpu_type} in
|
|
+ sw_64 | sw_64sw*)
|
|
+ # Set sw_cpu to the name of the default CPU.
|
|
+ sw_cpu=$with_cpu
|
|
+ cpu_types=${with_cpu:2:4}
|
|
+cat >>confdefs.h <<_ACEOF
|
|
+#define SW_CPU_STRING_DEFAULT "${with_cpu}"
|
|
+_ACEOF
|
|
+
|
|
+# Check for git version if there was a github
|
|
+git_version=`git log -1 --format="%h"`
|
|
+git_short=${git_version:0:5}${cpu_types}"9"
|
|
+cat >> confdefs.h <<_ACEOF
|
|
+#define GIT_REVISION 0x$git_short
|
|
+#define TARGET_SW_64
|
|
+_ACEOF
|
|
+ ;;
|
|
+ esac
|
|
+
|
|
# Do we need the opcodes library?
|
|
case ${cpu_type} in
|
|
vax | tic30)
|
|
diff --git a/gas/configure.tgt b/gas/configure.tgt
|
|
index 6272067d..b7b67073 100644
|
|
--- a/gas/configure.tgt
|
|
+++ b/gas/configure.tgt
|
|
@@ -49,6 +49,7 @@ case ${cpu} in
|
|
aarch64) cpu_type=aarch64 endian=little arch=aarch64;;
|
|
aarch64_be) cpu_type=aarch64 endian=big arch=aarch64;;
|
|
alpha*) cpu_type=alpha ;;
|
|
+ sw_64*) cpu_type=sw_64 ;;
|
|
am33_2.0) cpu_type=mn10300 endian=little ;;
|
|
arc*eb) cpu_type=arc endian=big ;;
|
|
arm*be|arm*b) cpu_type=arm endian=big ;;
|
|
@@ -138,6 +139,13 @@ case ${generic_target} in
|
|
alpha-*-linux-*) fmt=elf em=linux ;;
|
|
alpha-*-netbsd* | alpha-*-openbsd*) fmt=elf em=nbsd ;;
|
|
|
|
+ sw_64-*-*vms*) fmt=evax ;;
|
|
+ sw_64-*-osf*) fmt=ecoff ;;
|
|
+ sw_64-*-linux*ecoff*) fmt=ecoff ;;
|
|
+ sw_64-*-linux-*) fmt=elf em=linux ;;
|
|
+ sw_64-*-netbsd*) fmt=elf em=nbsd ;;
|
|
+ sw_64-*-openbsd*) fmt=elf em=obsd ;;
|
|
+
|
|
arc-*-elf*) fmt=elf ;;
|
|
arc*-*-linux*) fmt=elf bfd_gas=yes ;;
|
|
|
|
@@ -435,7 +443,7 @@ esac
|
|
|
|
case ${cpu_type} in
|
|
aarch64 | alpha | arm | csky | i386 | ia64 | microblaze | mips | ns32k | \
|
|
- or1k | or1knd | pdp11 | ppc | riscv | sh | sparc | z80 | z8k)
|
|
+ or1k | or1knd | pdp11 | ppc | riscv | sh | sparc | z80 | z8k | sw_64)
|
|
bfd_gas=yes
|
|
;;
|
|
esac
|
|
diff --git a/gas/read.c b/gas/read.c
|
|
index 584867dc..2ebb9c30 100644
|
|
--- a/gas/read.c
|
|
+++ b/gas/read.c
|
|
@@ -2520,7 +2520,7 @@ bss_alloc (symbolS *symbolP, addressT size, unsigned int align)
|
|
subsegT current_subseg = now_subseg;
|
|
segT bss_seg = bss_section;
|
|
|
|
-#if defined (TC_MIPS) || defined (TC_ALPHA)
|
|
+#if defined (TC_MIPS) || defined (TC_ALPHA) || defined (TC_SW_64)
|
|
if (OUTPUT_FLAVOR == bfd_target_ecoff_flavour
|
|
|| OUTPUT_FLAVOR == bfd_target_elf_flavour)
|
|
{
|
|
diff --git a/gas/testsuite/gas/all/gas.exp b/gas/testsuite/gas/all/gas.exp
|
|
index 389634f6..fae2a2f2 100644
|
|
--- a/gas/testsuite/gas/all/gas.exp
|
|
+++ b/gas/testsuite/gas/all/gas.exp
|
|
@@ -57,6 +57,7 @@ if { ![istarget cris-*-*] && ![istarget crisv32-*-*]
|
|
# differences of two previously undefined symbols. Hence this test will
|
|
# not pass for these targets.
|
|
if { ![istarget alpha*-*-*vms*]
|
|
+ && ![istarget sw_64*-*-*vms*]
|
|
&& ![istarget am3*-*-*]
|
|
&& ![istarget avr-*-*]
|
|
&& ![istarget ft32-*-*]
|
|
@@ -120,6 +121,8 @@ if { ![is_aout_format] } {
|
|
}
|
|
alpha-*-*linux*ecoff { }
|
|
alpha-*-osf* { }
|
|
+ sw_64-*-*linux*ecoff { }
|
|
+ sw_64-*-osf* { }
|
|
hppa*-*-hpux* { }
|
|
mep-*-* { }
|
|
mmix-*-* { }
|
|
@@ -139,6 +142,7 @@ if { ![is_aout_format] } {
|
|
# pdp11 gets unexpected reloc types.
|
|
switch -glob $target_triplet {
|
|
alpha*-*-* { }
|
|
+ sw_64*-*-* { }
|
|
am3*-*-* { }
|
|
cr16*-*-* { }
|
|
crx*-*-* { }
|
|
@@ -360,6 +364,8 @@ proc test_cond {} {
|
|
switch -glob $target_triplet {
|
|
alpha-*-linux*ecoff { }
|
|
alpha-*-osf* { }
|
|
+ sw_64-*-linux*ecoff { }
|
|
+ sw_64-*-osf* { }
|
|
hppa*-*-* { }
|
|
*c4x*-*-* { }
|
|
*c54x*-*-* { }
|
|
@@ -431,6 +437,7 @@ if { ![istarget "pdp11-*-*"] } {
|
|
# .set works differently on some targets.
|
|
switch -glob $target_triplet {
|
|
alpha*-*-* { }
|
|
+ sw_64*-*-* { }
|
|
mips*-*-* { }
|
|
*c54x*-*-* { }
|
|
z80-*-* { }
|
|
diff --git a/gas/testsuite/gas/all/weakref1.d b/gas/testsuite/gas/all/weakref1.d
|
|
index 4c251640..895ec2d1 100644
|
|
--- a/gas/testsuite/gas/all/weakref1.d
|
|
+++ b/gas/testsuite/gas/all/weakref1.d
|
|
@@ -4,7 +4,8 @@
|
|
# pdp11 lacks .long
|
|
# darwin (mach-o) reverses the order of relocs.
|
|
# the following must be present in all weakref1*.d
|
|
-#notarget: alpha*-*-osf* *-*-ecoff pdp11-*-aout *-*-darwin*
|
|
+#notarget: alpha*-*-osf* sw_64*-*-osf* *-*-ecoff pdp11-*-aout *-*-darwin*
|
|
+
|
|
#xfail: nds32*-*-*
|
|
|
|
#...
|
|
diff --git a/gas/testsuite/gas/all/weakref1g.d b/gas/testsuite/gas/all/weakref1g.d
|
|
index eb3f31d5..013d2521 100644
|
|
--- a/gas/testsuite/gas/all/weakref1g.d
|
|
+++ b/gas/testsuite/gas/all/weakref1g.d
|
|
@@ -4,7 +4,7 @@
|
|
# see weakref1.d for comments on the notargets
|
|
# ecoff (OSF/alpha) lacks .weak support
|
|
# pdp11 lacks .long
|
|
-#notarget: alpha*-*-osf* *-*-ecoff pdp11-*-aout
|
|
+#notarget: alpha*-*-osf* sw_64*-*-osf* *-*-ecoff pdp11-*-aout
|
|
|
|
# the rest of this file is generated with the following script:
|
|
# # script begin
|
|
diff --git a/gas/testsuite/gas/all/weakref1l.d b/gas/testsuite/gas/all/weakref1l.d
|
|
index 3a42c00a..c573d215 100644
|
|
--- a/gas/testsuite/gas/all/weakref1l.d
|
|
+++ b/gas/testsuite/gas/all/weakref1l.d
|
|
@@ -3,7 +3,7 @@
|
|
#source: weakref1.s
|
|
# aix drops local symbols
|
|
# see weakref1.d for comments on the other notargets
|
|
-#notarget: [is_xcoff_format] alpha*-*-osf* *-*-ecoff pdp11-*-aout
|
|
+#notarget: [is_xcoff_format] alpha*-*-osf* sw_64*-*-osf* *-*-ecoff pdp11-*-aout
|
|
|
|
# the rest of this file is generated with the following script:
|
|
# # script begin
|
|
diff --git a/gas/testsuite/gas/all/weakref1u.d b/gas/testsuite/gas/all/weakref1u.d
|
|
index 5b8d8489..ae3c2c6e 100644
|
|
--- a/gas/testsuite/gas/all/weakref1u.d
|
|
+++ b/gas/testsuite/gas/all/weakref1u.d
|
|
@@ -3,7 +3,7 @@
|
|
#source: weakref1.s
|
|
# aout turns undefined into *ABS* symbols.
|
|
# see weakref1.d for comments on the other notargets
|
|
-#notarget: *-*-*aout ns32k-*-* alpha*-*-osf* *-*-ecoff
|
|
+#notarget: *-*-*aout ns32k-*-* alpha*-*-osf* sw_64*-*-osf* *-*-ecoff
|
|
|
|
# the rest of this file is generated with the following script:
|
|
# # script begin
|
|
diff --git a/gas/testsuite/gas/all/weakref1w.d b/gas/testsuite/gas/all/weakref1w.d
|
|
index 4cae455e..1333da0c 100644
|
|
--- a/gas/testsuite/gas/all/weakref1w.d
|
|
+++ b/gas/testsuite/gas/all/weakref1w.d
|
|
@@ -2,7 +2,7 @@
|
|
#name: weakref tests, weak undefined syms
|
|
#source: weakref1.s
|
|
# see weakref1.d for comments on the notargets
|
|
-#notarget: alpha*-*-osf* *-*-ecoff pdp11-*-aout
|
|
+#notarget: alpha*-*-osf* sw_64*-*-osf* *-*-ecoff pdp11-*-aout
|
|
|
|
# the rest of this file is generated with the following script:
|
|
# # script begin
|
|
diff --git a/gas/testsuite/gas/elf/common5a.d b/gas/testsuite/gas/elf/common5a.d
|
|
index ec136b48..d5007fe2 100644
|
|
--- a/gas/testsuite/gas/elf/common5a.d
|
|
+++ b/gas/testsuite/gas/elf/common5a.d
|
|
@@ -3,3 +3,5 @@
|
|
#error_output: common5a.l
|
|
#notarget: alpha-*-*
|
|
# The Alpha target uses its own .set pseudo-insn.
|
|
+#notarget: sw_64-*-*
|
|
+# The sw_64 target uses its own .set pseudo-insn.
|
|
diff --git a/gas/testsuite/gas/elf/common5b.d b/gas/testsuite/gas/elf/common5b.d
|
|
index 9369c2df..3ad43996 100644
|
|
--- a/gas/testsuite/gas/elf/common5b.d
|
|
+++ b/gas/testsuite/gas/elf/common5b.d
|
|
@@ -3,3 +3,5 @@
|
|
#error_output: common5b.l
|
|
#notarget: alpha-*-*
|
|
# The Alpha target uses its own .set pseudo-insn.
|
|
+#notarget: sw_64-*-*
|
|
+# The sw_64 target uses its own .set pseudo-insn.
|
|
diff --git a/gas/testsuite/gas/elf/common5c.d b/gas/testsuite/gas/elf/common5c.d
|
|
index cbb3fc68..320f9486 100644
|
|
--- a/gas/testsuite/gas/elf/common5c.d
|
|
+++ b/gas/testsuite/gas/elf/common5c.d
|
|
@@ -3,3 +3,5 @@
|
|
#error_output: common5a.l
|
|
#notarget: alpha-*-*
|
|
# The Alpha target uses its own .set pseudo-insn.
|
|
+#notarget: sw_64-*-*
|
|
+# The sw_64 target uses its own .set pseudo-insn.
|
|
diff --git a/gas/testsuite/gas/elf/common5d.d b/gas/testsuite/gas/elf/common5d.d
|
|
index 7b11fa24..eb7e29a5 100644
|
|
--- a/gas/testsuite/gas/elf/common5d.d
|
|
+++ b/gas/testsuite/gas/elf/common5d.d
|
|
@@ -3,3 +3,5 @@
|
|
#error_output: common5b.l
|
|
#notarget: alpha-*-*
|
|
# The Alpha target uses its own .set pseudo-insn.
|
|
+#notarget: sw_64-*-*
|
|
+# The sw_64 target uses its own .set pseudo-insn.
|
|
diff --git a/gas/testsuite/gas/elf/elf.exp b/gas/testsuite/gas/elf/elf.exp
|
|
index 23804758..271e3160 100644
|
|
--- a/gas/testsuite/gas/elf/elf.exp
|
|
+++ b/gas/testsuite/gas/elf/elf.exp
|
|
@@ -164,6 +164,7 @@ if { [is_elf_format] } then {
|
|
}
|
|
switch -glob $target_triplet {
|
|
alpha*-*-* { }
|
|
+ sw_64*-*-* { }
|
|
am3*-*-* { }
|
|
*c54x*-*-* { }
|
|
cr16*-*-* { }
|
|
@@ -216,7 +217,7 @@ if { [is_elf_format] } then {
|
|
run_elf_list_test "section5" "" "-al -Z" "-SW" "| grep \" \\\\.test\\\[0-9\\\]\""
|
|
}
|
|
run_dump_test "struct"
|
|
- if { ![istarget "alpha*-*-*"] } then {
|
|
+ if {! [istarget "alpha*-*-*"] && ! [istarget "sw_64*-*-*"]} then {
|
|
# The alpha port uses .set for state, e.g. nomacro.
|
|
run_dump_test "symtab"
|
|
}
|
|
@@ -242,7 +243,10 @@ if { [is_elf_format] } then {
|
|
run_elf_list_test "type-noifunc" "" "" "-s" "| grep \"1 *\\\[FONTC\\\]\""
|
|
}
|
|
} else {
|
|
- run_dump_test ifunc-1
|
|
+ #if {! [istarget "sw_64*-*-*"] } then {
|
|
+ # run_dump_test ifunc-1
|
|
+ #}
|
|
+ run_dump_test ifunc-1
|
|
run_elf_list_test "type" "" "" "-s" "| grep \"1 *\\\[FIONTCU\\\]\""
|
|
run_elf_list_test "type-2" "" "--warn" "-s" "| grep \"0 *\\\[FIONT\\\]\""
|
|
}
|
|
@@ -308,6 +312,9 @@ if { [is_elf_format] } then {
|
|
run_dump_test "bad-group"
|
|
run_dump_test "pr27355"
|
|
|
|
+ #if { ![istarget "sw_64*-*-*"]} then {
|
|
+ # run_dump_test "syms"
|
|
+ #}
|
|
run_dump_test "syms"
|
|
run_dump_test "startof"
|
|
|
|
@@ -322,6 +329,9 @@ if { [is_elf_format] } then {
|
|
run_dump_test "common3b"
|
|
run_dump_test "common4a"
|
|
run_dump_test "common4b"
|
|
+ }
|
|
+
|
|
+ if { ![istarget "*-*-hpux*"]} then {
|
|
run_dump_test "common5a"
|
|
run_dump_test "common5b"
|
|
run_dump_test "common5c"
|
|
diff --git a/gas/testsuite/gas/elf/ifunc-1.d b/gas/testsuite/gas/elf/ifunc-1.d
|
|
index 5b2657b0..c558f2d2 100644
|
|
--- a/gas/testsuite/gas/elf/ifunc-1.d
|
|
+++ b/gas/testsuite/gas/elf/ifunc-1.d
|
|
@@ -1,6 +1,7 @@
|
|
#readelf: -s
|
|
#name: .set with IFUNC
|
|
#notarget: alpha*
|
|
+#notarget: sw_64*
|
|
|
|
#...
|
|
[ ]+[0-9]+:[ ]+[0-9a-f]+[ ]+[0-9]+[ ]+IFUNC[ ]+GLOBAL[ ]+DEFAULT[ ]+[1-9] __GI_foo
|
|
diff --git a/gas/testsuite/gas/elf/symtab.d b/gas/testsuite/gas/elf/symtab.d
|
|
index 68e5e7ca..7ab6c468 100644
|
|
--- a/gas/testsuite/gas/elf/symtab.d
|
|
+++ b/gas/testsuite/gas/elf/symtab.d
|
|
@@ -1,6 +1,7 @@
|
|
# The Alpha has its own version of .set.
|
|
# hppa SOM does not output non-global absolute symbols.
|
|
#xfail: alpha-*-* [is_som_format]
|
|
+#xfail: sw_64-*-* [is_som_format]
|
|
#readelf: -s
|
|
#name: .set with expression
|
|
|
|
diff --git a/gas/write.c b/gas/write.c
|
|
index 7dc78b7f..0e2624e5 100644
|
|
--- a/gas/write.c
|
|
+++ b/gas/write.c
|
|
@@ -554,6 +554,53 @@ relax_seg (bfd *abfd ATTRIBUTE_UNUSED, asection *sec, void *xxx)
|
|
info->changed = 1;
|
|
}
|
|
|
|
+#ifdef TARGET_SW_64
|
|
+static void
|
|
+sort_frchain (frag_list)
|
|
+fragS *frag_list;
|
|
+{
|
|
+ fragS *fragp, *fragc, *fragi;
|
|
+ long r;
|
|
+ for (fragp = frag_list;fragp;)
|
|
+ {
|
|
+ fragc=fragp;
|
|
+ if (fragp->fr_next)
|
|
+ fragp = fragp->fr_next;
|
|
+ else
|
|
+ /* the end of the frag_list. */
|
|
+ break;
|
|
+ r = ((long )fragp->fr_address - (long )fragc->fr_address - fragc->fr_fix) ;
|
|
+ if ( r < 0 )
|
|
+ {
|
|
+ /*adjust the last fill frag's address ,but don't insert back,changed by WCH20080921. */
|
|
+ if (fragp->fr_type == rs_fill && fragp->fr_next == 0)
|
|
+ {
|
|
+ fragp->fr_address=fragp->last_fr_address=fragc->fr_address+
|
|
+ fragc->fr_fix+fragc->fr_offset;
|
|
+ continue;
|
|
+ }
|
|
+
|
|
+ fragc->fr_next = fragp->fr_next;
|
|
+ for (fragi = frag_list; fragi != fragc; fragi=fragi->fr_next)
|
|
+ {
|
|
+ r = (fragi->fr_next->fr_address - fragp->fr_address - fragp->fr_fix) ;
|
|
+ if (r >= 0)
|
|
+ {
|
|
+ fragp->fr_next = fragi->fr_next;
|
|
+ fragi->fr_next = fragp;
|
|
+ fragp = fragc;
|
|
+ break;
|
|
+ }
|
|
+ }
|
|
+ if (fragi == fragc)
|
|
+ {
|
|
+ as_bad_where (fragp->fr_file,fragp->fr_line,"ERR,can't insert the node!\n");
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+}
|
|
+#endif
|
|
+
|
|
static void
|
|
size_seg (bfd *abfd ATTRIBUTE_UNUSED, asection *sec, void *xxx ATTRIBUTE_UNUSED)
|
|
{
|
|
@@ -566,6 +613,10 @@ size_seg (bfd *abfd ATTRIBUTE_UNUSED, asection *sec, void *xxx ATTRIBUTE_UNUSED)
|
|
subseg_change (sec, 0);
|
|
|
|
seginfo = seg_info (sec);
|
|
+#ifdef TARGET_SW_64
|
|
+ if (pal_org_backwrards)
|
|
+ sort_frchain (seginfo->frchainP->frch_root);
|
|
+#endif
|
|
if (seginfo && seginfo->frchainP)
|
|
{
|
|
for (fragp = seginfo->frchainP->frch_root; fragp; fragp = fragp->fr_next)
|
|
@@ -2995,7 +3046,12 @@ relax_segment (struct frag *segment_frag_root, segT segment, int pass)
|
|
/* Growth may be negative, but variable part of frag
|
|
cannot have fewer than 0 chars. That is, we can't
|
|
.org backwards. */
|
|
- if ((offsetT) (address + fragP->fr_fix) > target)
|
|
+
|
|
+#ifdef TARGET_SW_64
|
|
+ if (((offsetT) (address + fragP->fr_fix) > target) && !pal_org_backwrards)
|
|
+#else
|
|
+ if ((offsetT) (address + fragP->fr_fix) > target)
|
|
+#endif
|
|
{
|
|
growth = 0;
|
|
|
|
diff --git a/gold/Makefile.am b/gold/Makefile.am
|
|
index 1947c18e..68dc49ce 100644
|
|
--- a/gold/Makefile.am
|
|
+++ b/gold/Makefile.am
|
|
@@ -173,13 +173,13 @@ diststuff: $(EXTRA_DIST)
|
|
|
|
TARGETSOURCES = \
|
|
i386.cc x86_64.cc sparc.cc powerpc.cc arm.cc arm-reloc-property.cc tilegx.cc \
|
|
- mips.cc aarch64.cc aarch64-reloc-property.cc s390.cc
|
|
+ mips.cc aarch64.cc aarch64-reloc-property.cc s390.cc sw_64.cc
|
|
|
|
ALL_TARGETOBJS = \
|
|
i386.$(OBJEXT) x86_64.$(OBJEXT) sparc.$(OBJEXT) powerpc.$(OBJEXT) \
|
|
arm.$(OBJEXT) arm-reloc-property.$(OBJEXT) tilegx.$(OBJEXT) \
|
|
mips.$(OBJEXT) aarch64.$(OBJEXT) aarch64-reloc-property.$(OBJEXT) \
|
|
- s390.$(OBJEXT)
|
|
+ s390.$(OBJEXT) sw_64.$(OBJEXT)
|
|
|
|
libgold_a_SOURCES = $(CCFILES) $(HFILES) $(YFILES) $(DEFFILES)
|
|
libgold_a_LIBADD = $(LIBOBJS)
|
|
diff --git a/gold/Makefile.in b/gold/Makefile.in
|
|
index 9fd21214..8c2557a0 100644
|
|
--- a/gold/Makefile.in
|
|
+++ b/gold/Makefile.in
|
|
@@ -792,13 +792,13 @@ DEFFILES = arm-reloc.def aarch64-reloc.def
|
|
EXTRA_DIST = yyscript.c yyscript.h
|
|
TARGETSOURCES = \
|
|
i386.cc x86_64.cc sparc.cc powerpc.cc arm.cc arm-reloc-property.cc tilegx.cc \
|
|
- mips.cc aarch64.cc aarch64-reloc-property.cc s390.cc
|
|
+ mips.cc aarch64.cc aarch64-reloc-property.cc s390.cc sw_64.cc
|
|
|
|
ALL_TARGETOBJS = \
|
|
i386.$(OBJEXT) x86_64.$(OBJEXT) sparc.$(OBJEXT) powerpc.$(OBJEXT) \
|
|
arm.$(OBJEXT) arm-reloc-property.$(OBJEXT) tilegx.$(OBJEXT) \
|
|
mips.$(OBJEXT) aarch64.$(OBJEXT) aarch64-reloc-property.$(OBJEXT) \
|
|
- s390.$(OBJEXT)
|
|
+ s390.$(OBJEXT) sw_64.$(OBJEXT)
|
|
|
|
libgold_a_SOURCES = $(CCFILES) $(HFILES) $(YFILES) $(DEFFILES)
|
|
libgold_a_LIBADD = $(LIBOBJS)
|
|
@@ -1089,6 +1089,7 @@ distclean-compile:
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapfile.Po@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/merge.Po@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mips.Po@am__quote@
|
|
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sw_64.Po@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nacl.Po@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/object.Po@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/options.Po@am__quote@
|
|
diff --git a/gold/configure b/gold/configure
|
|
index b9f062b6..340b92f4 100755
|
|
--- a/gold/configure
|
|
+++ b/gold/configure
|
|
@@ -731,6 +731,8 @@ DEFAULT_TARGET_ARM_FALSE
|
|
DEFAULT_TARGET_ARM_TRUE
|
|
DEFAULT_TARGET_AARCH64_FALSE
|
|
DEFAULT_TARGET_AARCH64_TRUE
|
|
+DEFAULT_TARGET_SW_64_FALSE
|
|
+DEFAULT_TARGET_SW_64_TRUE
|
|
PLUGINS_FALSE
|
|
PLUGINS_TRUE
|
|
installed_linker
|
|
@@ -5318,6 +5320,14 @@ else
|
|
DEFAULT_TARGET_MIPS_FALSE=
|
|
fi
|
|
|
|
+ if test "$targ_obj" = "sw_64"; then
|
|
+ DEFAULT_TARGET_SW_64_TRUE=
|
|
+ DEFAULT_TARGET_SW_64_FALSE='#'
|
|
+else
|
|
+ DEFAULT_TARGET_SW_64_TRUE='#'
|
|
+ DEFAULT_TARGET_SW_64_FALSE=
|
|
+fi
|
|
+
|
|
DEFAULT_TARGET=${targ_obj}
|
|
|
|
fi
|
|
@@ -10425,6 +10435,10 @@ if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
|
|
as_fn_error $? "conditional \"AMDEP\" was never defined.
|
|
Usually this means the macro was only invoked conditionally." "$LINENO" 5
|
|
fi
|
|
+if test -z "${DEFAULT_TARGET_SW_64_TRUE}" && test -z "${DEFAULT_TARGET_SW_64_FALSE}"; then
|
|
+ as_fn_error $? "conditional \"DEFAULT_TARGET_SW_64\" was never defined.
|
|
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
|
|
+fi
|
|
if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
|
|
as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
|
|
Usually this means the macro was only invoked conditionally." "$LINENO" 5
|
|
diff --git a/gold/configure.ac b/gold/configure.ac
|
|
index 1716a779..2f371724 100644
|
|
--- a/gold/configure.ac
|
|
+++ b/gold/configure.ac
|
|
@@ -239,6 +239,7 @@ for targ in $target $canon_targets; do
|
|
test "$target_x86_64" = "yes" -o "$target_x32" = "yes")
|
|
AM_CONDITIONAL(DEFAULT_TARGET_TILEGX, test "$targ_obj" = "tilegx")
|
|
AM_CONDITIONAL(DEFAULT_TARGET_MIPS, test "$targ_obj" = "mips")
|
|
+ AM_CONDITIONAL(DEFAULT_TARGET_SW_64, test "$targ_obj" = "sw_64")
|
|
DEFAULT_TARGET=${targ_obj}
|
|
AC_SUBST(DEFAULT_TARGET)
|
|
fi
|
|
diff --git a/gold/configure.tgt b/gold/configure.tgt
|
|
index cac0866e..a32dd236 100644
|
|
--- a/gold/configure.tgt
|
|
+++ b/gold/configure.tgt
|
|
@@ -181,6 +181,12 @@ s390x-*-*)
|
|
targ_big_endian=true
|
|
targ_extra_big_endian=false
|
|
;;
|
|
+sw_64*-*-*)
|
|
+ targ_obj=sw_64
|
|
+ targ_machine=EM_SW_64
|
|
+ targ_size=64
|
|
+ targ_big_endian=false
|
|
+ ;;
|
|
*)
|
|
targ_obj=UNKNOWN
|
|
;;
|
|
diff --git a/gold/reloc.h b/gold/reloc.h
|
|
index 5f1d382a..0b7f0e5b 100644
|
|
--- a/gold/reloc.h
|
|
+++ b/gold/reloc.h
|
|
@@ -239,6 +239,7 @@ class Relocatable_relocs
|
|
RELOC_ADJUST_FOR_SECTION_RELA,
|
|
// Like RELOC_ADJUST_FOR_SECTION_RELA but the addend should not be
|
|
// adjusted.
|
|
+ RELOC_ADJUST_FOR_SECTION_RELA_0,
|
|
RELOC_ADJUST_FOR_SECTION_0,
|
|
// Like RELOC_ADJUST_FOR_SECTION_RELA but the contents of the
|
|
// section need to be changed. The number indicates the number of
|
|
diff --git a/gold/target-reloc.h b/gold/target-reloc.h
|
|
index cd40bcc0..7f00f93d 100644
|
|
--- a/gold/target-reloc.h
|
|
+++ b/gold/target-reloc.h
|
|
@@ -845,6 +845,7 @@ relocate_relocs(
|
|
break;
|
|
|
|
case Relocatable_relocs::RELOC_ADJUST_FOR_SECTION_RELA:
|
|
+ case Relocatable_relocs::RELOC_ADJUST_FOR_SECTION_RELA_0:
|
|
case Relocatable_relocs::RELOC_ADJUST_FOR_SECTION_0:
|
|
case Relocatable_relocs::RELOC_ADJUST_FOR_SECTION_1:
|
|
case Relocatable_relocs::RELOC_ADJUST_FOR_SECTION_2:
|
|
@@ -916,7 +917,8 @@ relocate_relocs(
|
|
|
|
// Handle the reloc addend based on the strategy.
|
|
|
|
- if (strategy == Relocatable_relocs::RELOC_COPY)
|
|
+ if (strategy == Relocatable_relocs::RELOC_COPY
|
|
+ || Relocatable_relocs::RELOC_ADJUST_FOR_SECTION_RELA_0 == strategy)
|
|
{
|
|
if (Classify_reloc::sh_type == elfcpp::SHT_RELA)
|
|
Classify_reloc::put_r_addend(&reloc_write,
|
|
diff --git a/include/coff/ecoff.h b/include/coff/ecoff.h
|
|
index 2267b779..ae54eeea 100644
|
|
--- a/include/coff/ecoff.h
|
|
+++ b/include/coff/ecoff.h
|
|
@@ -47,6 +47,20 @@
|
|
/* A compressed version of an ALPHA_MAGIC file created by DEC's tools. */
|
|
#define ALPHA_MAGIC_COMPRESSED 0x188
|
|
|
|
+#ifdef TARGET_SW_64
|
|
+/* Sw_64 magic numbers used in filehdr. */
|
|
+#define SW_64_MAGIC 0x184
|
|
+#define SW_64_MAGIC_BSD 0x187
|
|
+/* A compressed version of an SW_64_MAGIC file created by DEC's tools. */
|
|
+#define SW_64_MAGIC_COMPRESSED 0x189
|
|
+#endif
|
|
+
|
|
+/* Alpha magic numbers used in filehdr. */
|
|
+#define SW_64_MAGIC 0x184
|
|
+#define SW_64_MAGIC_BSD 0x187
|
|
+/* A compressed version of an ALPHA_MAGIC file created by DEC's tools. */
|
|
+#define SW_64_MAGIC_COMPRESSED 0x189
|
|
+
|
|
/* Magic numbers used in a.out header. */
|
|
#define ECOFF_AOUT_OMAGIC 0407 /* not demand paged (ld -N). */
|
|
#define ECOFF_AOUT_ZMAGIC 0413 /* demand load format, eg normal ld output */
|
|
diff --git a/include/coff/pe.h b/include/coff/pe.h
|
|
index 558cf0e1..b19307a4 100644
|
|
--- a/include/coff/pe.h
|
|
+++ b/include/coff/pe.h
|
|
@@ -134,6 +134,10 @@
|
|
#define IMAGE_FILE_MACHINE_UNKNOWN 0x0000
|
|
#define IMAGE_FILE_MACHINE_ALPHA 0x0184
|
|
#define IMAGE_FILE_MACHINE_ALPHA64 0x0284
|
|
+#ifdef TARGET_SW_64
|
|
+#define IMAGE_FILE_MACHINE_SW_64 0x0184
|
|
+#define IMAGE_FILE_MACHINE_SW_6464 0x0284
|
|
+#endif
|
|
#define IMAGE_FILE_MACHINE_AM33 0x01d3
|
|
#define IMAGE_FILE_MACHINE_AMD64 0x8664
|
|
#define IMAGE_FILE_MACHINE_ARM 0x01c0
|
|
diff --git a/include/elf/common.h b/include/elf/common.h
|
|
index 0cca2867..be66b736 100644
|
|
--- a/include/elf/common.h
|
|
+++ b/include/elf/common.h
|
|
@@ -409,6 +409,11 @@
|
|
/* Alpha backend magic number. Written in the absence of an ABI. */
|
|
#define EM_ALPHA 0x9026
|
|
|
|
+#ifdef TARGET_SW_64
|
|
+/* Sw_64 backend magic number. Written in the absence of an ABI. */
|
|
+#define EM_SW_64 0x9916
|
|
+#endif
|
|
+
|
|
/* Cygnus M32R ELF backend. Written in the absence of an ABI. */
|
|
#define EM_CYGNUS_M32R 0x9041
|
|
|
|
diff --git a/include/longlong.h b/include/longlong.h
|
|
index c3e92e54..f1997361 100644
|
|
--- a/include/longlong.h
|
|
+++ b/include/longlong.h
|
|
@@ -191,6 +191,61 @@ extern UDItype __udiv_qrnnd (UDItype *, UDItype, UDItype, UDItype);
|
|
#endif /* __alpha_cix__ */
|
|
#endif /* __alpha */
|
|
|
|
+//__sw_64_cix__
|
|
+#if defined (__sw_64) && W_TYPE_SIZE == 64
|
|
+/* There is a bug in g before version 5 that
|
|
+ errors on __builtin_sw_64_umulh. */
|
|
+#if !defined(__cplusplus) || __GNUC__ >= 5
|
|
+#define umul_ppmm(ph, pl, m0, m1) \
|
|
+ do { \
|
|
+ UDItype __m0 = (m0), __m1 = (m1); \
|
|
+ (ph) = __builtin_sw_64_umulh (__m0, __m1); \
|
|
+ (pl) = __m0 * __m1; \
|
|
+ } while (0)
|
|
+#define UMUL_TIME 46
|
|
+#endif /* !c */
|
|
+#ifndef LONGLONG_STANDALONE
|
|
+#define udiv_qrnnd(q, r, n1, n0, d) \
|
|
+ do { UDItype __r; \
|
|
+ (q) = __udiv_qrnnd (&__r, (n1), (n0), (d)); \
|
|
+ (r) = __r; \
|
|
+ } while (0)
|
|
+extern UDItype __udiv_qrnnd (UDItype *, UDItype, UDItype, UDItype);
|
|
+#define UDIV_TIME 220
|
|
+#endif /* LONGLONG_STANDALONE */
|
|
+#ifdef __sw_64_cix__
|
|
+#define count_leading_zeros(COUNT,X) ((COUNT) = __builtin_clzl (X))
|
|
+#define count_trailing_zeros(COUNT,X) ((COUNT) = __builtin_ctzl (X))
|
|
+#define COUNT_LEADING_ZEROS_0 64
|
|
+#else
|
|
+#define count_leading_zeros(COUNT,X) \
|
|
+ do { \
|
|
+ UDItype __xr = (X), __t, __a; \
|
|
+ __t = __builtin_sw_64_cmpbge (0, __xr); \
|
|
+ __a = __clz_tab[__t ^ 0xff] - 1; \
|
|
+ __t = __builtin_sw_64_extbl (__xr, __a); \
|
|
+ (COUNT) = 64 - (__clz_tab[__t] __a*8); \
|
|
+ } while (0)
|
|
+#define count_trailing_zeros(COUNT,X) \
|
|
+ do { \
|
|
+ UDItype __xr = (X), __t, __a; \
|
|
+ __t = __builtin_sw_64_cmpbge (0, __xr); \
|
|
+ __t = ~__t & -~__t; \
|
|
+ __a = ((__t & 0xCC) != 0) * 2; \
|
|
+ __a = ((__t & 0xF0) != 0) * 4; \
|
|
+ __a = ((__t & 0xAA) != 0); \
|
|
+ __t = __builtin_sw_64_extbl (__xr, __a); \
|
|
+ __a <<= 3; \
|
|
+ __t &= -__t; \
|
|
+ __a = ((__t & 0xCC) != 0) * 2; \
|
|
+ __a = ((__t & 0xF0) != 0) * 4; \
|
|
+ __a = ((__t & 0xAA) != 0); \
|
|
+ (COUNT) = __a; \
|
|
+ } while (0)
|
|
+#endif /* __sw_64_cix__ */
|
|
+#endif /* __sw_64 */
|
|
+//sw_64
|
|
+
|
|
#if defined (__arc__) && W_TYPE_SIZE == 32
|
|
#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
|
|
__asm__ ("add.f %1, %4, %5\n\tadc %0, %2, %3" \
|
|
diff --git a/ld/Makefile.am b/ld/Makefile.am
|
|
index d912d265..37a73df0 100644
|
|
--- a/ld/Makefile.am
|
|
+++ b/ld/Makefile.am
|
|
@@ -159,6 +159,8 @@ ALL_EMULATION_SOURCES = \
|
|
eaixrs6.c \
|
|
ealpha.c \
|
|
ealphavms.c \
|
|
+ esw_64.c \
|
|
+ esw_64vms.c \
|
|
earcv2elf.c \
|
|
earcv2elfx.c \
|
|
earcelf.c \
|
|
@@ -429,6 +431,9 @@ ALL_64_EMULATION_SOURCES = \
|
|
eelf64alpha.c \
|
|
eelf64alpha_fbsd.c \
|
|
eelf64alpha_nbsd.c \
|
|
+ eelf64sw_64.c \
|
|
+ eelf64sw_64_fbsd.c \
|
|
+ eelf64sw_64_nbsd.c \
|
|
eelf64bmip.c \
|
|
eelf64btsmip.c \
|
|
eelf64btsmip_fbsd.c \
|
|
@@ -649,6 +654,8 @@ $(ALL_EMULATION_SOURCES) $(ALL_64_EMULATION_SOURCES): $(GEN_DEPENDS)
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eaixrs6.Pc@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ealpha.Pc@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ealphavms.Pc@am__quote@
|
|
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/esw_64.Pc@am__quote@
|
|
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/esw_64vms.Pc@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earcv2elf.Pc@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earcv2elfx.Pc@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earcelf.Pc@am__quote@
|
|
@@ -915,6 +922,9 @@ $(ALL_EMULATION_SOURCES) $(ALL_64_EMULATION_SOURCES): $(GEN_DEPENDS)
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64alpha.Pc@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64alpha_fbsd.Pc@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64alpha_nbsd.Pc@am__quote@
|
|
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64sw_64.Pc@am__quote@
|
|
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64sw_64_fbsd.Pc@am__quote@
|
|
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64sw_64_nbsd.Pc@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64bmip.Pc@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64btsmip.Pc@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64btsmip_fbsd.Pc@am__quote@
|
|
diff --git a/ld/Makefile.in b/ld/Makefile.in
|
|
index 4e88d0ec..ad27dc3e 100644
|
|
--- a/ld/Makefile.in
|
|
+++ b/ld/Makefile.in
|
|
@@ -648,6 +648,8 @@ ALL_EMULATION_SOURCES = \
|
|
eaixrs6.c \
|
|
ealpha.c \
|
|
ealphavms.c \
|
|
+ esw_64.c \
|
|
+ esw_64vms.c \
|
|
earcv2elf.c \
|
|
earcv2elfx.c \
|
|
earcelf.c \
|
|
@@ -917,6 +919,9 @@ ALL_64_EMULATION_SOURCES = \
|
|
eelf64alpha.c \
|
|
eelf64alpha_fbsd.c \
|
|
eelf64alpha_nbsd.c \
|
|
+ eelf64sw_64.c \
|
|
+ eelf64sw_64_fbsd.c \
|
|
+ eelf64sw_64_nbsd.c \
|
|
eelf64bmip.c \
|
|
eelf64btsmip.c \
|
|
eelf64btsmip_fbsd.c \
|
|
@@ -1252,6 +1257,8 @@ distclean-compile:
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eaixrs6.Po@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ealpha.Po@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ealphavms.Po@am__quote@
|
|
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/esw_64.Po@am__quote@
|
|
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/esw_64vms.Po@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earcelf.Po@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earclinux.Po@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earclinux_nps.Po@am__quote@
|
|
@@ -1409,6 +1416,9 @@ distclean-compile:
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64alpha.Po@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64alpha_fbsd.Po@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64alpha_nbsd.Po@am__quote@
|
|
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64sw_64.Po@am__quote@
|
|
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64sw_64_fbsd.Po@am__quote@
|
|
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64sw_64_nbsd.Po@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64bmip.Po@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64bpf.Po@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64briscv.Po@am__quote@
|
|
@@ -2306,6 +2316,8 @@ $(ALL_EMULATION_SOURCES) $(ALL_64_EMULATION_SOURCES): $(GEN_DEPENDS)
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eaixrs6.Pc@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ealpha.Pc@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ealphavms.Pc@am__quote@
|
|
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/esw_64.Pc@am__quote@
|
|
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/esw_64vms.Pc@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earcv2elf.Pc@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earcv2elfx.Pc@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/earcelf.Pc@am__quote@
|
|
@@ -2572,6 +2584,11 @@ $(ALL_EMULATION_SOURCES) $(ALL_64_EMULATION_SOURCES): $(GEN_DEPENDS)
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64alpha.Pc@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64alpha_fbsd.Pc@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64alpha_nbsd.Pc@am__quote@
|
|
+#ifndef LIJM20201117
|
|
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64sw_64.Pc@am__quote@
|
|
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64sw_64_fbsd.Pc@am__quote@
|
|
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64sw_64_nbsd.Pc@am__quote@
|
|
+#endif
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64bmip.Pc@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64btsmip.Pc@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64btsmip_fbsd.Pc@am__quote@
|
|
diff --git a/ld/config.in b/ld/config.in
|
|
index 26d55a00..173f2348 100644
|
|
--- a/ld/config.in
|
|
+++ b/ld/config.in
|
|
@@ -241,3 +241,5 @@
|
|
|
|
/* Define to 1 if you need to in order for `stat' and other things to work. */
|
|
#undef _POSIX_SOURCE
|
|
+
|
|
+#undef TARGET_SW_64
|
|
diff --git a/ld/configure b/ld/configure
|
|
index e287d291..06d7ab1f 100755
|
|
--- a/ld/configure
|
|
+++ b/ld/configure
|
|
@@ -15376,6 +15376,13 @@ else
|
|
esac
|
|
fi
|
|
|
|
+case "${target}" in
|
|
+ sw_64-*-*)
|
|
+cat >>confdefs.h <<_ACEOF
|
|
+#define TARGET_SW_64
|
|
+_ACEOF
|
|
+ ;;
|
|
+ esac
|
|
|
|
case "${enable_default_hash_style}" in
|
|
sysv | both) ac_default_emit_sysv_hash=1 ;;
|
|
diff --git a/ld/configure.tgt b/ld/configure.tgt
|
|
index 8b577f21..269f7fd4 100644
|
|
--- a/ld/configure.tgt
|
|
+++ b/ld/configure.tgt
|
|
@@ -102,6 +102,19 @@ alpha*-*-openbsd*) targ_emul=elf64alpha
|
|
alpha*-*-*vms*) targ_emul=alphavms
|
|
targ_extra_ofiles=
|
|
;;
|
|
+sw_64*-*-linux-* | sw_64*-*-gnu*)
|
|
+ case "${targ}" in
|
|
+ sw_64sw6a*)
|
|
+ targ_emul=elf64sw_64 targ_extra_emuls=sw_64
|
|
+ tdir_sw_64=`echo ${targ_alias} | sed -e 's/linux\(-gnu\)*/linux\1ecoff/'` ;;
|
|
+ sw_64sw6b*)
|
|
+ targ_emul=elf64sw_64 targ_extra_emuls=sw_64
|
|
+ tdir_sw_64=`echo ${targ_alias} | sed -e 's/linux\(-gnu\)*/linux\1ecoff/'` ;;
|
|
+ *)
|
|
+ targ_emul=elf64sw_64 targ_extra_emuls=sw_64
|
|
+ tdir_sw_64=`echo ${targ_alias} | sed -e 's/linux\(-gnu\)*/linux\1ecoff/'` ;;
|
|
+ esac
|
|
+ ;;
|
|
am33_2.0-*-linux*) targ_emul=elf32am33lin # mn10300 variant
|
|
;;
|
|
arc*-*-elf*) targ_emul=arcelf
|
|
@@ -1085,6 +1098,9 @@ alpha*-*-*)
|
|
NATIVE_LIB_DIRS='/usr/local/lib /usr/ccs/lib /lib /usr/lib'
|
|
;;
|
|
|
|
+sw_64*-*-*)
|
|
+ NATIVE_LIB_DIRS='/usr/local/lib /usr/ccs/lib /lib /usr/lib'
|
|
+ ;;
|
|
esac
|
|
|
|
case "${target}" in
|
|
diff --git a/ld/testsuite/config/default.exp b/ld/testsuite/config/default.exp
|
|
index 0795ea81..d0cce3a9 100644
|
|
--- a/ld/testsuite/config/default.exp
|
|
+++ b/ld/testsuite/config/default.exp
|
|
@@ -434,6 +434,26 @@ if { [istarget alpha*-*-*vms*] } {
|
|
unset f src
|
|
}
|
|
|
|
+# Provide dummy libraries that sw_64-vms-ld always loads
|
|
+if { [istarget sw_64*-*-*vms*] } {
|
|
+ set src tmpdir/empty.s
|
|
+ set f [open $src "w"]
|
|
+ close $f
|
|
+ if { [ld_assemble $as $src tmpdir/empty.o]
|
|
+ && ![ld_link $LD tmpdir/empty tmpdir/empty.o]
|
|
+ && [regsub -all {[^\n]*: cannot find -l([^\n]*)} $exec_output {tmpdir/lib\1.a } missing_libs] } {
|
|
+ regsub -all {\$} $missing_libs {\\\$} missing_libs
|
|
+ for { set i 0 } { $i < [llength $missing_libs] } { incr i } {
|
|
+ set f [lindex $missing_libs $i]
|
|
+ verbose -log "creating dummy $f"
|
|
+ ar_simple_create $ar {} $f tmpdir/empty.o
|
|
+ }
|
|
+ append LDFLAGS " -Ltmpdir"
|
|
+ unset i missing_libs
|
|
+ }
|
|
+ unset f src
|
|
+}
|
|
+
|
|
set plug_opt ""
|
|
if { [check_compiler_available] } {
|
|
set plugin_names {
|
|
diff --git a/ld/testsuite/ld-elf/binutils.exp b/ld/testsuite/ld-elf/binutils.exp
|
|
index 426f3293..f94d79e5 100644
|
|
--- a/ld/testsuite/ld-elf/binutils.exp
|
|
+++ b/ld/testsuite/ld-elf/binutils.exp
|
|
@@ -88,6 +88,7 @@ proc binutils_test { prog_name ld_options test {test_name ""} {readelf_options "
|
|
# These targets do not set NO_SMALL_DATA or DATA_GOT and therefore
|
|
# have `.got' in (read-write) small data rather than regular data.
|
|
set relro_got [expr !([istarget "alpha*-*-*"] \
|
|
+ || [istarget "sw_64*-*-*"] \
|
|
|| [istarget "hppa*-*-linux-*"] \
|
|
|| [istarget "hppa*-*-netbsd*"] \
|
|
|| [istarget "hppa*-*-openbsd*"] \
|
|
diff --git a/ld/testsuite/ld-elf/compress1a.d b/ld/testsuite/ld-elf/compress1a.d
|
|
index 0d5b68e7..f97b18b7 100644
|
|
--- a/ld/testsuite/ld-elf/compress1a.d
|
|
+++ b/ld/testsuite/ld-elf/compress1a.d
|
|
@@ -2,7 +2,7 @@
|
|
#as: --compress-debug-sections
|
|
#ld: -e func_cu2
|
|
#readelf: -S --wide
|
|
-#xfail: alpha-*-*ecoff
|
|
+#xfail: alpha-*-*ecoff sw_64-*-*ecoff
|
|
|
|
#failif
|
|
#...
|
|
diff --git a/ld/testsuite/ld-elf/compressed1a.d b/ld/testsuite/ld-elf/compressed1a.d
|
|
index 3a5572ec..6780e319 100644
|
|
--- a/ld/testsuite/ld-elf/compressed1a.d
|
|
+++ b/ld/testsuite/ld-elf/compressed1a.d
|
|
@@ -2,7 +2,7 @@
|
|
#as: --compress-debug-sections=zlib-gabi
|
|
#ld: -e func_cu2
|
|
#readelf: -t
|
|
-#xfail: alpha-*-*ecoff
|
|
+#xfail: alpha-*-*ecoff sw_64-*-*ecoff
|
|
|
|
#failif
|
|
#...
|
|
diff --git a/ld/testsuite/ld-elf/eh5.d b/ld/testsuite/ld-elf/eh5.d
|
|
index 4a697482..eff6e961 100644
|
|
--- a/ld/testsuite/ld-elf/eh5.d
|
|
+++ b/ld/testsuite/ld-elf/eh5.d
|
|
@@ -4,7 +4,7 @@
|
|
#ld:
|
|
#readelf: -wf
|
|
#target: [check_as_cfi]
|
|
-#xfail: alpha-*-*ecoff hppa64-*-* tile*-*-* visium-*-*
|
|
+#xfail: alpha-*-*ecoff sw_64-*-*ecoff hppa64-*-* tile*-*-* visium-*-*
|
|
|
|
Contents of the .eh_frame section:
|
|
|
|
diff --git a/ld/testsuite/ld-elf/elf.exp b/ld/testsuite/ld-elf/elf.exp
|
|
index e98bffc0..1c192537 100644
|
|
--- a/ld/testsuite/ld-elf/elf.exp
|
|
+++ b/ld/testsuite/ld-elf/elf.exp
|
|
@@ -51,7 +51,7 @@ if [istarget "*-*-hpux*"] {
|
|
set ASFLAGS "$ASFLAGS --defsym HPUX=1"
|
|
}
|
|
|
|
-if { [istarget alpha*-*-* ] } {
|
|
++if { [istarget alpha*-*-* ] || [istarget sw_64*-*-*]} {
|
|
# The compress1 test is written expecting 32-bit addresses; force the
|
|
# executable down into the low address space to match.
|
|
# ??? How can we adjust just the one testcase?
|
|
diff --git a/ld/testsuite/ld-elf/pr17550a.d b/ld/testsuite/ld-elf/pr17550a.d
|
|
index 752c3ad6..33581821 100644
|
|
--- a/ld/testsuite/ld-elf/pr17550a.d
|
|
+++ b/ld/testsuite/ld-elf/pr17550a.d
|
|
@@ -3,7 +3,7 @@
|
|
#ld: -r
|
|
#readelf: -s --wide
|
|
# Disabled on alpha because alpha has a different .set directive.
|
|
-#xfail: alpha-*-*
|
|
+#xfail: alpha-*-* sw_64-*-*
|
|
|
|
#failif
|
|
#...
|
|
diff --git a/ld/testsuite/ld-elf/pr17550b.d b/ld/testsuite/ld-elf/pr17550b.d
|
|
index 09e7ddfe..bf80e9fa 100644
|
|
--- a/ld/testsuite/ld-elf/pr17550b.d
|
|
+++ b/ld/testsuite/ld-elf/pr17550b.d
|
|
@@ -3,7 +3,7 @@
|
|
#ld: -r
|
|
#readelf: -s --wide
|
|
# Disabled on alpha because alpha has a different .set directive.
|
|
-#xfail: alpha-*-*
|
|
+#xfail: alpha-*-* sw_64-*-*
|
|
|
|
#failif
|
|
#...
|
|
diff --git a/ld/testsuite/ld-elf/pr17550c.d b/ld/testsuite/ld-elf/pr17550c.d
|
|
index 55749fc7..97c394c1 100644
|
|
--- a/ld/testsuite/ld-elf/pr17550c.d
|
|
+++ b/ld/testsuite/ld-elf/pr17550c.d
|
|
@@ -5,3 +5,6 @@
|
|
#xfail: alpha-*-* [is_generic]
|
|
# Disabled on alpha because alpha has a different .set directive.
|
|
# Generic linker targets don't support comdat group sections.
|
|
+#xfail: sw_64-*-* [is_generic]
|
|
+# Disabled on sw_64 because sw_64 has a different .set directive.
|
|
+# Generic linker targets don't support comdat group sections.
|
|
diff --git a/ld/testsuite/ld-elf/pr17550d.d b/ld/testsuite/ld-elf/pr17550d.d
|
|
index 3dd108d5..f0b2ea72 100644
|
|
--- a/ld/testsuite/ld-elf/pr17550d.d
|
|
+++ b/ld/testsuite/ld-elf/pr17550d.d
|
|
@@ -5,6 +5,9 @@
|
|
# Disabled on alpha because alpha has a different .set directive.
|
|
# Generic linker targets don't support comdat group sections.
|
|
#xfail: alpha-*-* [is_generic]
|
|
+# Disabled on sw_64 because sw_64 has a different .set directive.
|
|
+# Generic linker targets don't support comdat group sections.
|
|
+#xfail: sw_64-*-* [is_generic]
|
|
|
|
#...
|
|
+[0-9]+: +[0-9a-f]+ +0 +OBJECT +GLOBAL +DEFAULT +UND y
|
|
diff --git a/ld/testsuite/ld-elf/pr18720b.c b/ld/testsuite/ld-elf/pr18720b.c
|
|
index 6b3222db..826a17a1 100644
|
|
--- a/ld/testsuite/ld-elf/pr18720b.c
|
|
+++ b/ld/testsuite/ld-elf/pr18720b.c
|
|
@@ -9,6 +9,8 @@ foo (void)
|
|
__asm__ (".symver foo,foo@FOO");
|
|
#ifdef __alpha__
|
|
__asm__ ("foo_alias = foo");
|
|
+#elif __sw_64__
|
|
+__asm__ ("foo_alias = foo");
|
|
#else
|
|
__asm__ (".set foo_alias,foo");
|
|
#endif
|
|
diff --git a/ld/testsuite/ld-elf/shared.exp b/ld/testsuite/ld-elf/shared.exp
|
|
index d00358e4..f1e6e1be 100644
|
|
--- a/ld/testsuite/ld-elf/shared.exp
|
|
+++ b/ld/testsuite/ld-elf/shared.exp
|
|
@@ -346,6 +346,7 @@ if { [check_gc_sections_available] } {
|
|
mips*-*-* { }
|
|
tic6x-*-* { }
|
|
xtensa-*-* { }
|
|
+ sw_64-*-* { }
|
|
default {
|
|
run_ld_link_tests [list \
|
|
[list \
|
|
@@ -464,7 +465,8 @@ run_ld_link_tests [list \
|
|
]
|
|
|
|
# These targets don't copy dynamic variables into .bss.
|
|
-setup_xfail "alpha-*-*" "bfin-*-*" "ia64-*-*" "xtensa-*-*"
|
|
+# setup_xfail "alpha-*-*" "bfin-*-*" "ia64-*-*" "xtensa-*-*"
|
|
+setup_xfail "sw_64-*-*" "alpha-*-*" "bfin-*-*" "ia64-*-*" "xtensa-*-*"
|
|
# or don't have .data.rel.ro
|
|
setup_xfail "hppa*64*-*-hpux*" "tic6x-*-*"
|
|
# or complain about relocs in read-only sections
|
|
@@ -484,7 +486,8 @@ run_ld_link_tests [list \
|
|
{pr20995c.s} {{readelf {-l --wide} pr20995-2so.r}} "pr20995-2.so"] \
|
|
] {![check_relro_support]}
|
|
|
|
-setup_xfail alpha-*-* xtensa-*-*
|
|
+# setup_xfail alpha-*-* xtensa-*-*
|
|
+setup_xfail sw_64-*-* alpha-*-* xtensa-*-*
|
|
run_ld_link_tests [list \
|
|
[list \
|
|
"pr20995-2" \
|
|
@@ -500,7 +503,8 @@ run_ld_link_tests [list \
|
|
# The next test checks that copy relocs are not used unnecessarily,
|
|
# but that is just an optimization so don't complain loudly.
|
|
setup_xfail *-*-*
|
|
-clear_xfail alpha-*-* bfin-*-linux* csky-*-* frv-*-* hppa*-*-* i?86-*-*
|
|
+# clear_xfail alpha-*-* bfin-*-linux* csky-*-* frv-*-* hppa*-*-* i?86-*-*
|
|
+clear_xfail sw_64-*-* alpha-*-* bfin-*-linux* csky-*-* frv-*-* hppa*-*-* i?86-*-*
|
|
clear_xfail ia64-*-* microblaze-*-* powerpc*-*-* x86_64-*-* xtensa-*-*
|
|
run_ld_link_tests {
|
|
{"pr22374 function pointer initialization"
|
|
@@ -871,7 +875,8 @@ run_cc_link_tests [list \
|
|
]
|
|
|
|
# pr19073.s uses .set, which has a different meaning on alpha.
|
|
-if { ![istarget alpha-*-*] } {
|
|
+# if { ![istarget alpha-*-*] } {
|
|
+if { ![istarget alpha-*-*] && ![istarget sw_64-*-*] } {
|
|
append build_tests {
|
|
{"Build pr19073a.o"
|
|
"-r -nostdlib" ""
|
|
diff --git a/ld/testsuite/ld-elf/stab.d b/ld/testsuite/ld-elf/stab.d
|
|
index 27b99cb3..97d76d93 100644
|
|
--- a/ld/testsuite/ld-elf/stab.d
|
|
+++ b/ld/testsuite/ld-elf/stab.d
|
|
@@ -2,7 +2,7 @@
|
|
#as: -gstabs
|
|
#readelf: -S --wide
|
|
#ld:
|
|
-#notarget: "ia64-*-*" "alpha*"
|
|
+#notarget: "ia64-*-*" "alpha*" "sw_64*"
|
|
|
|
# Disabled on alpha because the entry point may be above 4GB but the stabs
|
|
# value only 32 bits.
|
|
diff --git a/ld/testsuite/ld-elfvers/vers.exp b/ld/testsuite/ld-elfvers/vers.exp
|
|
index 8a1383fe..b49b27f8 100644
|
|
--- a/ld/testsuite/ld-elfvers/vers.exp
|
|
+++ b/ld/testsuite/ld-elfvers/vers.exp
|
|
@@ -51,6 +51,7 @@ if { ![istarget hppa*64*-*-hpux*]
|
|
&& ![istarget arm*-*-linux*]
|
|
&& ![istarget mips*-*-linux*]
|
|
&& ![istarget alpha*-*-linux*]
|
|
+ && ![istarget sw_64*-*-linux*]
|
|
&& ![istarget s390*-*-linux*]
|
|
&& ![istarget sh\[34\]*-*-linux*]
|
|
&& ![istarget x86_64-*-linux*] } {
|
|
diff --git a/ld/testsuite/ld-elfvsb/elfvsb.exp b/ld/testsuite/ld-elfvsb/elfvsb.exp
|
|
index ee73cfe8..5030b102 100644
|
|
--- a/ld/testsuite/ld-elfvsb/elfvsb.exp
|
|
+++ b/ld/testsuite/ld-elfvsb/elfvsb.exp
|
|
@@ -42,6 +42,7 @@ if { ![istarget hppa*64*-*-hpux*] \
|
|
&& ![istarget powerpc*-*-linux*] \
|
|
&& ![istarget arm*-*-linux*] \
|
|
&& ![istarget alpha*-*-linux*] \
|
|
+ && ![istarget sw_64*-*-linux*] \
|
|
&& ![istarget sparc*-*-linux*] \
|
|
&& ![istarget s390*-*-linux*] \
|
|
&& ![istarget sh\[34\]*-*-linux*] \
|
|
@@ -267,6 +268,7 @@ proc visibility_run {visibility} {
|
|
&& ![ string match $visibility "protected_undef" ] } {
|
|
setup_xfail "ia64-*-linux*"
|
|
setup_xfail "alpha*-*-linux*"
|
|
+ setup_xfail "sw_64*-*-linux*"
|
|
}
|
|
if { ![ string match $visibility "hidden" ]
|
|
&& ![ string match $visibility "hidden_undef" ]
|
|
@@ -316,6 +318,7 @@ proc visibility_run {visibility} {
|
|
&& ![ string match $visibility "protected_undef" ] } {
|
|
setup_xfail "ia64-*-linux*"
|
|
setup_xfail "alpha*-*-linux*"
|
|
+ setup_xfail "sw_64*-*-linux*"
|
|
setup_xfail "mips*-*-linux*"
|
|
}
|
|
if { [is_elf64 $tmpdir/mainnp.o] } {
|
|
@@ -372,6 +375,7 @@ proc visibility_run {visibility} {
|
|
&& ![ string match $visibility "protected_undef" ] } {
|
|
setup_xfail "ia64-*-linux*"
|
|
setup_xfail "alpha*-*-linux*"
|
|
+ setup_xfail "sw_64*-*-linux*"
|
|
}
|
|
if { ![ string match $visibility "hidden" ]
|
|
&& ![ string match $visibility "hidden_undef" ]
|
|
diff --git a/ld/testsuite/ld-elfweak/elfweak.exp b/ld/testsuite/ld-elfweak/elfweak.exp
|
|
index 56949d74..bd208d46 100644
|
|
--- a/ld/testsuite/ld-elfweak/elfweak.exp
|
|
+++ b/ld/testsuite/ld-elfweak/elfweak.exp
|
|
@@ -31,6 +31,7 @@ if { ![check_compiler_available] } {
|
|
# Square bracket expressions seem to confuse istarget.
|
|
# This is similar to the test that is used in ld-shared, BTW.
|
|
if { ![istarget alpha*-*-linux*]
|
|
+ && ![istarget sw_64*-*-linux*]
|
|
&& ![istarget arm*-*-linux*]
|
|
&& ![istarget hppa*64*-*-hpux*]
|
|
&& ![istarget hppa*-*-linux*]
|
|
diff --git a/ld/testsuite/ld-ifunc/ifunc-26.d b/ld/testsuite/ld-ifunc/ifunc-26.d
|
|
index 05e380a8..156f85b4 100644
|
|
--- a/ld/testsuite/ld-ifunc/ifunc-26.d
|
|
+++ b/ld/testsuite/ld-ifunc/ifunc-26.d
|
|
@@ -1,6 +1,6 @@
|
|
#ld: -shared
|
|
#readelf: -h
|
|
-#xfail: alpha-*-*
|
|
+#xfail: alpha-*-* sw_64-*-*
|
|
|
|
ELF Header:
|
|
#...
|
|
diff --git a/ld/testsuite/ld-ifunc/ifunc.exp b/ld/testsuite/ld-ifunc/ifunc.exp
|
|
index 45b47d7d..f66a53f4 100644
|
|
--- a/ld/testsuite/ld-ifunc/ifunc.exp
|
|
+++ b/ld/testsuite/ld-ifunc/ifunc.exp
|
|
@@ -25,6 +25,7 @@
|
|
|
|
if { ![is_elf_format] || ![supports_gnu_osabi]
|
|
|| [istarget alpha-*-*]
|
|
+ || [istarget sw_64*-*-*]
|
|
|| [istarget arc*-*-*]
|
|
|| [istarget am33*-*-*]
|
|
|| [istarget bfin-*-*]
|
|
diff --git a/ld/testsuite/ld-misc/just-symbols.exp b/ld/testsuite/ld-misc/just-symbols.exp
|
|
index 51029147..1506c105 100644
|
|
--- a/ld/testsuite/ld-misc/just-symbols.exp
|
|
+++ b/ld/testsuite/ld-misc/just-symbols.exp
|
|
@@ -26,7 +26,8 @@
|
|
if { [istarget sh-*-pe]
|
|
|| [istarget *-*-msdos]
|
|
|| [istarget *c30-*-*]
|
|
- || [istarget alpha-*-vms] } {
|
|
+ || [istarget alpha-*-vms]
|
|
+ || [istarget sw_64-*-vms] } {
|
|
return
|
|
}
|
|
|
|
diff --git a/ld/testsuite/ld-plugin/plugin-14.d b/ld/testsuite/ld-plugin/plugin-14.d
|
|
index 81365af7..6c2db663 100644
|
|
--- a/ld/testsuite/ld-plugin/plugin-14.d
|
|
+++ b/ld/testsuite/ld-plugin/plugin-14.d
|
|
@@ -29,5 +29,6 @@ hook called: claim_file tmpdir/text.o \[@0/.* not claimed
|
|
hook called: all symbols read.
|
|
.*: tmpdir/main.o: in function `main':
|
|
.*main.c.*: undefined reference to `\.?func'
|
|
+.*main.c.*: undefined reference to `\.?func'
|
|
hook called: cleanup.
|
|
#...
|
|
diff --git a/ld/testsuite/ld-plugin/plugin-15.d b/ld/testsuite/ld-plugin/plugin-15.d
|
|
index 02c5e60b..ef13000a 100644
|
|
--- a/ld/testsuite/ld-plugin/plugin-15.d
|
|
+++ b/ld/testsuite/ld-plugin/plugin-15.d
|
|
@@ -30,5 +30,6 @@ hook called: claim_file tmpdir/text.o \[@0/.* not claimed
|
|
hook called: all symbols read.
|
|
.*: tmpdir/main.o: in function `main':
|
|
.*main.c.*: undefined reference to `\.?func'
|
|
+.*main.c.*: undefined reference to `\.?func'
|
|
hook called: cleanup.
|
|
#...
|
|
diff --git a/ld/testsuite/ld-plugin/plugin-16.d b/ld/testsuite/ld-plugin/plugin-16.d
|
|
index 504fbdbc..5d816efb 100644
|
|
--- a/ld/testsuite/ld-plugin/plugin-16.d
|
|
+++ b/ld/testsuite/ld-plugin/plugin-16.d
|
|
@@ -34,5 +34,6 @@ Sym: '_?func' Resolution: LDPR_PREVAILING_DEF
|
|
Sym: '_?func2' Resolution: LDPR_PREVAILING_DEF_IRONLY
|
|
.*: tmpdir/main.o: in function `main':
|
|
.*main.c.*: undefined reference to `\.?func'
|
|
+.*main.c.*: undefined reference to `\.?func'
|
|
hook called: cleanup.
|
|
#...
|
|
diff --git a/ld/testsuite/ld-plugin/plugin-20.d b/ld/testsuite/ld-plugin/plugin-20.d
|
|
index 31bc3766..3c3d53eb 100644
|
|
--- a/ld/testsuite/ld-plugin/plugin-20.d
|
|
+++ b/ld/testsuite/ld-plugin/plugin-20.d
|
|
@@ -4,4 +4,5 @@ Sym: '_?func' Resolution: LDPR_PREVAILING_DEF.*
|
|
Sym: '_?func' Resolution: LDPR_PREVAILING_DEF.*
|
|
.*: tmpdir/main.o: in function `main':
|
|
.*main.c.*: undefined reference to `\.?func'
|
|
+.*main.c.*: undefined reference to `\.?func'
|
|
hook called: cleanup.
|
|
diff --git a/ld/testsuite/ld-plugin/plugin-21.d b/ld/testsuite/ld-plugin/plugin-21.d
|
|
index 0b85f715..cc87440a 100644
|
|
--- a/ld/testsuite/ld-plugin/plugin-21.d
|
|
+++ b/ld/testsuite/ld-plugin/plugin-21.d
|
|
@@ -4,4 +4,5 @@ Sym: '_?func' Resolution: LDPR_PREVAILING_DEF.*
|
|
Sym: '_?func' Resolution: LDPR_PREVAILING_DEF.*
|
|
.*: tmpdir/main.o: in function `main':
|
|
.*main.c.*: undefined reference to `\.?func'
|
|
+.*main.c.*: undefined reference to `\.?func'
|
|
hook called: cleanup.
|
|
diff --git a/ld/testsuite/ld-plugin/plugin-22.d b/ld/testsuite/ld-plugin/plugin-22.d
|
|
index 1084a0b0..51a335bb 100644
|
|
--- a/ld/testsuite/ld-plugin/plugin-22.d
|
|
+++ b/ld/testsuite/ld-plugin/plugin-22.d
|
|
@@ -4,4 +4,5 @@ Sym: '_?func' Resolution: LDPR_PREVAILING_DEF.*
|
|
Sym: '_?func' Resolution: LDPR_PREVAILING_DEF.*
|
|
.*: tmpdir/main.o: in function `main':
|
|
.*main.c.*: undefined reference to `\.?func'
|
|
+.*main.c.*: undefined reference to `\.?func'
|
|
hook called: cleanup.
|
|
diff --git a/ld/testsuite/ld-plugin/plugin-23.d b/ld/testsuite/ld-plugin/plugin-23.d
|
|
index 0b6c25c1..14bb8a60 100644
|
|
--- a/ld/testsuite/ld-plugin/plugin-23.d
|
|
+++ b/ld/testsuite/ld-plugin/plugin-23.d
|
|
@@ -4,4 +4,5 @@ Sym: '_?func' Resolution: LDPR_PREVAILING_DEF.*
|
|
Sym: '_?func' Resolution: LDPR_PREVAILING_DEF.*
|
|
.*: tmpdir/main.o: in function `main':
|
|
.*main.c.*: undefined reference to `\.?func'
|
|
+.*main.c.*: undefined reference to `\.?func'
|
|
hook called: cleanup.
|
|
diff --git a/ld/testsuite/ld-plugin/plugin-6.d b/ld/testsuite/ld-plugin/plugin-6.d
|
|
index b1854ac0..aef588f0 100644
|
|
--- a/ld/testsuite/ld-plugin/plugin-6.d
|
|
+++ b/ld/testsuite/ld-plugin/plugin-6.d
|
|
@@ -29,5 +29,6 @@ hook called: claim_file tmpdir/text.o \[@0/.* not claimed
|
|
hook called: all symbols read.
|
|
.*: tmpdir/main.o: in function `main':
|
|
.*main.c.*: undefined reference to `\.?func'
|
|
+.*main.c.*: undefined reference to `\.?func'
|
|
hook called: cleanup.
|
|
#...
|
|
diff --git a/ld/testsuite/ld-plugin/plugin-7.d b/ld/testsuite/ld-plugin/plugin-7.d
|
|
index c77b66fa..a2f41d19 100644
|
|
--- a/ld/testsuite/ld-plugin/plugin-7.d
|
|
+++ b/ld/testsuite/ld-plugin/plugin-7.d
|
|
@@ -30,5 +30,6 @@ hook called: claim_file tmpdir/text.o \[@0/.* not claimed
|
|
hook called: all symbols read.
|
|
.*: tmpdir/main.o: in function `main':
|
|
.*main.c.*: undefined reference to `\.?func'
|
|
+.*main.c.*: undefined reference to `\.?func'
|
|
hook called: cleanup.
|
|
#...
|
|
diff --git a/ld/testsuite/ld-plugin/plugin-8.d b/ld/testsuite/ld-plugin/plugin-8.d
|
|
index ca24227a..e26c1050 100644
|
|
--- a/ld/testsuite/ld-plugin/plugin-8.d
|
|
+++ b/ld/testsuite/ld-plugin/plugin-8.d
|
|
@@ -34,5 +34,6 @@ Sym: '_?func' Resolution: LDPR_PREVAILING_DEF
|
|
Sym: '_?func2' Resolution: LDPR_PREVAILING_DEF_IRONLY
|
|
.*: tmpdir/main.o: in function `main':
|
|
.*main.c.*: undefined reference to `\.?func'
|
|
+.*main.c.*: undefined reference to `\.?func'
|
|
hook called: cleanup.
|
|
#...
|
|
diff --git a/ld/testsuite/ld-scripts/fill.d b/ld/testsuite/ld-scripts/fill.d
|
|
index cfe1e524..0e2ad2fe 100644
|
|
--- a/ld/testsuite/ld-scripts/fill.d
|
|
+++ b/ld/testsuite/ld-scripts/fill.d
|
|
@@ -7,7 +7,7 @@
|
|
#skip: ia64-*-* mips*-*-freebsd* mips*-*-gnu* mips*-*-irix* mips*-*-kfreebsd*
|
|
#skip: mips*-*-linux* mips*-*-netbsd* mips*-*-openbsd* mips*-*-sysv4* sh-*-pe
|
|
#skip: tilegx*-*-* tilepro-*-* x86_64-*-cygwin x86_64-*-mingw* x86_64-*-pe*
|
|
-#xfail: alpha*-*-*ecoff sparc*-*-coff
|
|
+#xfail: alpha*-*-*ecoff sw_64*-*-*ecoff sparc*-*-coff
|
|
#xfail: tic30-*-coff tic4x-*-* tic54x-*-* z8k-*-*
|
|
#
|
|
# See also fill16.d. We use `skip' for configurations unsupported
|
|
@@ -16,6 +16,7 @@
|
|
# configurations are listed above.
|
|
#
|
|
# alpha-linuxecoff pads out code to 16 bytes.
|
|
+# sw_64-linuxecoff pads out code to 16 bytes.
|
|
# ia64 aligns code to minimum 16 bytes.
|
|
# mips aligns to minimum 16 bytes (except for bare-metal ELF and VxWorks).
|
|
# sh-pe pads out code sections to 16 bytes
|
|
diff --git a/ld/testsuite/ld-scripts/fill16.d b/ld/testsuite/ld-scripts/fill16.d
|
|
index e5819df7..86ea9003 100644
|
|
--- a/ld/testsuite/ld-scripts/fill16.d
|
|
+++ b/ld/testsuite/ld-scripts/fill16.d
|
|
@@ -5,7 +5,7 @@
|
|
#objdump: -s -j .text
|
|
#notarget: [is_aout_format]
|
|
#skip: arm-*-coff i[3-7]86-*-coff [is_xcoff_format]
|
|
-#xfail: alpha*-*-*ecoff sparc*-*-coff
|
|
+#xfail: alpha*-*-*ecoff sw_64*-*-*ecoff sparc*-*-coff
|
|
#xfail: tic30-*-coff tic4x-*-* tic54x-*-* z8k-*-*
|
|
#xfail: z80-*-coff
|
|
#
|
|
@@ -15,6 +15,7 @@
|
|
# configurations are listed above.
|
|
#
|
|
# alpha-linuxecoff pads out code to 16 bytes.
|
|
+# sw_64-linuxecoff pads out code to 16 bytes.
|
|
# arm-coff always aligns code to 4 bytes.
|
|
# i386-coff always aligns code to 4 bytes.
|
|
# sh-pe pads out code sections to 16 bytes
|
|
diff --git a/ld/testsuite/ld-scripts/pr27100.d b/ld/testsuite/ld-scripts/pr27100.d
|
|
index 28b5875d..d516ca3b 100644
|
|
--- a/ld/testsuite/ld-scripts/pr27100.d
|
|
+++ b/ld/testsuite/ld-scripts/pr27100.d
|
|
@@ -1,7 +1,7 @@
|
|
#ld: -r -T pr27100.t
|
|
#objdump: -h
|
|
#notarget: [is_aout_format]
|
|
-#xfail: alpha*-*-*vms* mmix-*-* *c54x-*-* [is_xcoff_format]
|
|
+#xfail: alpha*-*-*vms* sw_64*-*-*vms* mmix-*-* *c54x-*-* [is_xcoff_format]
|
|
|
|
#...
|
|
.* \.data +0+60 .*
|
|
diff --git a/ld/testsuite/ld-shared/shared.exp b/ld/testsuite/ld-shared/shared.exp
|
|
index 0e45f5c0..ff1b87bb 100644
|
|
--- a/ld/testsuite/ld-shared/shared.exp
|
|
+++ b/ld/testsuite/ld-shared/shared.exp
|
|
@@ -53,6 +53,7 @@ if { ![istarget hppa*64*-*-hpux*] \
|
|
&& ![istarget sparc*-*-linux*] \
|
|
&& ![istarget arm*-*-linux*] \
|
|
&& ![istarget alpha*-*-linux*] \
|
|
+ && ![istarget sw_64*-*-linux*] \
|
|
&& ![istarget rs6000*-*-aix*] \
|
|
&& ![istarget powerpc*-*-aix*] \
|
|
&& ![istarget s390*-*-linux*] \
|
|
@@ -233,6 +234,7 @@ if ![ld_compile "$CC $CFLAGS $SHCFLAG" $srcdir/$subdir/main.c $tmpdir/mainnp.o]
|
|
setup_xfail "*-*-solaris2*"
|
|
setup_xfail "ia64-*-linux*"
|
|
setup_xfail "alpha*-*-linux*"
|
|
+ setup_xfail "sw_64*-*-linux*"
|
|
setup_xfail "powerpc64*-*-*"
|
|
if { ![istarget hppa*64*-*-linux*] } {
|
|
setup_xfail "hppa*-*-linux*"
|
|
@@ -259,6 +261,7 @@ if ![ld_compile "$CC $CFLAGS $SHCFLAG" $srcdir/$subdir/main.c $tmpdir/mainnp.o]
|
|
setup_xfail "powerpc*-*-linux*"
|
|
setup_xfail "ia64-*-linux*"
|
|
setup_xfail "alpha*-*-linux*"
|
|
+ setup_xfail "sw_64*-*-linux*"
|
|
setup_xfail "mips*-*-linux*"
|
|
if { ![istarget hppa*64*-*-linux*] } {
|
|
setup_xfail "hppa*-*-linux*"
|
|
@@ -314,6 +317,7 @@ if ![ld_compile "$CC $CFLAGS $SHCFLAG $picflag" $srcdir/$subdir/main.c $tmpdir/m
|
|
setup_xfail "*-*-solaris2*"
|
|
setup_xfail "ia64-*-linux*"
|
|
setup_xfail "alpha*-*-linux*"
|
|
+ setup_xfail "sw_64*-*-linux*"
|
|
setup_xfail "powerpc64*-*-*"
|
|
if { ![istarget hppa*64*-*-linux*] } {
|
|
setup_xfail "hppa*-*-linux*"
|
|
diff --git a/ld/testsuite/ld-srec/srec.exp b/ld/testsuite/ld-srec/srec.exp
|
|
index c8d561b8..54953de9 100644
|
|
--- a/ld/testsuite/ld-srec/srec.exp
|
|
+++ b/ld/testsuite/ld-srec/srec.exp
|
|
@@ -408,6 +408,9 @@ setup_xfail "v850*-*-elf"
|
|
# The S-record linker doesn't handle Alpha Elf relaxation.
|
|
setup_xfail "alpha*-*-elf*" "alpha*-*-linux-*" "alpha*-*-gnu*"
|
|
setup_xfail "alpha*-*-netbsd*"
|
|
+#setup_xfail "sw_64*-*-*"
|
|
+setup_xfail "sw_64*-*-elf*" "sw_64*-*-linux-*" "sw_64*-*-gnu*"
|
|
+setup_xfail "sw_64*-*-netbsd*"
|
|
|
|
# The S-record linker hasn't any hope of coping with HPPA relocs.
|
|
# Or MeP complex relocs.
|
|
@@ -471,6 +474,9 @@ setup_xfail "arm*-*-*"
|
|
setup_xfail "v850*-*-elf"
|
|
setup_xfail "alpha*-*-elf*" "alpha*-*-linux-*" "alpha*-*-gnu*"
|
|
setup_xfail "alpha*-*-netbsd*"
|
|
+#setup_xfail "sw_64*-*-*"
|
|
+setup_xfail "sw_64*-*-elf*" "sw_64*-*-linux-*" "sw_64*-*-gnu*"
|
|
+setup_xfail "sw_64*-*-netbsd*"
|
|
setup_xfail "hppa*-*-*" "mep-*-*"
|
|
setup_xfail "ia64-*-*"
|
|
setup_xfail "*-*-cygwin*" "*-*-mingw*" "*-*-pe*" "*-*-winnt*"
|
|
diff --git a/makefile.vms b/makefile.vms
|
|
index a9e36340..2b921703 100644
|
|
--- a/makefile.vms
|
|
+++ b/makefile.vms
|
|
@@ -15,6 +15,14 @@ CC = cc
|
|
GASCC = gcc
|
|
endif
|
|
|
|
+ifeq ($(ARCH),SW_64)
|
|
+CC = gcc
|
|
+GASCC = $(CC)
|
|
+else
|
|
+CC = cc
|
|
+GASCC = gcc
|
|
+endif
|
|
+
|
|
ifeq ($(CC),cc)
|
|
CHECK-COMPILER = check_compiler
|
|
else
|
|
diff --git a/opcodes/Makefile.am b/opcodes/Makefile.am
|
|
index b468c0a0..53c6160c 100644
|
|
--- a/opcodes/Makefile.am
|
|
+++ b/opcodes/Makefile.am
|
|
@@ -97,6 +97,8 @@ TARGET_LIBOPCODES_CFILES = \
|
|
aarch64-opc-2.c \
|
|
alpha-dis.c \
|
|
alpha-opc.c \
|
|
+ sw_64-dis.c \
|
|
+ sw_64-opc.c \
|
|
arc-dis.c \
|
|
arc-ext.c \
|
|
arc-opc.c \
|
|
diff --git a/opcodes/Makefile.in b/opcodes/Makefile.in
|
|
index 3954fdd6..ece36424 100644
|
|
--- a/opcodes/Makefile.in
|
|
+++ b/opcodes/Makefile.in
|
|
@@ -488,6 +488,8 @@ TARGET_LIBOPCODES_CFILES = \
|
|
aarch64-opc-2.c \
|
|
alpha-dis.c \
|
|
alpha-opc.c \
|
|
+ sw_64-dis.c \
|
|
+ sw_64-opc.c \
|
|
arc-dis.c \
|
|
arc-ext.c \
|
|
arc-opc.c \
|
|
@@ -903,6 +905,8 @@ distclean-compile:
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aarch64-opc.Plo@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alpha-dis.Plo@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alpha-opc.Plo@am__quote@
|
|
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sw_64-opc.Plo@am__quote@
|
|
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sw_64-dis.Plo@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arc-dis.Plo@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arc-ext.Plo@am__quote@
|
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arc-opc.Plo@am__quote@
|
|
diff --git a/opcodes/config.in b/opcodes/config.in
|
|
index 392cda5d..59e1358a 100644
|
|
--- a/opcodes/config.in
|
|
+++ b/opcodes/config.in
|
|
@@ -117,3 +117,5 @@
|
|
|
|
/* Define to 1 if you need to in order for `stat' and other things to work. */
|
|
#undef _POSIX_SOURCE
|
|
+
|
|
+#undef TARGET_SW_64
|
|
diff --git a/opcodes/configure b/opcodes/configure
|
|
index 6ca33dd5..b77fefc1 100755
|
|
--- a/opcodes/configure
|
|
+++ b/opcodes/configure
|
|
@@ -12235,6 +12235,13 @@ if test x${all_targets} = xfalse ; then
|
|
case "$arch" in
|
|
bfd_aarch64_arch) ta="$ta aarch64-asm.lo aarch64-dis.lo aarch64-opc.lo aarch64-asm-2.lo aarch64-dis-2.lo aarch64-opc-2.lo" ;;
|
|
bfd_alpha_arch) ta="$ta alpha-dis.lo alpha-opc.lo" ;;
|
|
+# ifdef TARGET_SW_64
|
|
+ bfd_sw_64_arch) ta="$ta sw_64-dis.lo sw_64-opc.lo"
|
|
+cat >>confdefs.h <<_ACEOF
|
|
+#define TARGET_SW_64
|
|
+_ACEOF
|
|
+# endif
|
|
+ ;;
|
|
bfd_arc_arch) ta="$ta arc-dis.lo arc-opc.lo arc-ext.lo" ;;
|
|
bfd_arm_arch) ta="$ta arm-dis.lo" ;;
|
|
bfd_avr_arch) ta="$ta avr-dis.lo" ;;
|
|
diff --git a/opcodes/configure.ac b/opcodes/configure.ac
|
|
index e564f067..7fd0b600 100644
|
|
--- a/opcodes/configure.ac
|
|
+++ b/opcodes/configure.ac
|
|
@@ -272,6 +272,7 @@ if test x${all_targets} = xfalse ; then
|
|
case "$arch" in
|
|
bfd_aarch64_arch) ta="$ta aarch64-asm.lo aarch64-dis.lo aarch64-opc.lo aarch64-asm-2.lo aarch64-dis-2.lo aarch64-opc-2.lo" ;;
|
|
bfd_alpha_arch) ta="$ta alpha-dis.lo alpha-opc.lo" ;;
|
|
+ bfd_sw_64_arch) ta="$ta sw_64-dis.lo sw_64-opc.lo" ;;
|
|
bfd_arc_arch) ta="$ta arc-dis.lo arc-opc.lo arc-ext.lo" ;;
|
|
bfd_arm_arch) ta="$ta arm-dis.lo" ;;
|
|
bfd_avr_arch) ta="$ta avr-dis.lo" ;;
|
|
diff --git a/opcodes/configure.com b/opcodes/configure.com
|
|
index 2e9ece71..5884c55c 100644
|
|
--- a/opcodes/configure.com
|
|
+++ b/opcodes/configure.com
|
|
@@ -44,6 +44,14 @@ $ FILES="alpha-dis,alpha-opc"
|
|
$ DEFS="""ARCH_alpha"""
|
|
$EOD
|
|
$ endif
|
|
+$ if arch.eqs."sw_64"
|
|
+$ then
|
|
+$ create build.com
|
|
+$DECK
|
|
+$ FILES="sw_64-dis,sw_64-opc"
|
|
+$ DEFS="""ARCH_sw_64"""
|
|
+$EOD
|
|
+$ endif
|
|
$!
|
|
$ append sys$input build.com
|
|
$DECK
|
|
diff --git a/opcodes/disassemble.c b/opcodes/disassemble.c
|
|
index 8590e945..8b416264 100644
|
|
--- a/opcodes/disassemble.c
|
|
+++ b/opcodes/disassemble.c
|
|
@@ -26,6 +26,9 @@
|
|
#ifdef ARCH_all
|
|
#define ARCH_aarch64
|
|
#define ARCH_alpha
|
|
+#ifdef TARGET_SW_64
|
|
+#define ARCH_sw_64
|
|
+#endif
|
|
#define ARCH_arc
|
|
#define ARCH_arm
|
|
#define ARCH_avr
|
|
@@ -145,6 +148,13 @@ disassembler (enum bfd_architecture a,
|
|
disassemble = print_insn_alpha;
|
|
break;
|
|
#endif
|
|
+#ifdef TARGET_SW_64
|
|
+#ifdef ARCH_sw_64
|
|
+ case bfd_arch_sw_64:
|
|
+ disassemble = print_insn_sw_64;
|
|
+ break;
|
|
+#endif
|
|
+#endif
|
|
#ifdef ARCH_arc
|
|
case bfd_arch_arc:
|
|
disassemble = arc_get_disassembler (abfd);
|
|
diff --git a/opcodes/disassemble.h b/opcodes/disassemble.h
|
|
index 8ee54dc9..77028c3b 100644
|
|
--- a/opcodes/disassemble.h
|
|
+++ b/opcodes/disassemble.h
|
|
@@ -23,6 +23,9 @@
|
|
|
|
extern int print_insn_aarch64 (bfd_vma, disassemble_info *);
|
|
extern int print_insn_alpha (bfd_vma, disassemble_info *);
|
|
+#ifdef TARGET_SW_64
|
|
+extern int print_insn_sw_64 (bfd_vma, disassemble_info *);
|
|
+#endif
|
|
extern int print_insn_avr (bfd_vma, disassemble_info *);
|
|
extern int print_insn_bfin (bfd_vma, disassemble_info *);
|
|
extern int print_insn_big_arm (bfd_vma, disassemble_info *);
|
|
--
|
|
2.33.0
|
|
|