binutils/sw_64-support-not-upstream-modified-files.patch
2024-03-08 15:14:40 +08:00

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