Remove support for the (deprecated) openrisc and or32 configurations and replace
with support for the new or1k configuration.
This commit is contained in:
parent
a75fef0e5b
commit
73589c9dbd
@ -1,3 +1,24 @@
|
|||||||
|
2014-04-22 Christian Svensson <blue@cmd.nu>
|
||||||
|
|
||||||
|
* Makefile.am: Remove openrisc and or32 support. Add support for or1k.
|
||||||
|
* archures.c: Likewise.
|
||||||
|
* coffcode.h: Likewise.
|
||||||
|
* config.bfd: Likewise.
|
||||||
|
* configure.in: Likewise.
|
||||||
|
* reloc.c: Likewise.
|
||||||
|
* targets.c: Likewise.
|
||||||
|
* cpu-or1k.c: New file.
|
||||||
|
* elf32-or1k.c: New file.
|
||||||
|
* coff-or32.c: Delete.
|
||||||
|
* cpu-openrisc.c: Delete.
|
||||||
|
* cpu-or32.c: Delete.
|
||||||
|
* elf32-openrisc.c: Delete.
|
||||||
|
* elf32-or32.c: Delete.
|
||||||
|
* Makefile.in: Regenerate.
|
||||||
|
* bfd-in2.h: Regenerate.
|
||||||
|
* configure: Regenerate.
|
||||||
|
* libbfd.h: Regenerate.
|
||||||
|
|
||||||
2014-04-22 Yuanhui Zhang <asmwarrior@gmail.com>
|
2014-04-22 Yuanhui Zhang <asmwarrior@gmail.com>
|
||||||
|
|
||||||
PR ld/16821
|
PR ld/16821
|
||||||
|
@ -139,8 +139,7 @@ ALL_MACHINES = \
|
|||||||
cpu-nds32.lo \
|
cpu-nds32.lo \
|
||||||
cpu-nios2.lo \
|
cpu-nios2.lo \
|
||||||
cpu-ns32k.lo \
|
cpu-ns32k.lo \
|
||||||
cpu-openrisc.lo \
|
cpu-or1k.lo \
|
||||||
cpu-or32.lo \
|
|
||||||
cpu-pdp11.lo \
|
cpu-pdp11.lo \
|
||||||
cpu-pj.lo \
|
cpu-pj.lo \
|
||||||
cpu-plugin.lo \
|
cpu-plugin.lo \
|
||||||
@ -224,8 +223,7 @@ ALL_MACHINES_CFILES = \
|
|||||||
cpu-nds32.c \
|
cpu-nds32.c \
|
||||||
cpu-ns32k.c \
|
cpu-ns32k.c \
|
||||||
cpu-nios2.c \
|
cpu-nios2.c \
|
||||||
cpu-openrisc.c \
|
cpu-or1k.c \
|
||||||
cpu-or32.c \
|
|
||||||
cpu-pdp11.c \
|
cpu-pdp11.c \
|
||||||
cpu-pj.c \
|
cpu-pj.c \
|
||||||
cpu-plugin.c \
|
cpu-plugin.c \
|
||||||
@ -284,7 +282,6 @@ BFD32_BACKENDS = \
|
|||||||
coff-m68k.lo \
|
coff-m68k.lo \
|
||||||
coff-m88k.lo \
|
coff-m88k.lo \
|
||||||
coff-mips.lo \
|
coff-mips.lo \
|
||||||
coff-or32.lo \
|
|
||||||
coff-rs6000.lo \
|
coff-rs6000.lo \
|
||||||
coff-sh.lo \
|
coff-sh.lo \
|
||||||
coff-sparc.lo \
|
coff-sparc.lo \
|
||||||
@ -353,8 +350,7 @@ BFD32_BACKENDS = \
|
|||||||
elf32-mt.lo \
|
elf32-mt.lo \
|
||||||
elf32-nds32.lo \
|
elf32-nds32.lo \
|
||||||
elf32-nios2.lo \
|
elf32-nios2.lo \
|
||||||
elf32-openrisc.lo \
|
elf32-or1k.lo \
|
||||||
elf32-or32.lo \
|
|
||||||
elf32-pj.lo \
|
elf32-pj.lo \
|
||||||
elf32-ppc.lo \
|
elf32-ppc.lo \
|
||||||
elf32-rl78.lo \
|
elf32-rl78.lo \
|
||||||
@ -473,7 +469,6 @@ BFD32_BACKENDS_CFILES = \
|
|||||||
coff-m68k.c \
|
coff-m68k.c \
|
||||||
coff-m88k.c \
|
coff-m88k.c \
|
||||||
coff-mips.c \
|
coff-mips.c \
|
||||||
coff-or32.c \
|
|
||||||
coff-rs6000.c \
|
coff-rs6000.c \
|
||||||
coff-sh.c \
|
coff-sh.c \
|
||||||
coff-sparc.c \
|
coff-sparc.c \
|
||||||
@ -542,8 +537,7 @@ BFD32_BACKENDS_CFILES = \
|
|||||||
elf32-mt.c \
|
elf32-mt.c \
|
||||||
elf32-nds32.c \
|
elf32-nds32.c \
|
||||||
elf32-nios2.c \
|
elf32-nios2.c \
|
||||||
elf32-openrisc.c \
|
elf32-or1k.c \
|
||||||
elf32-or32.c \
|
|
||||||
elf32-pj.c \
|
elf32-pj.c \
|
||||||
elf32-ppc.c \
|
elf32-ppc.c \
|
||||||
elf32-rl78.c \
|
elf32-rl78.c \
|
||||||
|
@ -440,8 +440,7 @@ ALL_MACHINES = \
|
|||||||
cpu-nds32.lo \
|
cpu-nds32.lo \
|
||||||
cpu-nios2.lo \
|
cpu-nios2.lo \
|
||||||
cpu-ns32k.lo \
|
cpu-ns32k.lo \
|
||||||
cpu-openrisc.lo \
|
cpu-or1k.lo \
|
||||||
cpu-or32.lo \
|
|
||||||
cpu-pdp11.lo \
|
cpu-pdp11.lo \
|
||||||
cpu-pj.lo \
|
cpu-pj.lo \
|
||||||
cpu-plugin.lo \
|
cpu-plugin.lo \
|
||||||
@ -525,8 +524,7 @@ ALL_MACHINES_CFILES = \
|
|||||||
cpu-nds32.c \
|
cpu-nds32.c \
|
||||||
cpu-ns32k.c \
|
cpu-ns32k.c \
|
||||||
cpu-nios2.c \
|
cpu-nios2.c \
|
||||||
cpu-openrisc.c \
|
cpu-or1k.c \
|
||||||
cpu-or32.c \
|
|
||||||
cpu-pdp11.c \
|
cpu-pdp11.c \
|
||||||
cpu-pj.c \
|
cpu-pj.c \
|
||||||
cpu-plugin.c \
|
cpu-plugin.c \
|
||||||
@ -586,7 +584,6 @@ BFD32_BACKENDS = \
|
|||||||
coff-m68k.lo \
|
coff-m68k.lo \
|
||||||
coff-m88k.lo \
|
coff-m88k.lo \
|
||||||
coff-mips.lo \
|
coff-mips.lo \
|
||||||
coff-or32.lo \
|
|
||||||
coff-rs6000.lo \
|
coff-rs6000.lo \
|
||||||
coff-sh.lo \
|
coff-sh.lo \
|
||||||
coff-sparc.lo \
|
coff-sparc.lo \
|
||||||
@ -655,8 +652,7 @@ BFD32_BACKENDS = \
|
|||||||
elf32-mt.lo \
|
elf32-mt.lo \
|
||||||
elf32-nds32.lo \
|
elf32-nds32.lo \
|
||||||
elf32-nios2.lo \
|
elf32-nios2.lo \
|
||||||
elf32-openrisc.lo \
|
elf32-or1k.lo \
|
||||||
elf32-or32.lo \
|
|
||||||
elf32-pj.lo \
|
elf32-pj.lo \
|
||||||
elf32-ppc.lo \
|
elf32-ppc.lo \
|
||||||
elf32-rl78.lo \
|
elf32-rl78.lo \
|
||||||
@ -775,7 +771,6 @@ BFD32_BACKENDS_CFILES = \
|
|||||||
coff-m68k.c \
|
coff-m68k.c \
|
||||||
coff-m88k.c \
|
coff-m88k.c \
|
||||||
coff-mips.c \
|
coff-mips.c \
|
||||||
coff-or32.c \
|
|
||||||
coff-rs6000.c \
|
coff-rs6000.c \
|
||||||
coff-sh.c \
|
coff-sh.c \
|
||||||
coff-sparc.c \
|
coff-sparc.c \
|
||||||
@ -844,8 +839,7 @@ BFD32_BACKENDS_CFILES = \
|
|||||||
elf32-mt.c \
|
elf32-mt.c \
|
||||||
elf32-nds32.c \
|
elf32-nds32.c \
|
||||||
elf32-nios2.c \
|
elf32-nios2.c \
|
||||||
elf32-openrisc.c \
|
elf32-or1k.c \
|
||||||
elf32-or32.c \
|
|
||||||
elf32-pj.c \
|
elf32-pj.c \
|
||||||
elf32-ppc.c \
|
elf32-ppc.c \
|
||||||
elf32-rl78.c \
|
elf32-rl78.c \
|
||||||
@ -1287,7 +1281,6 @@ distclean-compile:
|
|||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-m68k.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-m68k.Plo@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-m88k.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-m88k.Plo@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-mips.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-mips.Plo@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-or32.Plo@am__quote@
|
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-rs6000.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-rs6000.Plo@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-sh.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-sh.Plo@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-sparc.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-sparc.Plo@am__quote@
|
||||||
@ -1359,8 +1352,7 @@ distclean-compile:
|
|||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-nds32.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-nds32.Plo@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-nios2.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-nios2.Plo@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-ns32k.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-ns32k.Plo@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-openrisc.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-or1k.Plo@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-or32.Plo@am__quote@
|
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-pdp11.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-pdp11.Plo@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-pj.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-pj.Plo@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-plugin.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-plugin.Plo@am__quote@
|
||||||
@ -1449,8 +1441,7 @@ distclean-compile:
|
|||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-mt.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-mt.Plo@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-nds32.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-nds32.Plo@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-nios2.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-nios2.Plo@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-openrisc.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-or1k.Plo@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-or32.Plo@am__quote@
|
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-pj.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-pj.Plo@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-ppc.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-ppc.Plo@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-rl78.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-rl78.Plo@am__quote@
|
||||||
|
@ -121,7 +121,9 @@ DESCRIPTION
|
|||||||
.#define bfd_mach_i960_jx 7
|
.#define bfd_mach_i960_jx 7
|
||||||
.#define bfd_mach_i960_hx 8
|
.#define bfd_mach_i960_hx 8
|
||||||
.
|
.
|
||||||
. bfd_arch_or32, {* OpenRISC 32 *}
|
. bfd_arch_or1k, {* OpenRISC 1000 *}
|
||||||
|
.#define bfd_mach_or1k 1
|
||||||
|
.#define bfd_mach_or1knd 2
|
||||||
.
|
.
|
||||||
. bfd_arch_sparc, {* SPARC *}
|
. bfd_arch_sparc, {* SPARC *}
|
||||||
.#define bfd_mach_sparc 1
|
.#define bfd_mach_sparc 1
|
||||||
@ -433,7 +435,6 @@ DESCRIPTION
|
|||||||
. bfd_arch_score, {* Sunplus score *}
|
. bfd_arch_score, {* Sunplus score *}
|
||||||
.#define bfd_mach_score3 3
|
.#define bfd_mach_score3 3
|
||||||
.#define bfd_mach_score7 7
|
.#define bfd_mach_score7 7
|
||||||
. bfd_arch_openrisc, {* OpenRISC *}
|
|
||||||
. bfd_arch_mmix, {* Donald Knuth's educational processor. *}
|
. bfd_arch_mmix, {* Donald Knuth's educational processor. *}
|
||||||
. bfd_arch_xstormy16,
|
. bfd_arch_xstormy16,
|
||||||
.#define bfd_mach_xstormy16 1
|
.#define bfd_mach_xstormy16 1
|
||||||
@ -583,8 +584,7 @@ extern const bfd_arch_info_type bfd_mt_arch;
|
|||||||
extern const bfd_arch_info_type bfd_nds32_arch;
|
extern const bfd_arch_info_type bfd_nds32_arch;
|
||||||
extern const bfd_arch_info_type bfd_nios2_arch;
|
extern const bfd_arch_info_type bfd_nios2_arch;
|
||||||
extern const bfd_arch_info_type bfd_ns32k_arch;
|
extern const bfd_arch_info_type bfd_ns32k_arch;
|
||||||
extern const bfd_arch_info_type bfd_openrisc_arch;
|
extern const bfd_arch_info_type bfd_or1k_arch;
|
||||||
extern const bfd_arch_info_type bfd_or32_arch;
|
|
||||||
extern const bfd_arch_info_type bfd_pdp11_arch;
|
extern const bfd_arch_info_type bfd_pdp11_arch;
|
||||||
extern const bfd_arch_info_type bfd_pj_arch;
|
extern const bfd_arch_info_type bfd_pj_arch;
|
||||||
extern const bfd_arch_info_type bfd_plugin_arch;
|
extern const bfd_arch_info_type bfd_plugin_arch;
|
||||||
@ -673,8 +673,7 @@ static const bfd_arch_info_type * const bfd_archures_list[] =
|
|||||||
&bfd_nds32_arch,
|
&bfd_nds32_arch,
|
||||||
&bfd_nios2_arch,
|
&bfd_nios2_arch,
|
||||||
&bfd_ns32k_arch,
|
&bfd_ns32k_arch,
|
||||||
&bfd_openrisc_arch,
|
&bfd_or1k_arch,
|
||||||
&bfd_or32_arch,
|
|
||||||
&bfd_pdp11_arch,
|
&bfd_pdp11_arch,
|
||||||
&bfd_powerpc_arch,
|
&bfd_powerpc_arch,
|
||||||
&bfd_rs6000_arch,
|
&bfd_rs6000_arch,
|
||||||
|
@ -1906,7 +1906,9 @@ enum bfd_architecture
|
|||||||
#define bfd_mach_i960_jx 7
|
#define bfd_mach_i960_jx 7
|
||||||
#define bfd_mach_i960_hx 8
|
#define bfd_mach_i960_hx 8
|
||||||
|
|
||||||
bfd_arch_or32, /* OpenRISC 32 */
|
bfd_arch_or1k, /* OpenRISC 1000 */
|
||||||
|
#define bfd_mach_or1k 1
|
||||||
|
#define bfd_mach_or1knd 2
|
||||||
|
|
||||||
bfd_arch_sparc, /* SPARC */
|
bfd_arch_sparc, /* SPARC */
|
||||||
#define bfd_mach_sparc 1
|
#define bfd_mach_sparc 1
|
||||||
@ -2218,7 +2220,6 @@ enum bfd_architecture
|
|||||||
bfd_arch_score, /* Sunplus score */
|
bfd_arch_score, /* Sunplus score */
|
||||||
#define bfd_mach_score3 3
|
#define bfd_mach_score3 3
|
||||||
#define bfd_mach_score7 7
|
#define bfd_mach_score7 7
|
||||||
bfd_arch_openrisc, /* OpenRISC */
|
|
||||||
bfd_arch_mmix, /* Donald Knuth's educational processor. */
|
bfd_arch_mmix, /* Donald Knuth's educational processor. */
|
||||||
bfd_arch_xstormy16,
|
bfd_arch_xstormy16,
|
||||||
#define bfd_mach_xstormy16 1
|
#define bfd_mach_xstormy16 1
|
||||||
@ -5133,9 +5134,31 @@ a matching LO8XG part. */
|
|||||||
BFD_RELOC_860_HIGOT,
|
BFD_RELOC_860_HIGOT,
|
||||||
BFD_RELOC_860_HIGOTOFF,
|
BFD_RELOC_860_HIGOTOFF,
|
||||||
|
|
||||||
/* OpenRISC Relocations. */
|
/* OpenRISC 1000 Relocations. */
|
||||||
BFD_RELOC_OPENRISC_ABS_26,
|
BFD_RELOC_OR1K_REL_26,
|
||||||
BFD_RELOC_OPENRISC_REL_26,
|
BFD_RELOC_OR1K_GOTPC_HI16,
|
||||||
|
BFD_RELOC_OR1K_GOTPC_LO16,
|
||||||
|
BFD_RELOC_OR1K_GOT16,
|
||||||
|
BFD_RELOC_OR1K_PLT26,
|
||||||
|
BFD_RELOC_OR1K_GOTOFF_HI16,
|
||||||
|
BFD_RELOC_OR1K_GOTOFF_LO16,
|
||||||
|
BFD_RELOC_OR1K_COPY,
|
||||||
|
BFD_RELOC_OR1K_GLOB_DAT,
|
||||||
|
BFD_RELOC_OR1K_JMP_SLOT,
|
||||||
|
BFD_RELOC_OR1K_RELATIVE,
|
||||||
|
BFD_RELOC_OR1K_TLS_GD_HI16,
|
||||||
|
BFD_RELOC_OR1K_TLS_GD_LO16,
|
||||||
|
BFD_RELOC_OR1K_TLS_LDM_HI16,
|
||||||
|
BFD_RELOC_OR1K_TLS_LDM_LO16,
|
||||||
|
BFD_RELOC_OR1K_TLS_LDO_HI16,
|
||||||
|
BFD_RELOC_OR1K_TLS_LDO_LO16,
|
||||||
|
BFD_RELOC_OR1K_TLS_IE_HI16,
|
||||||
|
BFD_RELOC_OR1K_TLS_IE_LO16,
|
||||||
|
BFD_RELOC_OR1K_TLS_LE_HI16,
|
||||||
|
BFD_RELOC_OR1K_TLS_LE_LO16,
|
||||||
|
BFD_RELOC_OR1K_TLS_TPOFF,
|
||||||
|
BFD_RELOC_OR1K_TLS_DTPOFF,
|
||||||
|
BFD_RELOC_OR1K_TLS_DTPMOD,
|
||||||
|
|
||||||
/* H8 elf Relocations. */
|
/* H8 elf Relocations. */
|
||||||
BFD_RELOC_H8_DIR16A8,
|
BFD_RELOC_H8_DIR16A8,
|
||||||
|
628
bfd/coff-or32.c
628
bfd/coff-or32.c
@ -1,628 +0,0 @@
|
|||||||
/* BFD back-end for OpenRISC 1000 COFF binaries.
|
|
||||||
Copyright (C) 2002-2014 Free Software Foundation, Inc.
|
|
||||||
Contributed by Ivan Guzvinec <ivang@opencores.org>
|
|
||||||
|
|
||||||
This file is part of BFD, the Binary File Descriptor library.
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
|
||||||
MA 02110-1301, USA. */
|
|
||||||
|
|
||||||
#define OR32 1
|
|
||||||
|
|
||||||
#include "sysdep.h"
|
|
||||||
#include "bfd.h"
|
|
||||||
#include "libbfd.h"
|
|
||||||
#include "coff/or32.h"
|
|
||||||
#include "coff/internal.h"
|
|
||||||
#include "libcoff.h"
|
|
||||||
|
|
||||||
static bfd_reloc_status_type or32_reloc
|
|
||||||
(bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
|
|
||||||
|
|
||||||
#define COFF_DEFAULT_SECTION_ALIGNMENT_POWER (2)
|
|
||||||
|
|
||||||
#define INSERT_HWORD(WORD,HWORD) \
|
|
||||||
(((WORD) & 0xffff0000) | ((HWORD)& 0x0000ffff))
|
|
||||||
#define EXTRACT_HWORD(WORD) \
|
|
||||||
((WORD) & 0x0000ffff)
|
|
||||||
#define SIGN_EXTEND_HWORD(HWORD) \
|
|
||||||
((HWORD) & 0x8000 ? (HWORD)|(~0xffffL) : (HWORD))
|
|
||||||
|
|
||||||
#define INSERT_JUMPTARG(WORD,JT) \
|
|
||||||
(((WORD) & 0xfc000000) | ((JT)& 0x03ffffff))
|
|
||||||
#define EXTRACT_JUMPTARG(WORD) \
|
|
||||||
((WORD) & 0x03ffffff)
|
|
||||||
#define SIGN_EXTEND_JUMPTARG(JT) \
|
|
||||||
((JT) & 0x04000000 ? (JT)|(~0x03ffffffL) : (JT))
|
|
||||||
|
|
||||||
/* Provided the symbol, returns the value reffed. */
|
|
||||||
|
|
||||||
static long
|
|
||||||
get_symbol_value (asymbol *symbol)
|
|
||||||
{
|
|
||||||
long relocation = 0;
|
|
||||||
|
|
||||||
if (bfd_is_com_section (symbol->section))
|
|
||||||
relocation = 0;
|
|
||||||
else
|
|
||||||
relocation = symbol->value +
|
|
||||||
symbol->section->output_section->vma +
|
|
||||||
symbol->section->output_offset;
|
|
||||||
|
|
||||||
return relocation;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* This function is in charge of performing all the or32 relocations. */
|
|
||||||
|
|
||||||
static bfd_reloc_status_type
|
|
||||||
or32_reloc (bfd *abfd,
|
|
||||||
arelent *reloc_entry,
|
|
||||||
asymbol *symbol_in,
|
|
||||||
void * data,
|
|
||||||
asection *input_section,
|
|
||||||
bfd *output_bfd,
|
|
||||||
char **error_message)
|
|
||||||
{
|
|
||||||
/* The consth relocation comes in two parts, we have to remember
|
|
||||||
the state between calls, in these variables. */
|
|
||||||
static bfd_boolean part1_consth_active = FALSE;
|
|
||||||
static unsigned long part1_consth_value;
|
|
||||||
|
|
||||||
unsigned long insn;
|
|
||||||
unsigned long sym_value;
|
|
||||||
unsigned long unsigned_value;
|
|
||||||
unsigned short r_type;
|
|
||||||
long signed_value;
|
|
||||||
|
|
||||||
unsigned long addr = reloc_entry->address ; /*+ input_section->vma*/
|
|
||||||
bfd_byte *hit_data =addr + (bfd_byte *)(data);
|
|
||||||
|
|
||||||
r_type = reloc_entry->howto->type;
|
|
||||||
|
|
||||||
if (output_bfd)
|
|
||||||
{
|
|
||||||
/* Partial linking - do nothing. */
|
|
||||||
reloc_entry->address += input_section->output_offset;
|
|
||||||
return bfd_reloc_ok;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (symbol_in != NULL
|
|
||||||
&& bfd_is_und_section (symbol_in->section))
|
|
||||||
{
|
|
||||||
/* Keep the state machine happy in case we're called again. */
|
|
||||||
if (r_type == R_IHIHALF)
|
|
||||||
{
|
|
||||||
part1_consth_active = TRUE;
|
|
||||||
part1_consth_value = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return bfd_reloc_undefined;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((part1_consth_active) && (r_type != R_IHCONST))
|
|
||||||
{
|
|
||||||
part1_consth_active = FALSE;
|
|
||||||
*error_message = (char *) "Missing IHCONST";
|
|
||||||
|
|
||||||
return bfd_reloc_dangerous;
|
|
||||||
}
|
|
||||||
|
|
||||||
sym_value = get_symbol_value (symbol_in);
|
|
||||||
|
|
||||||
switch (r_type)
|
|
||||||
{
|
|
||||||
case R_IREL:
|
|
||||||
insn = bfd_get_32(abfd, hit_data);
|
|
||||||
|
|
||||||
/* Take the value in the field and sign extend it. */
|
|
||||||
signed_value = EXTRACT_JUMPTARG (insn);
|
|
||||||
signed_value = SIGN_EXTEND_JUMPTARG (signed_value);
|
|
||||||
signed_value <<= 2;
|
|
||||||
|
|
||||||
/* See the note on the R_IREL reloc in coff_or32_relocate_section. */
|
|
||||||
if (signed_value == - (long) reloc_entry->address)
|
|
||||||
signed_value = 0;
|
|
||||||
|
|
||||||
signed_value += sym_value + reloc_entry->addend;
|
|
||||||
/* Relative jmp/call, so subtract from the value the
|
|
||||||
address of the place we're coming from. */
|
|
||||||
signed_value -= (reloc_entry->address
|
|
||||||
+ input_section->output_section->vma
|
|
||||||
+ input_section->output_offset);
|
|
||||||
if (signed_value > 0x7ffffff || signed_value < -0x8000000)
|
|
||||||
return bfd_reloc_overflow;
|
|
||||||
|
|
||||||
signed_value >>= 2;
|
|
||||||
insn = INSERT_JUMPTARG (insn, signed_value);
|
|
||||||
bfd_put_32 (abfd, insn, hit_data);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case R_ILOHALF:
|
|
||||||
insn = bfd_get_32 (abfd, hit_data);
|
|
||||||
unsigned_value = EXTRACT_HWORD (insn);
|
|
||||||
unsigned_value += sym_value + reloc_entry->addend;
|
|
||||||
insn = INSERT_HWORD (insn, unsigned_value);
|
|
||||||
bfd_put_32 (abfd, insn, hit_data);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case R_IHIHALF:
|
|
||||||
insn = bfd_get_32 (abfd, hit_data);
|
|
||||||
|
|
||||||
/* consth, part 1
|
|
||||||
Just get the symbol value that is referenced. */
|
|
||||||
part1_consth_active = TRUE;
|
|
||||||
part1_consth_value = sym_value + reloc_entry->addend;
|
|
||||||
|
|
||||||
/* Don't modify insn until R_IHCONST. */
|
|
||||||
break;
|
|
||||||
|
|
||||||
case R_IHCONST:
|
|
||||||
insn = bfd_get_32 (abfd, hit_data);
|
|
||||||
|
|
||||||
/* consth, part 2
|
|
||||||
Now relocate the reference. */
|
|
||||||
if (! part1_consth_active)
|
|
||||||
{
|
|
||||||
*error_message = (char *) "Missing IHIHALF";
|
|
||||||
return bfd_reloc_dangerous;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* sym_ptr_ptr = r_symndx, in coff_slurp_reloc_table() */
|
|
||||||
unsigned_value = 0; /*EXTRACT_HWORD(insn) << 16;*/
|
|
||||||
unsigned_value += reloc_entry->addend; /* r_symndx */
|
|
||||||
unsigned_value += part1_consth_value;
|
|
||||||
unsigned_value = unsigned_value >> 16;
|
|
||||||
insn = INSERT_HWORD (insn, unsigned_value);
|
|
||||||
part1_consth_active = FALSE;
|
|
||||||
bfd_put_32 (abfd, insn, hit_data);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case R_BYTE:
|
|
||||||
insn = bfd_get_8 (abfd, hit_data);
|
|
||||||
unsigned_value = insn + sym_value + reloc_entry->addend;
|
|
||||||
if (unsigned_value & 0xffffff00)
|
|
||||||
return bfd_reloc_overflow;
|
|
||||||
bfd_put_8 (abfd, unsigned_value, hit_data);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case R_HWORD:
|
|
||||||
insn = bfd_get_16 (abfd, hit_data);
|
|
||||||
unsigned_value = insn + sym_value + reloc_entry->addend;
|
|
||||||
if (unsigned_value & 0xffff0000)
|
|
||||||
return bfd_reloc_overflow;
|
|
||||||
bfd_put_16 (abfd, insn, hit_data);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case R_WORD:
|
|
||||||
insn = bfd_get_32 (abfd, hit_data);
|
|
||||||
insn += sym_value + reloc_entry->addend;
|
|
||||||
bfd_put_32 (abfd, insn, hit_data);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
*error_message = _("Unrecognized reloc");
|
|
||||||
return bfd_reloc_dangerous;
|
|
||||||
}
|
|
||||||
|
|
||||||
return bfd_reloc_ok;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* type rightshift
|
|
||||||
size
|
|
||||||
bitsize
|
|
||||||
pc-relative
|
|
||||||
bitpos
|
|
||||||
absolute
|
|
||||||
complain_on_overflow
|
|
||||||
special_function
|
|
||||||
relocation name
|
|
||||||
partial_inplace
|
|
||||||
src_mask
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* FIXME: I'm not real sure about this table. */
|
|
||||||
static reloc_howto_type howto_table[] =
|
|
||||||
{
|
|
||||||
{ R_ABS, 0, 3, 32, FALSE, 0, complain_overflow_bitfield, or32_reloc, "ABS", TRUE, 0xffffffff,0xffffffff, FALSE },
|
|
||||||
EMPTY_HOWTO (1),
|
|
||||||
EMPTY_HOWTO (2),
|
|
||||||
EMPTY_HOWTO (3),
|
|
||||||
EMPTY_HOWTO (4),
|
|
||||||
EMPTY_HOWTO (5),
|
|
||||||
EMPTY_HOWTO (6),
|
|
||||||
EMPTY_HOWTO (7),
|
|
||||||
EMPTY_HOWTO (8),
|
|
||||||
EMPTY_HOWTO (9),
|
|
||||||
EMPTY_HOWTO (10),
|
|
||||||
EMPTY_HOWTO (11),
|
|
||||||
EMPTY_HOWTO (12),
|
|
||||||
EMPTY_HOWTO (13),
|
|
||||||
EMPTY_HOWTO (14),
|
|
||||||
EMPTY_HOWTO (15),
|
|
||||||
EMPTY_HOWTO (16),
|
|
||||||
EMPTY_HOWTO (17),
|
|
||||||
EMPTY_HOWTO (18),
|
|
||||||
EMPTY_HOWTO (19),
|
|
||||||
EMPTY_HOWTO (20),
|
|
||||||
EMPTY_HOWTO (21),
|
|
||||||
EMPTY_HOWTO (22),
|
|
||||||
EMPTY_HOWTO (23),
|
|
||||||
{ R_IREL, 0, 3, 32, TRUE, 0, complain_overflow_signed, or32_reloc, "IREL", TRUE, 0xffffffff,0xffffffff, FALSE },
|
|
||||||
{ R_IABS, 0, 3, 32, FALSE, 0, complain_overflow_bitfield, or32_reloc, "IABS", TRUE, 0xffffffff,0xffffffff, FALSE },
|
|
||||||
{ R_ILOHALF, 0, 3, 16, TRUE, 0, complain_overflow_signed, or32_reloc, "ILOHALF", TRUE, 0x0000ffff,0x0000ffff, FALSE },
|
|
||||||
{ R_IHIHALF, 0, 3, 16, TRUE, 16,complain_overflow_signed, or32_reloc, "IHIHALF", TRUE, 0xffff0000,0xffff0000, FALSE },
|
|
||||||
{ R_IHCONST, 0, 3, 16, TRUE, 0, complain_overflow_signed, or32_reloc, "IHCONST", TRUE, 0xffff0000,0xffff0000, FALSE },
|
|
||||||
{ R_BYTE, 0, 0, 8, FALSE, 0, complain_overflow_bitfield, or32_reloc, "BYTE", TRUE, 0x000000ff,0x000000ff, FALSE },
|
|
||||||
{ R_HWORD, 0, 1, 16, FALSE, 0, complain_overflow_bitfield, or32_reloc, "HWORD", TRUE, 0x0000ffff,0x0000ffff, FALSE },
|
|
||||||
{ R_WORD, 0, 2, 32, FALSE, 0, complain_overflow_bitfield, or32_reloc, "WORD", TRUE, 0xffffffff,0xffffffff, FALSE },
|
|
||||||
};
|
|
||||||
|
|
||||||
#define BADMAG(x) OR32BADMAG (x)
|
|
||||||
|
|
||||||
#define RELOC_PROCESSING(relent, reloc, symbols, abfd, section) \
|
|
||||||
reloc_processing (relent, reloc, symbols, abfd, section)
|
|
||||||
|
|
||||||
static void
|
|
||||||
reloc_processing (arelent *relent,
|
|
||||||
struct internal_reloc *reloc,
|
|
||||||
asymbol **symbols,
|
|
||||||
bfd *abfd,
|
|
||||||
asection *section)
|
|
||||||
{
|
|
||||||
static bfd_vma ihihalf_vaddr = (bfd_vma) -1;
|
|
||||||
|
|
||||||
relent->address = reloc->r_vaddr;
|
|
||||||
relent->howto = howto_table + reloc->r_type;
|
|
||||||
|
|
||||||
if (reloc->r_type == R_IHCONST)
|
|
||||||
{
|
|
||||||
/* The address of an R_IHCONST should always be the address of
|
|
||||||
the immediately preceding R_IHIHALF. relocs generated by gas
|
|
||||||
are correct, but relocs generated by High C are different (I
|
|
||||||
can't figure out what the address means for High C). We can
|
|
||||||
handle both gas and High C by ignoring the address here, and
|
|
||||||
simply reusing the address saved for R_IHIHALF. */
|
|
||||||
if (ihihalf_vaddr == (bfd_vma) -1)
|
|
||||||
abort ();
|
|
||||||
|
|
||||||
relent->address = ihihalf_vaddr;
|
|
||||||
ihihalf_vaddr = (bfd_vma) -1;
|
|
||||||
relent->addend = reloc->r_symndx;
|
|
||||||
relent->sym_ptr_ptr= bfd_abs_section_ptr->symbol_ptr_ptr;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
relent->sym_ptr_ptr = symbols + obj_convert (abfd)[reloc->r_symndx];
|
|
||||||
relent->addend = 0;
|
|
||||||
relent->address-= section->vma;
|
|
||||||
|
|
||||||
if (reloc->r_type == R_IHIHALF)
|
|
||||||
ihihalf_vaddr = relent->address;
|
|
||||||
else if (ihihalf_vaddr != (bfd_vma) -1)
|
|
||||||
abort ();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* The reloc processing routine for the optimized COFF linker. */
|
|
||||||
|
|
||||||
static bfd_boolean
|
|
||||||
coff_or32_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
|
|
||||||
struct bfd_link_info *info,
|
|
||||||
bfd *input_bfd,
|
|
||||||
asection *input_section,
|
|
||||||
bfd_byte *contents,
|
|
||||||
struct internal_reloc *relocs,
|
|
||||||
struct internal_syment *syms,
|
|
||||||
asection **sections)
|
|
||||||
{
|
|
||||||
struct internal_reloc *rel;
|
|
||||||
struct internal_reloc *relend;
|
|
||||||
bfd_boolean hihalf;
|
|
||||||
bfd_vma hihalf_val;
|
|
||||||
|
|
||||||
/* If we are performing a relocatable link, we don't need to do a
|
|
||||||
thing. The caller will take care of adjusting the reloc
|
|
||||||
addresses and symbol indices. */
|
|
||||||
if (info->relocatable)
|
|
||||||
return TRUE;
|
|
||||||
|
|
||||||
hihalf = FALSE;
|
|
||||||
hihalf_val = 0;
|
|
||||||
|
|
||||||
rel = relocs;
|
|
||||||
relend = rel + input_section->reloc_count;
|
|
||||||
|
|
||||||
for (; rel < relend; rel++)
|
|
||||||
{
|
|
||||||
long symndx;
|
|
||||||
bfd_byte *loc;
|
|
||||||
struct coff_link_hash_entry *h;
|
|
||||||
struct internal_syment *sym;
|
|
||||||
asection *sec;
|
|
||||||
bfd_vma val;
|
|
||||||
bfd_boolean overflow;
|
|
||||||
unsigned long insn;
|
|
||||||
long signed_value;
|
|
||||||
unsigned long unsigned_value;
|
|
||||||
bfd_reloc_status_type rstat;
|
|
||||||
|
|
||||||
symndx = rel->r_symndx;
|
|
||||||
loc = contents + rel->r_vaddr - input_section->vma;
|
|
||||||
|
|
||||||
if (symndx == -1 || rel->r_type == R_IHCONST)
|
|
||||||
h = NULL;
|
|
||||||
else
|
|
||||||
h = obj_coff_sym_hashes (input_bfd)[symndx];
|
|
||||||
|
|
||||||
sym = NULL;
|
|
||||||
sec = NULL;
|
|
||||||
val = 0;
|
|
||||||
|
|
||||||
/* An R_IHCONST reloc does not have a symbol. Instead, the
|
|
||||||
symbol index is an addend. R_IHCONST is always used in
|
|
||||||
conjunction with R_IHHALF. */
|
|
||||||
if (rel->r_type != R_IHCONST)
|
|
||||||
{
|
|
||||||
if (h == NULL)
|
|
||||||
{
|
|
||||||
if (symndx == -1)
|
|
||||||
sec = bfd_abs_section_ptr;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
sym = syms + symndx;
|
|
||||||
sec = sections[symndx];
|
|
||||||
val = (sec->output_section->vma
|
|
||||||
+ sec->output_offset
|
|
||||||
+ sym->n_value
|
|
||||||
- sec->vma);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (h->root.type == bfd_link_hash_defined
|
|
||||||
|| h->root.type == bfd_link_hash_defweak)
|
|
||||||
{
|
|
||||||
sec = h->root.u.def.section;
|
|
||||||
val = (h->root.u.def.value
|
|
||||||
+ sec->output_section->vma
|
|
||||||
+ sec->output_offset);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (! ((*info->callbacks->undefined_symbol)
|
|
||||||
(info, h->root.root.string, input_bfd, input_section,
|
|
||||||
rel->r_vaddr - input_section->vma, TRUE)))
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (hihalf)
|
|
||||||
{
|
|
||||||
if (! ((*info->callbacks->reloc_dangerous)
|
|
||||||
(info, "missing IHCONST reloc", input_bfd,
|
|
||||||
input_section, rel->r_vaddr - input_section->vma)))
|
|
||||||
return FALSE;
|
|
||||||
hihalf = FALSE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
overflow = FALSE;
|
|
||||||
|
|
||||||
switch (rel->r_type)
|
|
||||||
{
|
|
||||||
default:
|
|
||||||
bfd_set_error (bfd_error_bad_value);
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
case R_IREL:
|
|
||||||
insn = bfd_get_32 (input_bfd, loc);
|
|
||||||
|
|
||||||
/* Extract the addend. */
|
|
||||||
signed_value = EXTRACT_JUMPTARG (insn);
|
|
||||||
signed_value = SIGN_EXTEND_JUMPTARG (signed_value);
|
|
||||||
signed_value <<= 2;
|
|
||||||
|
|
||||||
/* Determine the destination of the jump. */
|
|
||||||
signed_value += val;
|
|
||||||
|
|
||||||
/* Make the destination PC relative. */
|
|
||||||
signed_value -= (input_section->output_section->vma
|
|
||||||
+ input_section->output_offset
|
|
||||||
+ (rel->r_vaddr - input_section->vma));
|
|
||||||
if (signed_value > 0x7ffffff || signed_value < - 0x8000000)
|
|
||||||
{
|
|
||||||
overflow = TRUE;
|
|
||||||
signed_value = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Put the adjusted value back into the instruction. */
|
|
||||||
signed_value >>= 2;
|
|
||||||
insn = INSERT_JUMPTARG(insn, signed_value);
|
|
||||||
|
|
||||||
bfd_put_32 (input_bfd, (bfd_vma) insn, loc);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case R_ILOHALF:
|
|
||||||
insn = bfd_get_32 (input_bfd, loc);
|
|
||||||
unsigned_value = EXTRACT_HWORD (insn);
|
|
||||||
unsigned_value += val;
|
|
||||||
insn = INSERT_HWORD (insn, unsigned_value);
|
|
||||||
bfd_put_32 (input_bfd, insn, loc);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case R_IHIHALF:
|
|
||||||
/* Save the value for the R_IHCONST reloc. */
|
|
||||||
hihalf = TRUE;
|
|
||||||
hihalf_val = val;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case R_IHCONST:
|
|
||||||
if (! hihalf)
|
|
||||||
{
|
|
||||||
if (! ((*info->callbacks->reloc_dangerous)
|
|
||||||
(info, "missing IHIHALF reloc", input_bfd,
|
|
||||||
input_section, rel->r_vaddr - input_section->vma)))
|
|
||||||
return FALSE;
|
|
||||||
hihalf_val = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
insn = bfd_get_32 (input_bfd, loc);
|
|
||||||
unsigned_value = rel->r_symndx + hihalf_val;
|
|
||||||
unsigned_value >>= 16;
|
|
||||||
insn = INSERT_HWORD (insn, unsigned_value);
|
|
||||||
bfd_put_32 (input_bfd, (bfd_vma) insn, loc);
|
|
||||||
|
|
||||||
hihalf = FALSE;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case R_BYTE:
|
|
||||||
case R_HWORD:
|
|
||||||
case R_WORD:
|
|
||||||
rstat = _bfd_relocate_contents (howto_table + rel->r_type,
|
|
||||||
input_bfd, val, loc);
|
|
||||||
if (rstat == bfd_reloc_overflow)
|
|
||||||
overflow = TRUE;
|
|
||||||
else if (rstat != bfd_reloc_ok)
|
|
||||||
abort ();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (overflow)
|
|
||||||
{
|
|
||||||
const char *name;
|
|
||||||
char buf[SYMNMLEN + 1];
|
|
||||||
|
|
||||||
if (symndx == -1)
|
|
||||||
name = "*ABS*";
|
|
||||||
else if (h != NULL)
|
|
||||||
name = NULL;
|
|
||||||
else if (sym == NULL)
|
|
||||||
name = "*unknown*";
|
|
||||||
else if (sym->_n._n_n._n_zeroes == 0
|
|
||||||
&& sym->_n._n_n._n_offset != 0)
|
|
||||||
name = obj_coff_strings (input_bfd) + sym->_n._n_n._n_offset;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
strncpy (buf, sym->_n._n_name, SYMNMLEN);
|
|
||||||
buf[SYMNMLEN] = '\0';
|
|
||||||
name = buf;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (! ((*info->callbacks->reloc_overflow)
|
|
||||||
(info, (h ? &h->root : NULL), name,
|
|
||||||
howto_table[rel->r_type].name, (bfd_vma) 0, input_bfd,
|
|
||||||
input_section, rel->r_vaddr - input_section->vma)))
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define coff_relocate_section coff_or32_relocate_section
|
|
||||||
|
|
||||||
/* We don't want to change the symndx of a R_IHCONST reloc, since it
|
|
||||||
is actually an addend, not a symbol index at all. */
|
|
||||||
|
|
||||||
static bfd_boolean
|
|
||||||
coff_or32_adjust_symndx (bfd *obfd ATTRIBUTE_UNUSED,
|
|
||||||
struct bfd_link_info *info ATTRIBUTE_UNUSED,
|
|
||||||
bfd *ibfd ATTRIBUTE_UNUSED,
|
|
||||||
asection *sec ATTRIBUTE_UNUSED,
|
|
||||||
struct internal_reloc *irel,
|
|
||||||
bfd_boolean *adjustedp)
|
|
||||||
{
|
|
||||||
if (irel->r_type == R_IHCONST)
|
|
||||||
*adjustedp = TRUE;
|
|
||||||
else
|
|
||||||
*adjustedp = FALSE;
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define coff_adjust_symndx coff_or32_adjust_symndx
|
|
||||||
|
|
||||||
#ifndef bfd_pe_print_pdata
|
|
||||||
#define bfd_pe_print_pdata NULL
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "coffcode.h"
|
|
||||||
|
|
||||||
const bfd_target or32coff_big_vec =
|
|
||||||
{
|
|
||||||
"coff-or32-big", /* Name. */
|
|
||||||
bfd_target_coff_flavour,
|
|
||||||
BFD_ENDIAN_BIG, /* Data byte order is big. */
|
|
||||||
BFD_ENDIAN_BIG, /* Header byte order is big. */
|
|
||||||
|
|
||||||
(HAS_RELOC | EXEC_P | /* Object flags. */
|
|
||||||
HAS_LINENO | HAS_DEBUG |
|
|
||||||
HAS_SYMS | HAS_LOCALS | WP_TEXT),
|
|
||||||
|
|
||||||
(SEC_HAS_CONTENTS | SEC_ALLOC | /* Section flags. */
|
|
||||||
SEC_LOAD | SEC_RELOC |
|
|
||||||
SEC_READONLY ),
|
|
||||||
'_', /* Leading underscore. */
|
|
||||||
'/', /* ar_pad_char. */
|
|
||||||
15, /* ar_max_namelen. */
|
|
||||||
0, /* match priority. */
|
|
||||||
|
|
||||||
/* Data. */
|
|
||||||
bfd_getb64, bfd_getb_signed_64, bfd_putb64,
|
|
||||||
bfd_getb32, bfd_getb_signed_32, bfd_putb32,
|
|
||||||
bfd_getb16, bfd_getb_signed_16, bfd_putb16,
|
|
||||||
|
|
||||||
/* Headers. */
|
|
||||||
bfd_getb64, bfd_getb_signed_64, bfd_putb64,
|
|
||||||
bfd_getb32, bfd_getb_signed_32, bfd_putb32,
|
|
||||||
bfd_getb16, bfd_getb_signed_16, bfd_putb16,
|
|
||||||
|
|
||||||
{
|
|
||||||
_bfd_dummy_target,
|
|
||||||
coff_object_p,
|
|
||||||
bfd_generic_archive_p,
|
|
||||||
_bfd_dummy_target
|
|
||||||
},
|
|
||||||
{
|
|
||||||
bfd_false,
|
|
||||||
coff_mkobject,
|
|
||||||
_bfd_generic_mkarchive,
|
|
||||||
bfd_false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
bfd_false,
|
|
||||||
coff_write_object_contents,
|
|
||||||
_bfd_write_archive_contents,
|
|
||||||
bfd_false
|
|
||||||
},
|
|
||||||
|
|
||||||
BFD_JUMP_TABLE_GENERIC (coff),
|
|
||||||
BFD_JUMP_TABLE_COPY (coff),
|
|
||||||
BFD_JUMP_TABLE_CORE (_bfd_nocore),
|
|
||||||
BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff),
|
|
||||||
BFD_JUMP_TABLE_SYMBOLS (coff),
|
|
||||||
BFD_JUMP_TABLE_RELOCS (coff),
|
|
||||||
BFD_JUMP_TABLE_WRITE (coff),
|
|
||||||
BFD_JUMP_TABLE_LINK (coff),
|
|
||||||
BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
|
|
||||||
|
|
||||||
/* Alternative_target. */
|
|
||||||
#ifdef TARGET_LITTLE_SYM
|
|
||||||
& TARGET_LITTLE_SYM,
|
|
||||||
#else
|
|
||||||
NULL,
|
|
||||||
#endif
|
|
||||||
|
|
||||||
COFF_SWAP_TABLE
|
|
||||||
};
|
|
@ -2096,12 +2096,6 @@ coff_set_arch_mach_hook (bfd *abfd, void * filehdr)
|
|||||||
machine = 0;
|
machine = 0;
|
||||||
switch (internal_f->f_magic)
|
switch (internal_f->f_magic)
|
||||||
{
|
{
|
||||||
#ifdef OR32_MAGIC_BIG
|
|
||||||
case OR32_MAGIC_BIG:
|
|
||||||
case OR32_MAGIC_LITTLE:
|
|
||||||
arch = bfd_arch_or32;
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
#ifdef PPCMAGIC
|
#ifdef PPCMAGIC
|
||||||
case PPCMAGIC:
|
case PPCMAGIC:
|
||||||
arch = bfd_arch_powerpc;
|
arch = bfd_arch_powerpc;
|
||||||
@ -3068,15 +3062,6 @@ coff_set_flags (bfd * abfd,
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef OR32_MAGIC_BIG
|
|
||||||
case bfd_arch_or32:
|
|
||||||
if (bfd_big_endian (abfd))
|
|
||||||
* magicp = OR32_MAGIC_BIG;
|
|
||||||
else
|
|
||||||
* magicp = OR32_MAGIC_LITTLE;
|
|
||||||
return TRUE;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
default: /* Unknown architecture. */
|
default: /* Unknown architecture. */
|
||||||
/* Fall through to "return FALSE" below, to avoid
|
/* Fall through to "return FALSE" below, to avoid
|
||||||
"statement never reached" errors on the one below. */
|
"statement never reached" errors on the one below. */
|
||||||
@ -4158,11 +4143,6 @@ coff_write_object_contents (bfd * abfd)
|
|||||||
internal_a.magic = MIPS_PE_MAGIC;
|
internal_a.magic = MIPS_PE_MAGIC;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef OR32
|
|
||||||
#define __A_MAGIC_SET__
|
|
||||||
internal_a.magic = NMAGIC; /* Assume separate i/d. */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef __A_MAGIC_SET__
|
#ifndef __A_MAGIC_SET__
|
||||||
#include "Your aouthdr magic number is not being set!"
|
#include "Your aouthdr magic number is not being set!"
|
||||||
#else
|
#else
|
||||||
|
@ -48,6 +48,11 @@ targ_underscore=no
|
|||||||
|
|
||||||
# Catch obsolete configurations.
|
# Catch obsolete configurations.
|
||||||
case $targ in
|
case $targ in
|
||||||
|
openrisc-*-* | or32-*-*)
|
||||||
|
echo "*** Configuration $targ is obsolete." >&2
|
||||||
|
echo "*** Use or1k-*-elf or or1k-*-linux as the target instead" >&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
null)
|
null)
|
||||||
if test "x$enable_obsolete" != xyes; then
|
if test "x$enable_obsolete" != xyes; then
|
||||||
echo "*** Configuration $targ is obsolete." >&2
|
echo "*** Configuration $targ is obsolete." >&2
|
||||||
@ -59,24 +64,24 @@ case $targ in
|
|||||||
esac
|
esac
|
||||||
|
|
||||||
case $targ in
|
case $targ in
|
||||||
m68*-apple-aux* | \
|
|
||||||
m68*-apollo-* | \
|
|
||||||
m68*-bull-sysv* | \
|
|
||||||
m68*-*-rtemscoff* | \
|
|
||||||
maxq-*-coff | \
|
|
||||||
i960-*-rtems* | \
|
|
||||||
or32-*-rtems* | \
|
|
||||||
m68*-*-lynxos* | \
|
|
||||||
sparc-*-lynxos* | \
|
|
||||||
vax-*-vms* | \
|
|
||||||
arm-*-oabi | \
|
|
||||||
a29k-* | \
|
|
||||||
hppa*-*-rtems* | \
|
|
||||||
*-go32-rtems* | \
|
*-go32-rtems* | \
|
||||||
|
a29k-* | \
|
||||||
|
arm-*-oabi | \
|
||||||
|
hppa*-*-rtems* | \
|
||||||
|
i960-*-rtems* | \
|
||||||
i[3-7]86*-*-rtemscoff* | \
|
i[3-7]86*-*-rtemscoff* | \
|
||||||
|
m68*-*-lynxos* | \
|
||||||
|
m68*-*-rtemscoff* | \
|
||||||
|
m68*-apollo-* | \
|
||||||
|
m68*-apple-aux* | \
|
||||||
|
m68*-bull-sysv* | \
|
||||||
|
maxq-*-coff | \
|
||||||
mips*el-*-rtems* | \
|
mips*el-*-rtems* | \
|
||||||
|
or1k-*-rtems* | \
|
||||||
powerpcle-*-rtems* | \
|
powerpcle-*-rtems* | \
|
||||||
sparc*-*-rtemsaout* | \
|
sparc*-*-rtemsaout* | \
|
||||||
|
sparc-*-lynxos* | \
|
||||||
|
vax-*-vms* | \
|
||||||
null)
|
null)
|
||||||
echo "*** Configuration $targ is obsolete." >&2
|
echo "*** Configuration $targ is obsolete." >&2
|
||||||
echo "*** Support has been REMOVED." >&2
|
echo "*** Support has been REMOVED." >&2
|
||||||
@ -111,7 +116,7 @@ microblaze*) targ_archs=bfd_microblaze_arch ;;
|
|||||||
mips*) targ_archs=bfd_mips_arch ;;
|
mips*) targ_archs=bfd_mips_arch ;;
|
||||||
nds32*) targ_archs=bfd_nds32_arch ;;
|
nds32*) targ_archs=bfd_nds32_arch ;;
|
||||||
nios2*) targ_archs=bfd_nios2_arch ;;
|
nios2*) targ_archs=bfd_nios2_arch ;;
|
||||||
or32*) targ_archs=bfd_or32_arch ;;
|
or1k*|or1knd*) targ_archs=bfd_or1k_arch ;;
|
||||||
pdp11*) targ_archs=bfd_pdp11_arch ;;
|
pdp11*) targ_archs=bfd_pdp11_arch ;;
|
||||||
pj*) targ_archs="bfd_pj_arch bfd_i386_arch";;
|
pj*) targ_archs="bfd_pj_arch bfd_i386_arch";;
|
||||||
powerpc*) targ_archs="bfd_rs6000_arch bfd_powerpc_arch" ;;
|
powerpc*) targ_archs="bfd_rs6000_arch bfd_powerpc_arch" ;;
|
||||||
@ -1165,17 +1170,12 @@ case "${targ}" in
|
|||||||
targ_selvecs=bfd_elf32_bignios2_vec
|
targ_selvecs=bfd_elf32_bignios2_vec
|
||||||
;;
|
;;
|
||||||
|
|
||||||
openrisc-*-elf)
|
or1k-*-elf | or1k-*-linux*)
|
||||||
targ_defvec=bfd_elf32_openrisc_vec
|
targ_defvec=bfd_elf32_or1k_vec
|
||||||
;;
|
;;
|
||||||
|
|
||||||
or32-*-coff)
|
or1knd-*-elf | or1knd-*-linux*)
|
||||||
targ_defvec=or32coff_big_vec
|
targ_defvec=bfd_elf32_or1k_vec
|
||||||
targ_underscore=yes
|
|
||||||
;;
|
|
||||||
|
|
||||||
or32-*-elf)
|
|
||||||
targ_defvec=bfd_elf32_or32_big_vec
|
|
||||||
;;
|
;;
|
||||||
|
|
||||||
pdp11-*-*)
|
pdp11-*-*)
|
||||||
|
4
bfd/configure
vendored
4
bfd/configure
vendored
@ -15322,8 +15322,7 @@ do
|
|||||||
bfd_elf32_nds32le_vec) tb="$tb elf32-nds32.lo elf32.lo $elf" ;;
|
bfd_elf32_nds32le_vec) tb="$tb elf32-nds32.lo elf32.lo $elf" ;;
|
||||||
bfd_elf32_nds32belin_vec) tb="$tb elf32-nds32.lo elf32.lo $elf" ;;
|
bfd_elf32_nds32belin_vec) tb="$tb elf32-nds32.lo elf32.lo $elf" ;;
|
||||||
bfd_elf32_nds32lelin_vec) tb="$tb elf32-nds32.lo elf32.lo $elf" ;;
|
bfd_elf32_nds32lelin_vec) tb="$tb elf32-nds32.lo elf32.lo $elf" ;;
|
||||||
bfd_elf32_openrisc_vec) tb="$tb elf32-openrisc.lo elf32.lo $elf" ;;
|
bfd_elf32_or1k_vec) tb="$tb elf32-or1k.lo elf32.lo $elf" ;;
|
||||||
bfd_elf32_or32_big_vec) tb="$tb elf32-or32.lo elf32.lo $elf" ;;
|
|
||||||
bfd_elf32_pj_vec) tb="$tb elf32-pj.lo elf32.lo $elf";;
|
bfd_elf32_pj_vec) tb="$tb elf32-pj.lo elf32.lo $elf";;
|
||||||
bfd_elf32_pjl_vec) tb="$tb elf32-pj.lo elf32.lo $elf";;
|
bfd_elf32_pjl_vec) tb="$tb elf32-pj.lo elf32.lo $elf";;
|
||||||
bfd_elf32_powerpc_vec) tb="$tb elf32-ppc.lo elf-vxworks.lo elf32.lo $elf" ;;
|
bfd_elf32_powerpc_vec) tb="$tb elf32-ppc.lo elf-vxworks.lo elf32.lo $elf" ;;
|
||||||
@ -15495,7 +15494,6 @@ do
|
|||||||
nlm32_i386_vec) tb="$tb nlm32-i386.lo nlm32.lo nlm.lo" ;;
|
nlm32_i386_vec) tb="$tb nlm32-i386.lo nlm32.lo nlm.lo" ;;
|
||||||
nlm32_powerpc_vec) tb="$tb nlm32-ppc.lo nlm32.lo nlm.lo" ;;
|
nlm32_powerpc_vec) tb="$tb nlm32-ppc.lo nlm32.lo nlm.lo" ;;
|
||||||
nlm32_sparc_vec) tb="$tb nlm32-sparc.lo nlm32.lo nlm.lo" ;;
|
nlm32_sparc_vec) tb="$tb nlm32-sparc.lo nlm32.lo nlm.lo" ;;
|
||||||
or32coff_big_vec) tb="$tb coff-or32.lo cofflink.lo" ;;
|
|
||||||
pc532machaout_vec) tb="$tb pc532-mach.lo aout-ns32k.lo" ;;
|
pc532machaout_vec) tb="$tb pc532-mach.lo aout-ns32k.lo" ;;
|
||||||
pc532netbsd_vec) tb="$tb ns32knetbsd.lo aout-ns32k.lo" ;;
|
pc532netbsd_vec) tb="$tb ns32knetbsd.lo aout-ns32k.lo" ;;
|
||||||
pef_vec) tb="$tb pef.lo" ;;
|
pef_vec) tb="$tb pef.lo" ;;
|
||||||
|
@ -578,6 +578,11 @@ changequote([,])dnl
|
|||||||
SHARED_LDFLAGS="-no-undefined"
|
SHARED_LDFLAGS="-no-undefined"
|
||||||
SHARED_LIBADD="-L`pwd`/../libiberty -liberty -L`pwd`/../intl -lintl -lcygwin -lkernel32"
|
SHARED_LIBADD="-L`pwd`/../libiberty -liberty -L`pwd`/../intl -lintl -lcygwin -lkernel32"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
# Hack to build or1k-src on OSX
|
||||||
|
or1k*-*-darwin*)
|
||||||
|
SHARED_LIBADD="-L`pwd`/../libiberty/pic -L`pwd`/../intl -liberty -lintl"
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
if test -n "$SHARED_LIBADD"; then
|
if test -n "$SHARED_LIBADD"; then
|
||||||
@ -801,8 +806,7 @@ do
|
|||||||
bfd_elf32_nds32le_vec) tb="$tb elf32-nds32.lo elf32.lo $elf" ;;
|
bfd_elf32_nds32le_vec) tb="$tb elf32-nds32.lo elf32.lo $elf" ;;
|
||||||
bfd_elf32_nds32belin_vec) tb="$tb elf32-nds32.lo elf32.lo $elf" ;;
|
bfd_elf32_nds32belin_vec) tb="$tb elf32-nds32.lo elf32.lo $elf" ;;
|
||||||
bfd_elf32_nds32lelin_vec) tb="$tb elf32-nds32.lo elf32.lo $elf" ;;
|
bfd_elf32_nds32lelin_vec) tb="$tb elf32-nds32.lo elf32.lo $elf" ;;
|
||||||
bfd_elf32_openrisc_vec) tb="$tb elf32-openrisc.lo elf32.lo $elf" ;;
|
bfd_elf32_or1k_vec) tb="$tb elf32-or1k.lo elf32.lo $elf" ;;
|
||||||
bfd_elf32_or32_big_vec) tb="$tb elf32-or32.lo elf32.lo $elf" ;;
|
|
||||||
bfd_elf32_pj_vec) tb="$tb elf32-pj.lo elf32.lo $elf";;
|
bfd_elf32_pj_vec) tb="$tb elf32-pj.lo elf32.lo $elf";;
|
||||||
bfd_elf32_pjl_vec) tb="$tb elf32-pj.lo elf32.lo $elf";;
|
bfd_elf32_pjl_vec) tb="$tb elf32-pj.lo elf32.lo $elf";;
|
||||||
bfd_elf32_powerpc_vec) tb="$tb elf32-ppc.lo elf-vxworks.lo elf32.lo $elf" ;;
|
bfd_elf32_powerpc_vec) tb="$tb elf32-ppc.lo elf-vxworks.lo elf32.lo $elf" ;;
|
||||||
@ -974,7 +978,6 @@ do
|
|||||||
nlm32_i386_vec) tb="$tb nlm32-i386.lo nlm32.lo nlm.lo" ;;
|
nlm32_i386_vec) tb="$tb nlm32-i386.lo nlm32.lo nlm.lo" ;;
|
||||||
nlm32_powerpc_vec) tb="$tb nlm32-ppc.lo nlm32.lo nlm.lo" ;;
|
nlm32_powerpc_vec) tb="$tb nlm32-ppc.lo nlm32.lo nlm.lo" ;;
|
||||||
nlm32_sparc_vec) tb="$tb nlm32-sparc.lo nlm32.lo nlm.lo" ;;
|
nlm32_sparc_vec) tb="$tb nlm32-sparc.lo nlm32.lo nlm.lo" ;;
|
||||||
or32coff_big_vec) tb="$tb coff-or32.lo cofflink.lo" ;;
|
|
||||||
pc532machaout_vec) tb="$tb pc532-mach.lo aout-ns32k.lo" ;;
|
pc532machaout_vec) tb="$tb pc532-mach.lo aout-ns32k.lo" ;;
|
||||||
pc532netbsd_vec) tb="$tb ns32knetbsd.lo aout-ns32k.lo" ;;
|
pc532netbsd_vec) tb="$tb ns32knetbsd.lo aout-ns32k.lo" ;;
|
||||||
pef_vec) tb="$tb pef.lo" ;;
|
pef_vec) tb="$tb pef.lo" ;;
|
||||||
|
@ -1,44 +0,0 @@
|
|||||||
/* BFD support for the OpenRISC architecture.
|
|
||||||
Copyright (C) 2001-2014 Free Software Foundation, Inc.
|
|
||||||
Contributed by Johan Rydberg, jrydberg@opencores.org
|
|
||||||
|
|
||||||
This file is part of BFD, the Binary File Descriptor library.
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
|
||||||
MA 02110-1301, USA. */
|
|
||||||
|
|
||||||
#include "sysdep.h"
|
|
||||||
#include "bfd.h"
|
|
||||||
#include "libbfd.h"
|
|
||||||
|
|
||||||
#define N(BITS_WORD, BITS_ADDR, NUMBER, PRINT, DEFAULT, NEXT) \
|
|
||||||
{ \
|
|
||||||
BITS_WORD, /* bits in a word */ \
|
|
||||||
BITS_ADDR, /* bits in an address */ \
|
|
||||||
8, /* 8 bits in a byte */ \
|
|
||||||
bfd_arch_openrisc, \
|
|
||||||
NUMBER, \
|
|
||||||
"openrisc", \
|
|
||||||
PRINT, \
|
|
||||||
2, \
|
|
||||||
DEFAULT, \
|
|
||||||
bfd_default_compatible, \
|
|
||||||
bfd_default_scan, \
|
|
||||||
bfd_arch_default_fill, \
|
|
||||||
NEXT, \
|
|
||||||
}
|
|
||||||
|
|
||||||
const bfd_arch_info_type bfd_openrisc_arch =
|
|
||||||
N (32, 32, 0, "openrisc", TRUE, 0);
|
|
@ -1,6 +1,6 @@
|
|||||||
/* BFD support for the OpenRISC 1000 architecture.
|
/* BFD support for the OpenRISC 1000 architecture.
|
||||||
Copyright (C) 2002-2014 Free Software Foundation, Inc.
|
Copyright 2002-2014 Free Software Foundation, Inc.
|
||||||
Contributed by Ivan Guzvinec <ivang@opencores.org>
|
Contributed for OR32 by Ivan Guzvinec <ivang@opencores.org>
|
||||||
|
|
||||||
This file is part of BFD, the Binary File Descriptor library.
|
This file is part of BFD, the Binary File Descriptor library.
|
||||||
|
|
||||||
@ -15,28 +15,45 @@
|
|||||||
GNU General Public License for more details.
|
GNU General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with this program; if not, write to the Free Software
|
along with this program; if not, see <http://www.gnu.org/licenses/>. */
|
||||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
|
||||||
MA 02110-1301, USA. */
|
|
||||||
|
|
||||||
#include "sysdep.h"
|
#include "sysdep.h"
|
||||||
#include "bfd.h"
|
#include "bfd.h"
|
||||||
#include "libbfd.h"
|
#include "libbfd.h"
|
||||||
|
|
||||||
const bfd_arch_info_type bfd_or32_arch =
|
const bfd_arch_info_type bfd_or1k_arch;
|
||||||
|
const bfd_arch_info_type bfd_or1knd_arch;
|
||||||
|
|
||||||
|
const bfd_arch_info_type bfd_or1k_arch =
|
||||||
{
|
{
|
||||||
32, /* 32 bits in a word. */
|
32, /* 32 bits in a word. */
|
||||||
32, /* 32 bits in an address. */
|
32, /* 32 bits in an address. */
|
||||||
8, /* 8 bits in a byte. */
|
8, /* 8 bits in a byte. */
|
||||||
bfd_arch_or32,
|
bfd_arch_or1k,
|
||||||
0, /* Only 1 machine. */
|
bfd_mach_or1k,
|
||||||
"or32",
|
"or1k",
|
||||||
"or32",
|
"or1k",
|
||||||
4,
|
4,
|
||||||
TRUE, /* The one and only. */
|
TRUE,
|
||||||
bfd_default_compatible,
|
bfd_default_compatible,
|
||||||
bfd_default_scan,
|
bfd_default_scan,
|
||||||
bfd_arch_default_fill,
|
bfd_arch_default_fill,
|
||||||
0,
|
&bfd_or1knd_arch,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const bfd_arch_info_type bfd_or1knd_arch =
|
||||||
|
{
|
||||||
|
32, /* 32 bits in a word. */
|
||||||
|
32, /* 32 bits in an address. */
|
||||||
|
8, /* 8 bits in a byte. */
|
||||||
|
bfd_arch_or1k,
|
||||||
|
bfd_mach_or1knd,
|
||||||
|
"or1knd",
|
||||||
|
"or1knd",
|
||||||
|
4,
|
||||||
|
FALSE,
|
||||||
|
bfd_default_compatible,
|
||||||
|
bfd_default_scan,
|
||||||
|
bfd_arch_default_fill,
|
||||||
|
NULL,
|
||||||
|
};
|
@ -421,6 +421,7 @@ enum elf_target_id
|
|||||||
MN10300_ELF_DATA,
|
MN10300_ELF_DATA,
|
||||||
NDS32_ELF_DATA,
|
NDS32_ELF_DATA,
|
||||||
NIOS2_ELF_DATA,
|
NIOS2_ELF_DATA,
|
||||||
|
OR1K_ELF_DATA,
|
||||||
PPC32_ELF_DATA,
|
PPC32_ELF_DATA,
|
||||||
PPC64_ELF_DATA,
|
PPC64_ELF_DATA,
|
||||||
S390_ELF_DATA,
|
S390_ELF_DATA,
|
||||||
|
@ -1,569 +0,0 @@
|
|||||||
/* OpenRISC-specific support for 32-bit ELF.
|
|
||||||
Copyright (C) 2001-2014 Free Software Foundation, Inc.
|
|
||||||
Contributed by Johan Rydberg, jrydberg@opencores.org
|
|
||||||
|
|
||||||
This file is part of BFD, the Binary File Descriptor library.
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
|
||||||
MA 02110-1301, USA. */
|
|
||||||
|
|
||||||
#include "sysdep.h"
|
|
||||||
#include "bfd.h"
|
|
||||||
#include "libbfd.h"
|
|
||||||
#include "elf-bfd.h"
|
|
||||||
#include "elf/openrisc.h"
|
|
||||||
#include "libiberty.h"
|
|
||||||
|
|
||||||
static reloc_howto_type openrisc_elf_howto_table[] =
|
|
||||||
{
|
|
||||||
/* This reloc does nothing. */
|
|
||||||
HOWTO (R_OPENRISC_NONE, /* type */
|
|
||||||
0, /* rightshift */
|
|
||||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
|
||||||
32, /* bitsize */
|
|
||||||
FALSE, /* pc_relative */
|
|
||||||
0, /* bitpos */
|
|
||||||
complain_overflow_bitfield, /* complain_on_overflow */
|
|
||||||
bfd_elf_generic_reloc, /* special_function */
|
|
||||||
"R_OPENRISC_NONE", /* name */
|
|
||||||
FALSE, /* partial_inplace */
|
|
||||||
0, /* src_mask */
|
|
||||||
0, /* dst_mask */
|
|
||||||
FALSE), /* pcrel_offset */
|
|
||||||
|
|
||||||
/* A PC relative 26 bit relocation, right shifted by 2. */
|
|
||||||
HOWTO (R_OPENRISC_INSN_REL_26, /* type */
|
|
||||||
2, /* rightshift */
|
|
||||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
|
||||||
26, /* bitsize */
|
|
||||||
TRUE, /* pc_relative */
|
|
||||||
0, /* bitpos */
|
|
||||||
complain_overflow_signed, /* complain_on_overflow */
|
|
||||||
bfd_elf_generic_reloc, /* special_function */
|
|
||||||
"R_OPENRISC_INSN_REL_26", /* name */
|
|
||||||
FALSE, /* partial_inplace */
|
|
||||||
0x00000000, /* src_mask */
|
|
||||||
0x03ffffff, /* dst_mask */
|
|
||||||
FALSE), /* pcrel_offset */
|
|
||||||
|
|
||||||
/* A absolute 26 bit relocation, right shifted by 2. */
|
|
||||||
HOWTO (R_OPENRISC_INSN_ABS_26, /* type */
|
|
||||||
2, /* rightshift */
|
|
||||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
|
||||||
26, /* bitsize */
|
|
||||||
FALSE, /* pc_relative */
|
|
||||||
0, /* bitpos */
|
|
||||||
complain_overflow_signed, /* complain_on_overflow */
|
|
||||||
bfd_elf_generic_reloc, /* special_function */
|
|
||||||
"R_OPENRISC_INSN_ABS_26", /* name */
|
|
||||||
FALSE, /* partial_inplace */
|
|
||||||
0x00000000, /* src_mask */
|
|
||||||
0x03ffffff, /* dst_mask */
|
|
||||||
FALSE), /* pcrel_offset */
|
|
||||||
|
|
||||||
HOWTO (R_OPENRISC_LO_16_IN_INSN, /* type */
|
|
||||||
0, /* rightshift */
|
|
||||||
1, /* size (0 = byte, 1 = short, 2 = long) */
|
|
||||||
16, /* bitsize */
|
|
||||||
FALSE, /* pc_relative */
|
|
||||||
0, /* bitpos */
|
|
||||||
complain_overflow_dont, /* complain_on_overflow */
|
|
||||||
bfd_elf_generic_reloc, /* special_function */
|
|
||||||
"R_OPENRISC_LO_16_IN_INSN", /* name */
|
|
||||||
FALSE, /* partial_inplace */
|
|
||||||
0, /* src_mask */
|
|
||||||
0x0000ffff, /* dst_mask */
|
|
||||||
FALSE), /* pcrel_offset */
|
|
||||||
|
|
||||||
HOWTO (R_OPENRISC_HI_16_IN_INSN, /* type */
|
|
||||||
16, /* rightshift */
|
|
||||||
1, /* size (0 = byte, 1 = short, 2 = long) */
|
|
||||||
16, /* bitsize */
|
|
||||||
FALSE, /* pc_relative */
|
|
||||||
0, /* bitpos */
|
|
||||||
complain_overflow_dont, /* complain_on_overflow */
|
|
||||||
bfd_elf_generic_reloc, /* special_function */
|
|
||||||
"R_OPENRISC_HI_16_IN_INSN", /* name */
|
|
||||||
FALSE, /* partial_inplace */
|
|
||||||
0, /* src_mask */
|
|
||||||
0x0000ffff, /* dst_mask */
|
|
||||||
FALSE), /* pcrel_offset */
|
|
||||||
|
|
||||||
/* An 8 bit absolute relocation. */
|
|
||||||
HOWTO (R_OPENRISC_8, /* type */
|
|
||||||
0, /* rightshift */
|
|
||||||
0, /* size (0 = byte, 1 = short, 2 = long) */
|
|
||||||
8, /* bitsize */
|
|
||||||
FALSE, /* pc_relative */
|
|
||||||
0, /* bitpos */
|
|
||||||
complain_overflow_bitfield, /* complain_on_overflow */
|
|
||||||
bfd_elf_generic_reloc, /* special_function */
|
|
||||||
"R_OPENRISC_8", /* name */
|
|
||||||
TRUE, /* partial_inplace */
|
|
||||||
0x0000, /* src_mask */
|
|
||||||
0x00ff, /* dst_mask */
|
|
||||||
FALSE), /* pcrel_offset */
|
|
||||||
|
|
||||||
/* A 16 bit absolute relocation. */
|
|
||||||
HOWTO (R_OPENRISC_16, /* type */
|
|
||||||
0, /* rightshift */
|
|
||||||
1, /* size (0 = byte, 1 = short, 2 = long) */
|
|
||||||
16, /* bitsize */
|
|
||||||
FALSE, /* pc_relative */
|
|
||||||
0, /* bitpos */
|
|
||||||
complain_overflow_bitfield, /* complain_on_overflow */
|
|
||||||
bfd_elf_generic_reloc, /* special_function */
|
|
||||||
"R_OPENRISC_16", /* name */
|
|
||||||
TRUE, /* partial_inplace */
|
|
||||||
0x00000000, /* src_mask */
|
|
||||||
0x0000ffff, /* dst_mask */
|
|
||||||
FALSE), /* pcrel_offset */
|
|
||||||
|
|
||||||
/* A 32 bit absolute relocation. */
|
|
||||||
HOWTO (R_OPENRISC_32, /* type */
|
|
||||||
0, /* rightshift */
|
|
||||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
|
||||||
32, /* bitsize */
|
|
||||||
FALSE, /* pc_relative */
|
|
||||||
0, /* bitpos */
|
|
||||||
complain_overflow_bitfield, /* complain_on_overflow */
|
|
||||||
bfd_elf_generic_reloc, /* special_function */
|
|
||||||
"R_OPENRISC_32", /* name */
|
|
||||||
TRUE, /* partial_inplace */
|
|
||||||
0x00000000, /* src_mask */
|
|
||||||
0xffffffff, /* dst_mask */
|
|
||||||
FALSE), /* pcrel_offset */
|
|
||||||
|
|
||||||
/* GNU extension to record C++ vtable hierarchy. */
|
|
||||||
HOWTO (R_OPENRISC_GNU_VTINHERIT, /* type */
|
|
||||||
0, /* rightshift */
|
|
||||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
|
||||||
0, /* bitsize */
|
|
||||||
FALSE, /* pc_relative */
|
|
||||||
0, /* bitpos */
|
|
||||||
complain_overflow_dont, /* complain_on_overflow */
|
|
||||||
NULL, /* special_function */
|
|
||||||
"R_OPENRISC_GNU_VTINHERIT", /* name */
|
|
||||||
FALSE, /* partial_inplace */
|
|
||||||
0, /* src_mask */
|
|
||||||
0, /* dst_mask */
|
|
||||||
FALSE), /* pcrel_offset */
|
|
||||||
|
|
||||||
/* GNU extension to record C++ vtable member usage. */
|
|
||||||
HOWTO (R_OPENRISC_GNU_VTENTRY, /* type */
|
|
||||||
0, /* rightshift */
|
|
||||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
|
||||||
0, /* bitsize */
|
|
||||||
FALSE, /* pc_relative */
|
|
||||||
0, /* bitpos */
|
|
||||||
complain_overflow_dont, /* complain_on_overflow */
|
|
||||||
_bfd_elf_rel_vtable_reloc_fn, /* special_function */
|
|
||||||
"R_OPENRISC_GNU_VTENTRY", /* name */
|
|
||||||
FALSE, /* partial_inplace */
|
|
||||||
0, /* src_mask */
|
|
||||||
0, /* dst_mask */
|
|
||||||
FALSE), /* pcrel_offset */
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Map BFD reloc types to OpenRISC ELF reloc types. */
|
|
||||||
|
|
||||||
struct openrisc_reloc_map
|
|
||||||
{
|
|
||||||
bfd_reloc_code_real_type bfd_reloc_val;
|
|
||||||
unsigned int openrisc_reloc_val;
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct openrisc_reloc_map openrisc_reloc_map[] =
|
|
||||||
{
|
|
||||||
{ BFD_RELOC_NONE, R_OPENRISC_NONE },
|
|
||||||
{ BFD_RELOC_32, R_OPENRISC_32 },
|
|
||||||
{ BFD_RELOC_16, R_OPENRISC_16 },
|
|
||||||
{ BFD_RELOC_8, R_OPENRISC_8 },
|
|
||||||
{ BFD_RELOC_OPENRISC_REL_26, R_OPENRISC_INSN_REL_26 },
|
|
||||||
{ BFD_RELOC_OPENRISC_ABS_26, R_OPENRISC_INSN_ABS_26 },
|
|
||||||
{ BFD_RELOC_HI16, R_OPENRISC_HI_16_IN_INSN },
|
|
||||||
{ BFD_RELOC_LO16, R_OPENRISC_LO_16_IN_INSN },
|
|
||||||
{ BFD_RELOC_VTABLE_INHERIT, R_OPENRISC_GNU_VTINHERIT },
|
|
||||||
{ BFD_RELOC_VTABLE_ENTRY, R_OPENRISC_GNU_VTENTRY }
|
|
||||||
};
|
|
||||||
|
|
||||||
static reloc_howto_type *
|
|
||||||
openrisc_reloc_type_lookup (bfd * abfd ATTRIBUTE_UNUSED,
|
|
||||||
bfd_reloc_code_real_type code)
|
|
||||||
{
|
|
||||||
unsigned int i;
|
|
||||||
|
|
||||||
for (i = ARRAY_SIZE (openrisc_reloc_map); --i;)
|
|
||||||
if (openrisc_reloc_map[i].bfd_reloc_val == code)
|
|
||||||
return & openrisc_elf_howto_table[openrisc_reloc_map[i].
|
|
||||||
openrisc_reloc_val];
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static reloc_howto_type *
|
|
||||||
openrisc_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
|
|
||||||
const char *r_name)
|
|
||||||
{
|
|
||||||
unsigned int i;
|
|
||||||
|
|
||||||
for (i = 0;
|
|
||||||
i < (sizeof (openrisc_elf_howto_table)
|
|
||||||
/ sizeof (openrisc_elf_howto_table[0]));
|
|
||||||
i++)
|
|
||||||
if (openrisc_elf_howto_table[i].name != NULL
|
|
||||||
&& strcasecmp (openrisc_elf_howto_table[i].name, r_name) == 0)
|
|
||||||
return &openrisc_elf_howto_table[i];
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Set the howto pointer for an OpenRISC ELF reloc. */
|
|
||||||
|
|
||||||
static void
|
|
||||||
openrisc_info_to_howto_rela (bfd * abfd ATTRIBUTE_UNUSED,
|
|
||||||
arelent * cache_ptr,
|
|
||||||
Elf_Internal_Rela * dst)
|
|
||||||
{
|
|
||||||
unsigned int r_type;
|
|
||||||
|
|
||||||
r_type = ELF32_R_TYPE (dst->r_info);
|
|
||||||
BFD_ASSERT (r_type < (unsigned int) R_OPENRISC_max);
|
|
||||||
cache_ptr->howto = & openrisc_elf_howto_table[r_type];
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Perform a single relocation. By default we use the standard BFD
|
|
||||||
routines, but a few relocs, we have to do them ourselves. */
|
|
||||||
|
|
||||||
static bfd_reloc_status_type
|
|
||||||
openrisc_final_link_relocate (reloc_howto_type *howto,
|
|
||||||
bfd *input_bfd,
|
|
||||||
asection *input_section,
|
|
||||||
bfd_byte *contents,
|
|
||||||
Elf_Internal_Rela *rel,
|
|
||||||
bfd_vma relocation)
|
|
||||||
{
|
|
||||||
bfd_reloc_status_type r = bfd_reloc_ok;
|
|
||||||
|
|
||||||
switch (howto->type)
|
|
||||||
{
|
|
||||||
case R_OPENRISC_LO_16_IN_INSN:
|
|
||||||
relocation &= 0xffff;
|
|
||||||
r = _bfd_final_link_relocate (howto, input_bfd, input_section,
|
|
||||||
contents, rel->r_offset,
|
|
||||||
relocation, rel->r_addend);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
r = _bfd_final_link_relocate (howto, input_bfd, input_section,
|
|
||||||
contents, rel->r_offset,
|
|
||||||
relocation, rel->r_addend);
|
|
||||||
}
|
|
||||||
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Relocate an OpenRISC ELF section.
|
|
||||||
|
|
||||||
The RELOCATE_SECTION function is called by the new ELF backend linker
|
|
||||||
to handle the relocations for a section.
|
|
||||||
|
|
||||||
The relocs are always passed as Rela structures; if the section
|
|
||||||
actually uses Rel structures, the r_addend field will always be
|
|
||||||
zero.
|
|
||||||
|
|
||||||
This function is responsible for adjusting the section contents as
|
|
||||||
necessary, and (if using Rela relocs and generating a relocatable
|
|
||||||
output file) adjusting the reloc addend as necessary.
|
|
||||||
|
|
||||||
This function does not have to worry about setting the reloc
|
|
||||||
address or the reloc symbol index.
|
|
||||||
|
|
||||||
LOCAL_SYMS is a pointer to the swapped in local symbols.
|
|
||||||
|
|
||||||
LOCAL_SECTIONS is an array giving the section in the input file
|
|
||||||
corresponding to the st_shndx field of each local symbol.
|
|
||||||
|
|
||||||
The global hash table entry for the global symbols can be found
|
|
||||||
via elf_sym_hashes (input_bfd).
|
|
||||||
|
|
||||||
When generating relocatable output, this function must handle
|
|
||||||
STB_LOCAL/STT_SECTION symbols specially. The output symbol is
|
|
||||||
going to be the section symbol corresponding to the output
|
|
||||||
section, which means that the addend must be adjusted
|
|
||||||
accordingly. */
|
|
||||||
|
|
||||||
static bfd_boolean
|
|
||||||
openrisc_elf_relocate_section (bfd *output_bfd,
|
|
||||||
struct bfd_link_info *info,
|
|
||||||
bfd *input_bfd,
|
|
||||||
asection *input_section,
|
|
||||||
bfd_byte *contents,
|
|
||||||
Elf_Internal_Rela *relocs,
|
|
||||||
Elf_Internal_Sym *local_syms,
|
|
||||||
asection **local_sections)
|
|
||||||
{
|
|
||||||
Elf_Internal_Shdr *symtab_hdr;
|
|
||||||
struct elf_link_hash_entry **sym_hashes;
|
|
||||||
Elf_Internal_Rela *rel;
|
|
||||||
Elf_Internal_Rela *relend;
|
|
||||||
|
|
||||||
symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
|
|
||||||
sym_hashes = elf_sym_hashes (input_bfd);
|
|
||||||
relend = relocs + input_section->reloc_count;
|
|
||||||
|
|
||||||
for (rel = relocs; rel < relend; rel++)
|
|
||||||
{
|
|
||||||
reloc_howto_type *howto;
|
|
||||||
unsigned long r_symndx;
|
|
||||||
Elf_Internal_Sym *sym;
|
|
||||||
asection *sec;
|
|
||||||
struct elf_link_hash_entry *h;
|
|
||||||
bfd_vma relocation;
|
|
||||||
bfd_reloc_status_type r;
|
|
||||||
const char *name = NULL;
|
|
||||||
int r_type;
|
|
||||||
|
|
||||||
r_type = ELF32_R_TYPE (rel->r_info);
|
|
||||||
r_symndx = ELF32_R_SYM (rel->r_info);
|
|
||||||
|
|
||||||
if (r_type == R_OPENRISC_GNU_VTINHERIT
|
|
||||||
|| r_type == R_OPENRISC_GNU_VTENTRY)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if ((unsigned int) r_type >
|
|
||||||
(sizeof openrisc_elf_howto_table / sizeof (reloc_howto_type)))
|
|
||||||
abort ();
|
|
||||||
|
|
||||||
howto = openrisc_elf_howto_table + ELF32_R_TYPE (rel->r_info);
|
|
||||||
h = NULL;
|
|
||||||
sym = NULL;
|
|
||||||
sec = NULL;
|
|
||||||
|
|
||||||
if (r_symndx < symtab_hdr->sh_info)
|
|
||||||
{
|
|
||||||
sym = local_syms + r_symndx;
|
|
||||||
sec = local_sections[r_symndx];
|
|
||||||
relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
|
|
||||||
|
|
||||||
name = bfd_elf_string_from_elf_section
|
|
||||||
(input_bfd, symtab_hdr->sh_link, sym->st_name);
|
|
||||||
name = (name == NULL) ? bfd_section_name (input_bfd, sec) : name;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
bfd_boolean unresolved_reloc, warned, ignored;
|
|
||||||
|
|
||||||
RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
|
|
||||||
r_symndx, symtab_hdr, sym_hashes,
|
|
||||||
h, sec, relocation,
|
|
||||||
unresolved_reloc, warned, ignored);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sec != NULL && discarded_section (sec))
|
|
||||||
RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
|
|
||||||
rel, 1, relend, howto, 0, contents);
|
|
||||||
|
|
||||||
if (info->relocatable)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
r = openrisc_final_link_relocate (howto, input_bfd, input_section,
|
|
||||||
contents, rel, relocation);
|
|
||||||
|
|
||||||
if (r != bfd_reloc_ok)
|
|
||||||
{
|
|
||||||
const char *msg = NULL;
|
|
||||||
|
|
||||||
switch (r)
|
|
||||||
{
|
|
||||||
case bfd_reloc_overflow:
|
|
||||||
r = info->callbacks->reloc_overflow
|
|
||||||
(info, (h ? &h->root : NULL), name, howto->name,
|
|
||||||
(bfd_vma) 0, input_bfd, input_section, rel->r_offset);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case bfd_reloc_undefined:
|
|
||||||
r = info->callbacks->undefined_symbol
|
|
||||||
(info, name, input_bfd, input_section, rel->r_offset, TRUE);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case bfd_reloc_outofrange:
|
|
||||||
msg = _("internal error: out of range error");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case bfd_reloc_notsupported:
|
|
||||||
msg = _("internal error: unsupported relocation error");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case bfd_reloc_dangerous:
|
|
||||||
msg = _("internal error: dangerous relocation");
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
msg = _("internal error: unknown error");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (msg)
|
|
||||||
r = info->callbacks->warning
|
|
||||||
(info, msg, name, input_bfd, input_section, rel->r_offset);
|
|
||||||
|
|
||||||
if (!r)
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Return the section that should be marked against GC for a given
|
|
||||||
relocation. */
|
|
||||||
|
|
||||||
static asection *
|
|
||||||
openrisc_elf_gc_mark_hook (asection *sec,
|
|
||||||
struct bfd_link_info *info,
|
|
||||||
Elf_Internal_Rela *rel,
|
|
||||||
struct elf_link_hash_entry *h,
|
|
||||||
Elf_Internal_Sym *sym)
|
|
||||||
{
|
|
||||||
if (h != NULL)
|
|
||||||
switch (ELF32_R_TYPE (rel->r_info))
|
|
||||||
{
|
|
||||||
case R_OPENRISC_GNU_VTINHERIT:
|
|
||||||
case R_OPENRISC_GNU_VTENTRY:
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Look through the relocs for a section during the first phase.
|
|
||||||
Since we don't do .gots or .plts, we just need to consider the
|
|
||||||
virtual table relocs for gc. */
|
|
||||||
|
|
||||||
static bfd_boolean
|
|
||||||
openrisc_elf_check_relocs (bfd *abfd,
|
|
||||||
struct bfd_link_info *info,
|
|
||||||
asection *sec,
|
|
||||||
const Elf_Internal_Rela *relocs)
|
|
||||||
{
|
|
||||||
Elf_Internal_Shdr *symtab_hdr;
|
|
||||||
struct elf_link_hash_entry **sym_hashes;
|
|
||||||
const Elf_Internal_Rela *rel;
|
|
||||||
const Elf_Internal_Rela *rel_end;
|
|
||||||
|
|
||||||
if (info->relocatable)
|
|
||||||
return TRUE;
|
|
||||||
|
|
||||||
symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
|
|
||||||
sym_hashes = elf_sym_hashes (abfd);
|
|
||||||
|
|
||||||
rel_end = relocs + sec->reloc_count;
|
|
||||||
for (rel = relocs; rel < rel_end; rel++)
|
|
||||||
{
|
|
||||||
struct elf_link_hash_entry *h;
|
|
||||||
unsigned long r_symndx;
|
|
||||||
|
|
||||||
r_symndx = ELF32_R_SYM (rel->r_info);
|
|
||||||
if (r_symndx < symtab_hdr->sh_info)
|
|
||||||
h = NULL;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
h = sym_hashes[r_symndx - symtab_hdr->sh_info];
|
|
||||||
while (h->root.type == bfd_link_hash_indirect
|
|
||||||
|| h->root.type == bfd_link_hash_warning)
|
|
||||||
h = (struct elf_link_hash_entry *) h->root.u.i.link;
|
|
||||||
|
|
||||||
/* PR15323, ref flags aren't set for references in the same
|
|
||||||
object. */
|
|
||||||
h->root.non_ir_ref = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (ELF32_R_TYPE (rel->r_info))
|
|
||||||
{
|
|
||||||
/* This relocation describes the C++ object vtable hierarchy.
|
|
||||||
Reconstruct it for later use during GC. */
|
|
||||||
case R_OPENRISC_GNU_VTINHERIT:
|
|
||||||
if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
|
|
||||||
return FALSE;
|
|
||||||
break;
|
|
||||||
|
|
||||||
/* This relocation describes which C++ vtable entries are actually
|
|
||||||
used. Record for later use during GC. */
|
|
||||||
case R_OPENRISC_GNU_VTENTRY:
|
|
||||||
BFD_ASSERT (h != NULL);
|
|
||||||
if (h != NULL
|
|
||||||
&& !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
|
|
||||||
return FALSE;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Set the right machine number. */
|
|
||||||
|
|
||||||
static bfd_boolean
|
|
||||||
openrisc_elf_object_p (bfd *abfd)
|
|
||||||
{
|
|
||||||
bfd_default_set_arch_mach (abfd, bfd_arch_openrisc, 0);
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Store the machine number in the flags field. */
|
|
||||||
|
|
||||||
static void
|
|
||||||
openrisc_elf_final_write_processing (bfd *abfd,
|
|
||||||
bfd_boolean linker ATTRIBUTE_UNUSED)
|
|
||||||
{
|
|
||||||
unsigned long val;
|
|
||||||
|
|
||||||
switch (bfd_get_mach (abfd))
|
|
||||||
{
|
|
||||||
default:
|
|
||||||
val = 0;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
elf_elfheader (abfd)->e_flags &= ~0xf;
|
|
||||||
elf_elfheader (abfd)->e_flags |= val;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#define ELF_ARCH bfd_arch_openrisc
|
|
||||||
#define ELF_MACHINE_CODE EM_OPENRISC
|
|
||||||
#define ELF_MACHINE_ALT1 EM_OPENRISC_OLD
|
|
||||||
#define ELF_MAXPAGESIZE 0x1000
|
|
||||||
|
|
||||||
#define TARGET_BIG_SYM bfd_elf32_openrisc_vec
|
|
||||||
#define TARGET_BIG_NAME "elf32-openrisc"
|
|
||||||
|
|
||||||
#define elf_info_to_howto_rel NULL
|
|
||||||
#define elf_info_to_howto openrisc_info_to_howto_rela
|
|
||||||
#define elf_backend_relocate_section openrisc_elf_relocate_section
|
|
||||||
#define elf_backend_gc_mark_hook openrisc_elf_gc_mark_hook
|
|
||||||
#define elf_backend_check_relocs openrisc_elf_check_relocs
|
|
||||||
|
|
||||||
#define elf_backend_can_gc_sections 1
|
|
||||||
#define elf_backend_rela_normal 1
|
|
||||||
|
|
||||||
#define bfd_elf32_bfd_reloc_type_lookup openrisc_reloc_type_lookup
|
|
||||||
#define bfd_elf32_bfd_reloc_name_lookup openrisc_reloc_name_lookup
|
|
||||||
|
|
||||||
#define elf_backend_object_p openrisc_elf_object_p
|
|
||||||
#define elf_backend_final_write_processing openrisc_elf_final_write_processing
|
|
||||||
|
|
||||||
#include "elf32-target.h"
|
|
2872
bfd/elf32-or1k.c
Normal file
2872
bfd/elf32-or1k.c
Normal file
File diff suppressed because it is too large
Load Diff
514
bfd/elf32-or32.c
514
bfd/elf32-or32.c
@ -1,514 +0,0 @@
|
|||||||
/* OR32-specific support for 32-bit ELF
|
|
||||||
Copyright (C) 2002-2014 Free Software Foundation, Inc.
|
|
||||||
Contributed by Ivan Guzvinec <ivang@opencores.org>
|
|
||||||
|
|
||||||
This file is part of BFD, the Binary File Descriptor library.
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
|
||||||
MA 02110-1301, USA. */
|
|
||||||
|
|
||||||
#include "sysdep.h"
|
|
||||||
#include "bfd.h"
|
|
||||||
#include "libbfd.h"
|
|
||||||
#include "elf-bfd.h"
|
|
||||||
#include "elf/or32.h"
|
|
||||||
#include "libiberty.h"
|
|
||||||
|
|
||||||
/* Try to minimize the amount of space occupied by relocation tables
|
|
||||||
on the ROM (not that the ROM won't be swamped by other ELF overhead). */
|
|
||||||
#define USE_REL 1
|
|
||||||
|
|
||||||
/* Set the right machine number for an OR32 ELF file. */
|
|
||||||
|
|
||||||
static bfd_boolean
|
|
||||||
or32_elf_object_p (bfd *abfd)
|
|
||||||
{
|
|
||||||
(void) bfd_default_set_arch_mach (abfd, bfd_arch_or32, 0);
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* The final processing done just before writing out an OR32 ELF object file.
|
|
||||||
This gets the OR32 architecture right based on the machine number. */
|
|
||||||
|
|
||||||
static void
|
|
||||||
or32_elf_final_write_processing (bfd *abfd,
|
|
||||||
bfd_boolean linker ATTRIBUTE_UNUSED)
|
|
||||||
{
|
|
||||||
elf_elfheader (abfd)->e_flags &=~ EF_OR32_MACH;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bfd_reloc_status_type
|
|
||||||
or32_elf_32_reloc (bfd *abfd,
|
|
||||||
arelent *reloc_entry,
|
|
||||||
asymbol *symbol,
|
|
||||||
void * data,
|
|
||||||
asection *input_section,
|
|
||||||
bfd *output_bfd,
|
|
||||||
char **error_message ATTRIBUTE_UNUSED)
|
|
||||||
{
|
|
||||||
if (output_bfd != NULL)
|
|
||||||
{
|
|
||||||
unsigned long insn;
|
|
||||||
bfd_size_type addr = reloc_entry->address;
|
|
||||||
|
|
||||||
reloc_entry->address += input_section->output_offset;
|
|
||||||
|
|
||||||
insn = bfd_get_32 (abfd, (bfd_byte *) data + addr);
|
|
||||||
insn += symbol->section->output_section->vma;
|
|
||||||
insn += symbol->section->output_offset;
|
|
||||||
insn += symbol->value;
|
|
||||||
bfd_put_32 (abfd, insn, (bfd_byte *) data + addr);
|
|
||||||
|
|
||||||
return bfd_reloc_ok;
|
|
||||||
}
|
|
||||||
|
|
||||||
return bfd_reloc_continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bfd_reloc_status_type
|
|
||||||
or32_elf_16_reloc (bfd *abfd,
|
|
||||||
arelent *reloc_entry,
|
|
||||||
asymbol *symbol,
|
|
||||||
void * data,
|
|
||||||
asection *input_section,
|
|
||||||
bfd *output_bfd,
|
|
||||||
char **error_message ATTRIBUTE_UNUSED)
|
|
||||||
{
|
|
||||||
if (output_bfd != NULL)
|
|
||||||
{
|
|
||||||
unsigned short insn;
|
|
||||||
bfd_size_type addr = reloc_entry->address;
|
|
||||||
|
|
||||||
reloc_entry->address += input_section->output_offset;
|
|
||||||
|
|
||||||
insn = bfd_get_16 (abfd, (bfd_byte *) data + addr);
|
|
||||||
insn += symbol->section->output_section->vma;
|
|
||||||
insn += symbol->section->output_offset;
|
|
||||||
insn += symbol->value;
|
|
||||||
bfd_put_16 (abfd, insn, (bfd_byte *) data + addr);
|
|
||||||
|
|
||||||
return bfd_reloc_ok;
|
|
||||||
}
|
|
||||||
|
|
||||||
return bfd_reloc_continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bfd_reloc_status_type
|
|
||||||
or32_elf_8_reloc (bfd *abfd ATTRIBUTE_UNUSED,
|
|
||||||
arelent *reloc_entry,
|
|
||||||
asymbol *symbol,
|
|
||||||
void * data,
|
|
||||||
asection *input_section,
|
|
||||||
bfd *output_bfd,
|
|
||||||
char **error_message ATTRIBUTE_UNUSED)
|
|
||||||
{
|
|
||||||
if (output_bfd != NULL)
|
|
||||||
{
|
|
||||||
unsigned char insn;
|
|
||||||
bfd_size_type addr = reloc_entry->address;
|
|
||||||
|
|
||||||
reloc_entry->address += input_section->output_offset;
|
|
||||||
|
|
||||||
insn = bfd_get_8 (abfd, (bfd_byte *) data + addr);
|
|
||||||
insn += symbol->section->output_section->vma;
|
|
||||||
insn += symbol->section->output_offset;
|
|
||||||
insn += symbol->value;
|
|
||||||
bfd_put_8 (abfd, insn, (bfd_byte *) data + addr);
|
|
||||||
|
|
||||||
return bfd_reloc_ok;
|
|
||||||
}
|
|
||||||
|
|
||||||
return bfd_reloc_continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Do a R_OR32_CONSTH relocation. This has to be done in combination
|
|
||||||
with a R_OR32_CONST reloc, because there is a carry from the LO16 to
|
|
||||||
the HI16. Here we just save the information we need; we do the
|
|
||||||
actual relocation when we see the LO16. OR32 ELF requires that the
|
|
||||||
LO16 immediately follow the HI16. As a GNU extension, we permit an
|
|
||||||
arbitrary number of HI16 relocs to be associated with a single LO16
|
|
||||||
reloc. This extension permits gcc to output the HI and LO relocs
|
|
||||||
itself. This code is copied from the elf32-mips.c. */
|
|
||||||
|
|
||||||
struct or32_consth
|
|
||||||
{
|
|
||||||
struct or32_consth *next;
|
|
||||||
bfd_byte *addr;
|
|
||||||
bfd_vma addend;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* FIXME: This should not be a static variable. */
|
|
||||||
|
|
||||||
static struct or32_consth *or32_consth_list;
|
|
||||||
|
|
||||||
static bfd_reloc_status_type
|
|
||||||
or32_elf_consth_reloc (bfd *abfd ATTRIBUTE_UNUSED,
|
|
||||||
arelent *reloc_entry,
|
|
||||||
asymbol *symbol,
|
|
||||||
void * data,
|
|
||||||
asection *input_section,
|
|
||||||
bfd *output_bfd,
|
|
||||||
char **error_message ATTRIBUTE_UNUSED)
|
|
||||||
{
|
|
||||||
bfd_reloc_status_type ret;
|
|
||||||
bfd_vma relocation;
|
|
||||||
struct or32_consth *n;
|
|
||||||
|
|
||||||
ret = bfd_reloc_ok;
|
|
||||||
|
|
||||||
if (bfd_is_und_section (symbol->section)
|
|
||||||
&& output_bfd == NULL)
|
|
||||||
ret = bfd_reloc_undefined;
|
|
||||||
|
|
||||||
if (bfd_is_com_section (symbol->section))
|
|
||||||
relocation = 0;
|
|
||||||
else
|
|
||||||
relocation = symbol->value;
|
|
||||||
|
|
||||||
relocation += symbol->section->output_section->vma;
|
|
||||||
relocation += symbol->section->output_offset;
|
|
||||||
relocation += reloc_entry->addend;
|
|
||||||
|
|
||||||
if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
|
|
||||||
return bfd_reloc_outofrange;
|
|
||||||
|
|
||||||
/* Save the information, and let LO16 do the actual relocation. */
|
|
||||||
n = bfd_malloc (sizeof *n);
|
|
||||||
if (n == NULL)
|
|
||||||
return bfd_reloc_outofrange;
|
|
||||||
n->addr = (bfd_byte *) data + reloc_entry->address;
|
|
||||||
n->addend = relocation;
|
|
||||||
n->next = or32_consth_list;
|
|
||||||
or32_consth_list = n;
|
|
||||||
|
|
||||||
if (output_bfd != NULL)
|
|
||||||
reloc_entry->address += input_section->output_offset;
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Do a R_OR32_CONST relocation. This is a straightforward 16 bit
|
|
||||||
inplace relocation; this function exists in order to do the
|
|
||||||
R_OR32_CONSTH relocation described above. */
|
|
||||||
|
|
||||||
static bfd_reloc_status_type
|
|
||||||
or32_elf_const_reloc (bfd *abfd,
|
|
||||||
arelent *reloc_entry,
|
|
||||||
asymbol *symbol,
|
|
||||||
void * data,
|
|
||||||
asection *input_section,
|
|
||||||
bfd *output_bfd,
|
|
||||||
char **error_message)
|
|
||||||
{
|
|
||||||
if (or32_consth_list != NULL)
|
|
||||||
{
|
|
||||||
struct or32_consth *l;
|
|
||||||
|
|
||||||
l = or32_consth_list;
|
|
||||||
while (l != NULL)
|
|
||||||
{
|
|
||||||
unsigned long insn;
|
|
||||||
unsigned long val;
|
|
||||||
unsigned long vallo;
|
|
||||||
struct or32_consth *next;
|
|
||||||
|
|
||||||
/* Do the HI16 relocation. Note that we actually don't need
|
|
||||||
to know anything about the LO16 itself, except where to
|
|
||||||
find the low 16 bits of the addend needed by the LO16. */
|
|
||||||
insn = bfd_get_32 (abfd, l->addr);
|
|
||||||
vallo = (bfd_get_32 (abfd, (bfd_byte *) data + reloc_entry->address)
|
|
||||||
& 0xffff);
|
|
||||||
val = ((insn & 0xffff) << 16) + vallo;
|
|
||||||
val += l->addend;
|
|
||||||
|
|
||||||
insn = (insn &~ 0xffff) | ((val >> 16) & 0xffff);
|
|
||||||
bfd_put_32 (abfd, insn, l->addr);
|
|
||||||
|
|
||||||
next = l->next;
|
|
||||||
free (l);
|
|
||||||
l = next;
|
|
||||||
}
|
|
||||||
|
|
||||||
or32_consth_list = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (output_bfd != NULL)
|
|
||||||
{
|
|
||||||
unsigned long insn, tmp;
|
|
||||||
bfd_size_type addr = reloc_entry->address;
|
|
||||||
|
|
||||||
reloc_entry->address += input_section->output_offset;
|
|
||||||
|
|
||||||
insn = bfd_get_32 (abfd, (bfd_byte *) data + addr);
|
|
||||||
tmp = insn & 0x0000ffff;
|
|
||||||
tmp += symbol->section->output_section->vma;
|
|
||||||
tmp += symbol->section->output_offset;
|
|
||||||
tmp += symbol->value;
|
|
||||||
insn = (insn & 0xffff0000) | (tmp & 0x0000ffff);
|
|
||||||
bfd_put_32 (abfd, insn, (bfd_byte *) data + addr);
|
|
||||||
|
|
||||||
return bfd_reloc_ok;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Now do the LO16 reloc in the usual way. */
|
|
||||||
return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
|
|
||||||
input_section, output_bfd, error_message);
|
|
||||||
}
|
|
||||||
|
|
||||||
static bfd_reloc_status_type
|
|
||||||
or32_elf_jumptarg_reloc (bfd *abfd,
|
|
||||||
arelent *reloc_entry,
|
|
||||||
asymbol *symbol ATTRIBUTE_UNUSED,
|
|
||||||
void * data,
|
|
||||||
asection *input_section,
|
|
||||||
bfd *output_bfd,
|
|
||||||
char **error_message ATTRIBUTE_UNUSED)
|
|
||||||
{
|
|
||||||
if (output_bfd != NULL)
|
|
||||||
{
|
|
||||||
unsigned long insn, tmp;
|
|
||||||
bfd_size_type addr = reloc_entry->address;
|
|
||||||
|
|
||||||
reloc_entry->address += input_section->output_offset;
|
|
||||||
|
|
||||||
insn = bfd_get_32 (abfd, (bfd_byte *) data + addr);
|
|
||||||
tmp = insn | 0xfc000000;
|
|
||||||
tmp -= (input_section->output_offset >> 2);
|
|
||||||
insn = (insn & 0xfc000000) | (tmp & 0x03ffffff);
|
|
||||||
bfd_put_32 (abfd, insn, (bfd_byte *) data + addr);
|
|
||||||
|
|
||||||
return bfd_reloc_ok;
|
|
||||||
}
|
|
||||||
|
|
||||||
return bfd_reloc_continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
static reloc_howto_type elf_or32_howto_table[] =
|
|
||||||
{
|
|
||||||
/* This reloc does nothing. */
|
|
||||||
HOWTO (R_OR32_NONE, /* type */
|
|
||||||
0, /* rightshift */
|
|
||||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
|
||||||
32, /* bitsize */
|
|
||||||
FALSE, /* pc_relative */
|
|
||||||
0, /* bitpos */
|
|
||||||
complain_overflow_bitfield, /* complain_on_overflow */
|
|
||||||
bfd_elf_generic_reloc, /* special_function */
|
|
||||||
"R_OR32_NONE", /* name */
|
|
||||||
FALSE, /* partial_inplace */
|
|
||||||
0, /* src_mask */
|
|
||||||
0, /* dst_mask */
|
|
||||||
FALSE), /* pcrel_offset */
|
|
||||||
|
|
||||||
/* A standard 32 bit relocation. */
|
|
||||||
HOWTO (R_OR32_32, /* type */
|
|
||||||
0, /* rightshift */
|
|
||||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
|
||||||
32, /* bitsize */
|
|
||||||
FALSE, /* pc_relative */
|
|
||||||
0, /* bitpos */
|
|
||||||
complain_overflow_bitfield, /* complain_on_overflow */
|
|
||||||
or32_elf_32_reloc, /* special_function */
|
|
||||||
"R_OR32_32", /* name */
|
|
||||||
FALSE, /* partial_inplace */
|
|
||||||
0xffffffff, /* src_mask */
|
|
||||||
0xffffffff, /* dst_mask */
|
|
||||||
FALSE), /* pcrel_offset */
|
|
||||||
|
|
||||||
/* A standard 16 bit relocation. */
|
|
||||||
HOWTO (R_OR32_16, /* type */
|
|
||||||
0, /* rightshift */
|
|
||||||
1, /* size (0 = byte, 1 = short, 2 = long) */
|
|
||||||
16, /* bitsize */
|
|
||||||
FALSE, /* pc_relative */
|
|
||||||
0, /* bitpos */
|
|
||||||
complain_overflow_bitfield, /* complain_on_overflow */
|
|
||||||
or32_elf_16_reloc, /* special_function */
|
|
||||||
"R_OR32_16", /* name */
|
|
||||||
FALSE, /* partial_inplace */
|
|
||||||
0x0000ffff, /* src_mask */
|
|
||||||
0x0000ffff, /* dst_mask */
|
|
||||||
FALSE), /* pcrel_offset */
|
|
||||||
|
|
||||||
/* A standard 8 bit relocation. */
|
|
||||||
HOWTO (R_OR32_8, /* type */
|
|
||||||
0, /* rightshift */
|
|
||||||
0, /* size (0 = byte, 1 = short, 2 = long) */
|
|
||||||
8, /* bitsize */
|
|
||||||
FALSE, /* pc_relative */
|
|
||||||
0, /* bitpos */
|
|
||||||
complain_overflow_bitfield, /* complain_on_overflow */
|
|
||||||
or32_elf_8_reloc, /* special_function */
|
|
||||||
"R_OR32_8", /* name */
|
|
||||||
FALSE, /* partial_inplace */
|
|
||||||
0x000000ff, /* src_mask */
|
|
||||||
0x000000ff, /* dst_mask */
|
|
||||||
FALSE), /* pcrel_offset */
|
|
||||||
|
|
||||||
/* A standard low 16 bit relocation. */
|
|
||||||
HOWTO (R_OR32_CONST, /* type */
|
|
||||||
0, /* rightshift */
|
|
||||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
|
||||||
16, /* bitsize */
|
|
||||||
FALSE, /* pc_relative */
|
|
||||||
0, /* bitpos */
|
|
||||||
complain_overflow_dont, /* complain_on_overflow */
|
|
||||||
or32_elf_const_reloc, /* special_function */
|
|
||||||
"R_OR32_CONST", /* name */
|
|
||||||
FALSE, /* partial_inplace */
|
|
||||||
0x0000ffff, /* src_mask */
|
|
||||||
0x0000ffff, /* dst_mask */
|
|
||||||
FALSE), /* pcrel_offset */
|
|
||||||
|
|
||||||
/* A standard high 16 bit relocation. */
|
|
||||||
HOWTO (R_OR32_CONSTH, /* type */
|
|
||||||
16, /* rightshift */
|
|
||||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
|
||||||
16, /* bitsize */
|
|
||||||
TRUE, /* pc_relative */
|
|
||||||
0, /* bitpos */
|
|
||||||
complain_overflow_dont, /* complain_on_overflow */
|
|
||||||
or32_elf_consth_reloc, /* special_function */
|
|
||||||
"R_OR32_CONSTH", /* name */
|
|
||||||
FALSE, /* partial_inplace */
|
|
||||||
0xffff0000, /* src_mask */
|
|
||||||
0x0000ffff, /* dst_mask */
|
|
||||||
FALSE), /* pcrel_offset */
|
|
||||||
|
|
||||||
/* A standard branch relocation. */
|
|
||||||
HOWTO (R_OR32_JUMPTARG, /* type */
|
|
||||||
2, /* rightshift */
|
|
||||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
|
||||||
28, /* bitsize */
|
|
||||||
TRUE, /* pc_relative */
|
|
||||||
0, /* bitpos */
|
|
||||||
complain_overflow_signed, /* complain_on_overflow */
|
|
||||||
or32_elf_jumptarg_reloc,/* special_function */
|
|
||||||
"R_OR32_JUMPTARG", /* name */
|
|
||||||
FALSE, /* partial_inplace */
|
|
||||||
0, /* src_mask */
|
|
||||||
0x03ffffff, /* dst_mask */
|
|
||||||
TRUE), /* pcrel_offset */
|
|
||||||
|
|
||||||
/* GNU extension to record C++ vtable hierarchy. */
|
|
||||||
HOWTO (R_OR32_GNU_VTINHERIT, /* type */
|
|
||||||
0, /* rightshift */
|
|
||||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
|
||||||
0, /* bitsize */
|
|
||||||
FALSE, /* pc_relative */
|
|
||||||
0, /* bitpos */
|
|
||||||
complain_overflow_dont, /* complain_on_overflow */
|
|
||||||
NULL, /* special_function */
|
|
||||||
"R_OR32_GNU_VTINHERIT", /* name */
|
|
||||||
FALSE, /* partial_inplace */
|
|
||||||
0, /* src_mask */
|
|
||||||
0, /* dst_mask */
|
|
||||||
FALSE), /* pcrel_offset */
|
|
||||||
|
|
||||||
/* GNU extension to record C++ vtable member usage. */
|
|
||||||
HOWTO (R_OR32_GNU_VTENTRY, /* type */
|
|
||||||
0, /* rightshift */
|
|
||||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
|
||||||
0, /* bitsize */
|
|
||||||
FALSE, /* pc_relative */
|
|
||||||
0, /* bitpos */
|
|
||||||
complain_overflow_dont, /* complain_on_overflow */
|
|
||||||
_bfd_elf_rel_vtable_reloc_fn, /* special_function */
|
|
||||||
"R_OR32_GNU_VTENTRY", /* name */
|
|
||||||
FALSE, /* partial_inplace */
|
|
||||||
0, /* src_mask */
|
|
||||||
0, /* dst_mask */
|
|
||||||
FALSE), /* pcrel_offset */
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Map BFD reloc types to OR32 ELF reloc types. */
|
|
||||||
|
|
||||||
struct or32_reloc_map
|
|
||||||
{
|
|
||||||
bfd_reloc_code_real_type bfd_reloc_val;
|
|
||||||
unsigned char elf_reloc_val;
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct or32_reloc_map or32_reloc_map[] =
|
|
||||||
{
|
|
||||||
{ BFD_RELOC_NONE, R_OR32_NONE },
|
|
||||||
{ BFD_RELOC_32, R_OR32_32 },
|
|
||||||
{ BFD_RELOC_16, R_OR32_16 },
|
|
||||||
{ BFD_RELOC_8, R_OR32_8 },
|
|
||||||
{ BFD_RELOC_LO16, R_OR32_CONST },
|
|
||||||
{ BFD_RELOC_HI16, R_OR32_CONSTH },
|
|
||||||
{ BFD_RELOC_32_GOT_PCREL, R_OR32_JUMPTARG },
|
|
||||||
{ BFD_RELOC_VTABLE_INHERIT, R_OR32_GNU_VTINHERIT },
|
|
||||||
{ BFD_RELOC_VTABLE_ENTRY, R_OR32_GNU_VTENTRY },
|
|
||||||
};
|
|
||||||
|
|
||||||
static reloc_howto_type *
|
|
||||||
bfd_elf32_bfd_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
|
|
||||||
bfd_reloc_code_real_type code)
|
|
||||||
{
|
|
||||||
unsigned int i;
|
|
||||||
|
|
||||||
for (i = ARRAY_SIZE (or32_reloc_map); i--;)
|
|
||||||
if (or32_reloc_map[i].bfd_reloc_val == code)
|
|
||||||
return &elf_or32_howto_table[or32_reloc_map[i].elf_reloc_val];
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static reloc_howto_type *
|
|
||||||
bfd_elf32_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
|
|
||||||
const char *r_name)
|
|
||||||
{
|
|
||||||
unsigned int i;
|
|
||||||
|
|
||||||
for (i = 0;
|
|
||||||
i < sizeof (elf_or32_howto_table) / sizeof (elf_or32_howto_table[0]);
|
|
||||||
i++)
|
|
||||||
if (elf_or32_howto_table[i].name != NULL
|
|
||||||
&& strcasecmp (elf_or32_howto_table[i].name, r_name) == 0)
|
|
||||||
return &elf_or32_howto_table[i];
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Set the howto pointer for an OR32 ELF reloc. */
|
|
||||||
|
|
||||||
static void
|
|
||||||
or32_info_to_howto_rel (bfd *abfd ATTRIBUTE_UNUSED,
|
|
||||||
arelent *cache_ptr,
|
|
||||||
Elf_Internal_Rela *dst)
|
|
||||||
{
|
|
||||||
unsigned int r_type;
|
|
||||||
|
|
||||||
r_type = ELF32_R_TYPE (dst->r_info);
|
|
||||||
BFD_ASSERT (r_type < (unsigned int) R_OR32_max);
|
|
||||||
cache_ptr->howto = &elf_or32_howto_table[r_type];
|
|
||||||
}
|
|
||||||
|
|
||||||
#define TARGET_LITTLE_SYM bfd_elf32_or32_little_vec
|
|
||||||
#define TARGET_LITTLE_NAME "elf32-littleor32"
|
|
||||||
#define TARGET_BIG_SYM bfd_elf32_or32_big_vec
|
|
||||||
#define TARGET_BIG_NAME "elf32-or32"
|
|
||||||
#define ELF_ARCH bfd_arch_or32
|
|
||||||
#define ELF_MACHINE_CODE EM_OR32
|
|
||||||
#define ELF_MAXPAGESIZE 0x1000
|
|
||||||
|
|
||||||
#define elf_info_to_howto 0
|
|
||||||
#define elf_info_to_howto_rel or32_info_to_howto_rel
|
|
||||||
#define elf_backend_object_p or32_elf_object_p
|
|
||||||
#define elf_backend_final_write_processing \
|
|
||||||
or32_elf_final_write_processing
|
|
||||||
|
|
||||||
#include "elf32-target.h"
|
|
26
bfd/libbfd.h
26
bfd/libbfd.h
@ -2450,8 +2450,30 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
|
|||||||
"BFD_RELOC_860_HIGH",
|
"BFD_RELOC_860_HIGH",
|
||||||
"BFD_RELOC_860_HIGOT",
|
"BFD_RELOC_860_HIGOT",
|
||||||
"BFD_RELOC_860_HIGOTOFF",
|
"BFD_RELOC_860_HIGOTOFF",
|
||||||
"BFD_RELOC_OPENRISC_ABS_26",
|
"BFD_RELOC_OR1K_REL_26",
|
||||||
"BFD_RELOC_OPENRISC_REL_26",
|
"BFD_RELOC_OR1K_GOTPC_HI16",
|
||||||
|
"BFD_RELOC_OR1K_GOTPC_LO16",
|
||||||
|
"BFD_RELOC_OR1K_GOT16",
|
||||||
|
"BFD_RELOC_OR1K_PLT26",
|
||||||
|
"BFD_RELOC_OR1K_GOTOFF_HI16",
|
||||||
|
"BFD_RELOC_OR1K_GOTOFF_LO16",
|
||||||
|
"BFD_RELOC_OR1K_COPY",
|
||||||
|
"BFD_RELOC_OR1K_GLOB_DAT",
|
||||||
|
"BFD_RELOC_OR1K_JMP_SLOT",
|
||||||
|
"BFD_RELOC_OR1K_RELATIVE",
|
||||||
|
"BFD_RELOC_OR1K_TLS_GD_HI16",
|
||||||
|
"BFD_RELOC_OR1K_TLS_GD_LO16",
|
||||||
|
"BFD_RELOC_OR1K_TLS_LDM_HI16",
|
||||||
|
"BFD_RELOC_OR1K_TLS_LDM_LO16",
|
||||||
|
"BFD_RELOC_OR1K_TLS_LDO_HI16",
|
||||||
|
"BFD_RELOC_OR1K_TLS_LDO_LO16",
|
||||||
|
"BFD_RELOC_OR1K_TLS_IE_HI16",
|
||||||
|
"BFD_RELOC_OR1K_TLS_IE_LO16",
|
||||||
|
"BFD_RELOC_OR1K_TLS_LE_HI16",
|
||||||
|
"BFD_RELOC_OR1K_TLS_LE_LO16",
|
||||||
|
"BFD_RELOC_OR1K_TLS_TPOFF",
|
||||||
|
"BFD_RELOC_OR1K_TLS_DTPOFF",
|
||||||
|
"BFD_RELOC_OR1K_TLS_DTPMOD",
|
||||||
"BFD_RELOC_H8_DIR16A8",
|
"BFD_RELOC_H8_DIR16A8",
|
||||||
"BFD_RELOC_H8_DIR16R8",
|
"BFD_RELOC_H8_DIR16R8",
|
||||||
"BFD_RELOC_H8_DIR24A8",
|
"BFD_RELOC_H8_DIR24A8",
|
||||||
|
50
bfd/reloc.c
50
bfd/reloc.c
@ -5881,11 +5881,55 @@ ENUMDOC
|
|||||||
Intel i860 Relocations.
|
Intel i860 Relocations.
|
||||||
|
|
||||||
ENUM
|
ENUM
|
||||||
BFD_RELOC_OPENRISC_ABS_26
|
BFD_RELOC_OR1K_REL_26
|
||||||
ENUMX
|
ENUMX
|
||||||
BFD_RELOC_OPENRISC_REL_26
|
BFD_RELOC_OR1K_GOTPC_HI16
|
||||||
|
ENUMX
|
||||||
|
BFD_RELOC_OR1K_GOTPC_LO16
|
||||||
|
ENUMX
|
||||||
|
BFD_RELOC_OR1K_GOT16
|
||||||
|
ENUMX
|
||||||
|
BFD_RELOC_OR1K_PLT26
|
||||||
|
ENUMX
|
||||||
|
BFD_RELOC_OR1K_GOTOFF_HI16
|
||||||
|
ENUMX
|
||||||
|
BFD_RELOC_OR1K_GOTOFF_LO16
|
||||||
|
ENUMX
|
||||||
|
BFD_RELOC_OR1K_COPY
|
||||||
|
ENUMX
|
||||||
|
BFD_RELOC_OR1K_GLOB_DAT
|
||||||
|
ENUMX
|
||||||
|
BFD_RELOC_OR1K_JMP_SLOT
|
||||||
|
ENUMX
|
||||||
|
BFD_RELOC_OR1K_RELATIVE
|
||||||
|
ENUMX
|
||||||
|
BFD_RELOC_OR1K_TLS_GD_HI16
|
||||||
|
ENUMX
|
||||||
|
BFD_RELOC_OR1K_TLS_GD_LO16
|
||||||
|
ENUMX
|
||||||
|
BFD_RELOC_OR1K_TLS_LDM_HI16
|
||||||
|
ENUMX
|
||||||
|
BFD_RELOC_OR1K_TLS_LDM_LO16
|
||||||
|
ENUMX
|
||||||
|
BFD_RELOC_OR1K_TLS_LDO_HI16
|
||||||
|
ENUMX
|
||||||
|
BFD_RELOC_OR1K_TLS_LDO_LO16
|
||||||
|
ENUMX
|
||||||
|
BFD_RELOC_OR1K_TLS_IE_HI16
|
||||||
|
ENUMX
|
||||||
|
BFD_RELOC_OR1K_TLS_IE_LO16
|
||||||
|
ENUMX
|
||||||
|
BFD_RELOC_OR1K_TLS_LE_HI16
|
||||||
|
ENUMX
|
||||||
|
BFD_RELOC_OR1K_TLS_LE_LO16
|
||||||
|
ENUMX
|
||||||
|
BFD_RELOC_OR1K_TLS_TPOFF
|
||||||
|
ENUMX
|
||||||
|
BFD_RELOC_OR1K_TLS_DTPOFF
|
||||||
|
ENUMX
|
||||||
|
BFD_RELOC_OR1K_TLS_DTPMOD
|
||||||
ENUMDOC
|
ENUMDOC
|
||||||
OpenRISC Relocations.
|
OpenRISC 1000 Relocations.
|
||||||
|
|
||||||
ENUM
|
ENUM
|
||||||
BFD_RELOC_H8_DIR16A8
|
BFD_RELOC_H8_DIR16A8
|
||||||
|
@ -677,8 +677,7 @@ extern const bfd_target bfd_elf32_nds32be_vec;
|
|||||||
extern const bfd_target bfd_elf32_nds32le_vec;
|
extern const bfd_target bfd_elf32_nds32le_vec;
|
||||||
extern const bfd_target bfd_elf32_nds32belin_vec;
|
extern const bfd_target bfd_elf32_nds32belin_vec;
|
||||||
extern const bfd_target bfd_elf32_nds32lelin_vec;
|
extern const bfd_target bfd_elf32_nds32lelin_vec;
|
||||||
extern const bfd_target bfd_elf32_openrisc_vec;
|
extern const bfd_target bfd_elf32_or1k_vec;
|
||||||
extern const bfd_target bfd_elf32_or32_big_vec;
|
|
||||||
extern const bfd_target bfd_elf32_pj_vec;
|
extern const bfd_target bfd_elf32_pj_vec;
|
||||||
extern const bfd_target bfd_elf32_pjl_vec;
|
extern const bfd_target bfd_elf32_pjl_vec;
|
||||||
extern const bfd_target bfd_elf32_powerpc_vec;
|
extern const bfd_target bfd_elf32_powerpc_vec;
|
||||||
@ -844,7 +843,6 @@ extern const bfd_target nlm32_i386_vec;
|
|||||||
extern const bfd_target nlm32_powerpc_vec;
|
extern const bfd_target nlm32_powerpc_vec;
|
||||||
extern const bfd_target nlm32_sparc_vec;
|
extern const bfd_target nlm32_sparc_vec;
|
||||||
extern const bfd_target oasys_vec;
|
extern const bfd_target oasys_vec;
|
||||||
extern const bfd_target or32coff_big_vec;
|
|
||||||
extern const bfd_target pc532machaout_vec;
|
extern const bfd_target pc532machaout_vec;
|
||||||
extern const bfd_target pc532netbsd_vec;
|
extern const bfd_target pc532netbsd_vec;
|
||||||
extern const bfd_target pdp11_aout_vec;
|
extern const bfd_target pdp11_aout_vec;
|
||||||
@ -1070,8 +1068,7 @@ static const bfd_target * const _bfd_target_vector[] =
|
|||||||
&bfd_elf32_nds32le_vec,
|
&bfd_elf32_nds32le_vec,
|
||||||
&bfd_elf32_nds32belin_vec,
|
&bfd_elf32_nds32belin_vec,
|
||||||
&bfd_elf32_nds32lelin_vec,
|
&bfd_elf32_nds32lelin_vec,
|
||||||
&bfd_elf32_openrisc_vec,
|
&bfd_elf32_or1k_vec,
|
||||||
&bfd_elf32_or32_big_vec,
|
|
||||||
&bfd_elf32_pj_vec,
|
&bfd_elf32_pj_vec,
|
||||||
&bfd_elf32_pjl_vec,
|
&bfd_elf32_pjl_vec,
|
||||||
&bfd_elf32_powerpc_vec,
|
&bfd_elf32_powerpc_vec,
|
||||||
@ -1282,8 +1279,6 @@ static const bfd_target * const _bfd_target_vector[] =
|
|||||||
can be annoying target mis-matches. */
|
can be annoying target mis-matches. */
|
||||||
&oasys_vec,
|
&oasys_vec,
|
||||||
#endif
|
#endif
|
||||||
/* Entry for the OpenRISC family. */
|
|
||||||
&or32coff_big_vec,
|
|
||||||
|
|
||||||
&pc532machaout_vec,
|
&pc532machaout_vec,
|
||||||
&pc532netbsd_vec,
|
&pc532netbsd_vec,
|
||||||
|
@ -1,3 +1,7 @@
|
|||||||
|
2014-04-22 Christian Svensson <blue@cmd.nu>
|
||||||
|
|
||||||
|
* readelf.c: Remove openrisc and or32 support. Add support for or1k.
|
||||||
|
|
||||||
2014-04-18 Tristan Gingold <gingold@adacore.com>
|
2014-04-18 Tristan Gingold <gingold@adacore.com>
|
||||||
|
|
||||||
* od-macho.c (dump_section_map): Adjust as load commands
|
* od-macho.c (dump_section_map): Adjust as load commands
|
||||||
|
@ -133,7 +133,7 @@
|
|||||||
#include "elf/msp430.h"
|
#include "elf/msp430.h"
|
||||||
#include "elf/nds32.h"
|
#include "elf/nds32.h"
|
||||||
#include "elf/nios2.h"
|
#include "elf/nios2.h"
|
||||||
#include "elf/or32.h"
|
#include "elf/or1k.h"
|
||||||
#include "elf/pj.h"
|
#include "elf/pj.h"
|
||||||
#include "elf/ppc.h"
|
#include "elf/ppc.h"
|
||||||
#include "elf/ppc64.h"
|
#include "elf/ppc64.h"
|
||||||
@ -580,8 +580,6 @@ guess_is_rela (unsigned int e_machine)
|
|||||||
case EM_MIPS:
|
case EM_MIPS:
|
||||||
case EM_MIPS_RS3_LE:
|
case EM_MIPS_RS3_LE:
|
||||||
case EM_CYGNUS_M32R:
|
case EM_CYGNUS_M32R:
|
||||||
case EM_OPENRISC:
|
|
||||||
case EM_OR32:
|
|
||||||
case EM_SCORE:
|
case EM_SCORE:
|
||||||
case EM_XGATE:
|
case EM_XGATE:
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@ -629,6 +627,7 @@ guess_is_rela (unsigned int e_machine)
|
|||||||
case EM_MT:
|
case EM_MT:
|
||||||
case EM_NDS32:
|
case EM_NDS32:
|
||||||
case EM_NIOS32:
|
case EM_NIOS32:
|
||||||
|
case EM_OR1K:
|
||||||
case EM_PPC64:
|
case EM_PPC64:
|
||||||
case EM_PPC:
|
case EM_PPC:
|
||||||
case EM_RL78:
|
case EM_RL78:
|
||||||
@ -1185,9 +1184,8 @@ dump_relocations (FILE * file,
|
|||||||
rtype = elf_h8_reloc_type (type);
|
rtype = elf_h8_reloc_type (type);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EM_OPENRISC:
|
case EM_OR1K:
|
||||||
case EM_OR32:
|
rtype = elf_or1k_reloc_type (type);
|
||||||
rtype = elf_or32_reloc_type (type);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EM_PJ:
|
case EM_PJ:
|
||||||
@ -2014,8 +2012,7 @@ get_machine_name (unsigned e_machine)
|
|||||||
case EM_S390: return "IBM S/390";
|
case EM_S390: return "IBM S/390";
|
||||||
case EM_SCORE: return "SUNPLUS S+Core";
|
case EM_SCORE: return "SUNPLUS S+Core";
|
||||||
case EM_XSTORMY16: return "Sanyo XStormy16 CPU core";
|
case EM_XSTORMY16: return "Sanyo XStormy16 CPU core";
|
||||||
case EM_OPENRISC:
|
case EM_OR1K: return "OpenRISC 1000";
|
||||||
case EM_OR32: return "OpenRISC";
|
|
||||||
case EM_ARC_A5: return "ARC International ARCompact processor";
|
case EM_ARC_A5: return "ARC International ARCompact processor";
|
||||||
case EM_CRX: return "National Semiconductor CRX microprocessor";
|
case EM_CRX: return "National Semiconductor CRX microprocessor";
|
||||||
case EM_ADAPTEVA_EPIPHANY: return "Adapteva EPIPHANY";
|
case EM_ADAPTEVA_EPIPHANY: return "Adapteva EPIPHANY";
|
||||||
@ -2894,6 +2891,11 @@ get_machine_flags (unsigned e_flags, unsigned e_machine)
|
|||||||
if (e_flags & EF_SH_FDPIC)
|
if (e_flags & EF_SH_FDPIC)
|
||||||
strcat (buf, ", fdpic");
|
strcat (buf, ", fdpic");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case EM_OR1K:
|
||||||
|
if (e_flags & EF_OR1K_NODELAY)
|
||||||
|
strcat (buf, ", no delay");
|
||||||
|
break;
|
||||||
|
|
||||||
case EM_SPARCV9:
|
case EM_SPARCV9:
|
||||||
if (e_flags & EF_SPARC_32PLUS)
|
if (e_flags & EF_SPARC_32PLUS)
|
||||||
@ -10485,9 +10487,8 @@ is_32bit_abs_reloc (unsigned int reloc_type)
|
|||||||
return reloc_type == 12; /* R_NIOS2_BFD_RELOC_32. */
|
return reloc_type == 12; /* R_NIOS2_BFD_RELOC_32. */
|
||||||
case EM_NIOS32:
|
case EM_NIOS32:
|
||||||
return reloc_type == 1; /* R_NIOS_32. */
|
return reloc_type == 1; /* R_NIOS_32. */
|
||||||
case EM_OPENRISC:
|
case EM_OR1K:
|
||||||
case EM_OR32:
|
return reloc_type == 1; /* R_OR1K_32. */
|
||||||
return reloc_type == 1; /* R_OR32_32. */
|
|
||||||
case EM_PARISC:
|
case EM_PARISC:
|
||||||
return (reloc_type == 1 /* R_PARISC_DIR32. */
|
return (reloc_type == 1 /* R_PARISC_DIR32. */
|
||||||
|| reloc_type == 41); /* R_PARISC_SECREL32. */
|
|| reloc_type == 41); /* R_PARISC_SECREL32. */
|
||||||
@ -10575,6 +10576,8 @@ is_32bit_pcrel_reloc (unsigned int reloc_type)
|
|||||||
return reloc_type == 3; /* R_ARM_REL32 */
|
return reloc_type == 3; /* R_ARM_REL32 */
|
||||||
case EM_MICROBLAZE:
|
case EM_MICROBLAZE:
|
||||||
return reloc_type == 2; /* R_MICROBLAZE_32_PCREL. */
|
return reloc_type == 2; /* R_MICROBLAZE_32_PCREL. */
|
||||||
|
case EM_OR1K:
|
||||||
|
return reloc_type == 9; /* R_OR1K_32_PCREL. */
|
||||||
case EM_PARISC:
|
case EM_PARISC:
|
||||||
return reloc_type == 9; /* R_PARISC_PCREL32. */
|
return reloc_type == 9; /* R_PARISC_PCREL32. */
|
||||||
case EM_PPC:
|
case EM_PPC:
|
||||||
@ -10740,6 +10743,8 @@ is_16bit_abs_reloc (unsigned int reloc_type)
|
|||||||
return reloc_type == 13; /* R_NIOS2_BFD_RELOC_16. */
|
return reloc_type == 13; /* R_NIOS2_BFD_RELOC_16. */
|
||||||
case EM_NIOS32:
|
case EM_NIOS32:
|
||||||
return reloc_type == 9; /* R_NIOS_16. */
|
return reloc_type == 9; /* R_NIOS_16. */
|
||||||
|
case EM_OR1K:
|
||||||
|
return reloc_type == 2; /* R_OR1K_16. */
|
||||||
case EM_TI_C6000:
|
case EM_TI_C6000:
|
||||||
return reloc_type == 2; /* R_C6000_ABS16. */
|
return reloc_type == 2; /* R_C6000_ABS16. */
|
||||||
case EM_XC16X:
|
case EM_XC16X:
|
||||||
@ -10796,6 +10801,7 @@ is_none_reloc (unsigned int reloc_type)
|
|||||||
case EM_C166: /* R_XC16X_NONE. */
|
case EM_C166: /* R_XC16X_NONE. */
|
||||||
case EM_ALTERA_NIOS2: /* R_NIOS2_NONE. */
|
case EM_ALTERA_NIOS2: /* R_NIOS2_NONE. */
|
||||||
case EM_NIOS32: /* R_NIOS_NONE. */
|
case EM_NIOS32: /* R_NIOS_NONE. */
|
||||||
|
case EM_OR1K: /* R_OR1K_NONE. */
|
||||||
return reloc_type == 0;
|
return reloc_type == 0;
|
||||||
case EM_AARCH64:
|
case EM_AARCH64:
|
||||||
return reloc_type == 0 || reloc_type == 256;
|
return reloc_type == 0 || reloc_type == 256;
|
||||||
|
@ -1,3 +1,10 @@
|
|||||||
|
2014-04-22 Christian Svensson <blue@cmd.nu>
|
||||||
|
|
||||||
|
* binutils-all/objcopy.exp: Remove openrisc and or32 support. Add
|
||||||
|
support for or1k.
|
||||||
|
* binutils-all/objdump.exp: Likewise.
|
||||||
|
* binutils-all/dw2-decodedline-1.S: Likewise.
|
||||||
|
|
||||||
2014-03-26 Jiong Wang <jiong.wang@arm.com>
|
2014-03-26 Jiong Wang <jiong.wang@arm.com>
|
||||||
|
|
||||||
* binutils-all/aarch64/aarch64.exp: New test driver for AArch64.
|
* binutils-all/aarch64/aarch64.exp: New test driver for AArch64.
|
||||||
|
16
binutils/testsuite/binutils-all/dw2-decodedline-1.S
Normal file
16
binutils/testsuite/binutils-all/dw2-decodedline-1.S
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
.file "dw2-decodedline.c"
|
||||||
|
.file 1 "dw2-decodedline.c"
|
||||||
|
.file 2 "directory/file1.c"
|
||||||
|
.text
|
||||||
|
.globl f1
|
||||||
|
.type f1, %function
|
||||||
|
f1:
|
||||||
|
.loc 2 1 0
|
||||||
|
l.nop
|
||||||
|
.size f1, .-f1
|
||||||
|
.globl main
|
||||||
|
.type main, %function
|
||||||
|
main:
|
||||||
|
.loc 1 2 0
|
||||||
|
l.nop
|
||||||
|
.size main, .-main
|
@ -84,7 +84,6 @@ proc objcopy_test {testname srcfile} {
|
|||||||
setup_xfail "m68*-*-*coff" "m68*-*-hpux*" "m68*-*-lynxos*"
|
setup_xfail "m68*-*-*coff" "m68*-*-hpux*" "m68*-*-lynxos*"
|
||||||
setup_xfail "m68*-*-sysv*" "m68*-apple-aux*"
|
setup_xfail "m68*-*-sysv*" "m68*-apple-aux*"
|
||||||
setup_xfail "m8*-*"
|
setup_xfail "m8*-*"
|
||||||
setup_xfail "or32-*-rtems*" "or32-*-coff"
|
|
||||||
setup_xfail "sh-*-coff*"
|
setup_xfail "sh-*-coff*"
|
||||||
setup_xfail "tic80-*-*" "w65-*"
|
setup_xfail "tic80-*-*" "w65-*"
|
||||||
|
|
||||||
|
@ -37,8 +37,8 @@ set cpus_expected [list]
|
|||||||
lappend cpus_expected aarch64 alpha arc arm cris
|
lappend cpus_expected aarch64 alpha arc arm cris
|
||||||
lappend cpus_expected d10v d30v fr30 fr500 fr550 h8 hppa i386 i860 i960 ip2022
|
lappend cpus_expected d10v d30v fr30 fr500 fr550 h8 hppa i386 i860 i960 ip2022
|
||||||
lappend cpus_expected m16c m32c m32r m68hc11 m68hc12 m68k m88k MCore MicroBlaze
|
lappend cpus_expected m16c m32c m32r m68hc11 m68hc12 m68k m88k MCore MicroBlaze
|
||||||
lappend cpus_expected mips mn10200 mn10300 ms1 msp MSP430 nds32 n1h_v3 ns32k
|
lappend cpus_expected mips mn10200 mn10300 ms1 msp MSP430 nds32 n1h_v3 ns32k
|
||||||
lappend cpus_expected pj powerpc pyramid romp rs6000 s390 sh sparc
|
lappend cpus_expected or1k or1knd pj powerpc pyramid romp rs6000 s390 sh sparc
|
||||||
lappend cpus_expected tahoe tic54x tic80 tilegx tms320c30 tms320c4x tms320c54x
|
lappend cpus_expected tahoe tic54x tic80 tilegx tms320c30 tms320c4x tms320c54x
|
||||||
lappend cpus_expected v850 vax we32k x86-64 xscale xtensa z8k z8001 z8002
|
lappend cpus_expected v850 vax we32k x86-64 xscale xtensa z8k z8001 z8002
|
||||||
|
|
||||||
@ -201,7 +201,7 @@ if { ![is_elf_format] || ![is_zlib_supported] } then {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Test objdump -WL on a file that contains line information for multiple files and search directories.
|
# Test objdump -WL on a file that contains line information for multiple files and search directories.
|
||||||
# Not supported on mcore, moxie and openrisc targets because they do not (yet) support the generation
|
# Not supported on mcore and moxie targets because they do not (yet) support the generation
|
||||||
# of DWARF2 line debug information.
|
# of DWARF2 line debug information.
|
||||||
|
|
||||||
if { ![is_elf_format]
|
if { ![is_elf_format]
|
||||||
@ -211,12 +211,15 @@ if { ![is_elf_format]
|
|||||||
|| [istarget "ia64*-*-*"]
|
|| [istarget "ia64*-*-*"]
|
||||||
|| [istarget "mcore-*-*"]
|
|| [istarget "mcore-*-*"]
|
||||||
|| [istarget "moxie-*-*"]
|
|| [istarget "moxie-*-*"]
|
||||||
|| [istarget "openrisc-*-*"]
|
|
||||||
|| [istarget "or32-*-*"]
|
|
||||||
} then {
|
} then {
|
||||||
unsupported "objump decode line"
|
unsupported "objump decode line"
|
||||||
} else {
|
} else {
|
||||||
if { ![binutils_assemble $srcdir/$subdir/dw2-decodedline.S tmpdir/dw2-decodedline.o] } then {
|
if { [istarget "or1k*-*-*"] } then {
|
||||||
|
set decodedline_testsrc $srcdir/$subdir/dw2-decodedline-1.S
|
||||||
|
} else {
|
||||||
|
set decodedline_testsrc $srcdir/$subdir/dw2-decodedline.S
|
||||||
|
}
|
||||||
|
if { ![binutils_assemble $decodedline_testsrc tmpdir/dw2-decodedline.o] } then {
|
||||||
fail "objdump decoded line"
|
fail "objdump decoded line"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,3 +1,13 @@
|
|||||||
|
2014-04-22 Christian Svensson <blue@cmd.nu>
|
||||||
|
|
||||||
|
* openrisc.cpu: Delete.
|
||||||
|
* openrisc.opc: Delete.
|
||||||
|
* or1k.cpu: New file.
|
||||||
|
* or1k.opc: New file.
|
||||||
|
* or1kcommon.cpu: New file.
|
||||||
|
* or1korbis.cpu: New file.
|
||||||
|
* or1korfpx.cpu: New file.
|
||||||
|
|
||||||
2013-12-07 Mike Frysinger <vapier@gentoo.org>
|
2013-12-07 Mike Frysinger <vapier@gentoo.org>
|
||||||
|
|
||||||
* epiphany.opc: Remove +x file mode.
|
* epiphany.opc: Remove +x file mode.
|
||||||
|
774
cpu/openrisc.cpu
774
cpu/openrisc.cpu
@ -1,774 +0,0 @@
|
|||||||
; OpenRISC family. -*- Scheme -*-
|
|
||||||
; Copyright 2000, 2001, 2011 Free Software Foundation, Inc.
|
|
||||||
; Contributed by Johan Rydberg, jrydberg@opencores.org
|
|
||||||
;
|
|
||||||
; This program is free software; you can redistribute it and/or modify
|
|
||||||
; it under the terms of the GNU General Public License as published by
|
|
||||||
; the Free Software Foundation; either version 2 of the License, or
|
|
||||||
; (at your option) any later version.
|
|
||||||
;
|
|
||||||
; This program is distributed in the hope that it will be useful,
|
|
||||||
; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
; GNU General Public License for more details.
|
|
||||||
;
|
|
||||||
; You should have received a copy of the GNU General Public License
|
|
||||||
; along with this program; if not, write to the Free Software
|
|
||||||
; Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
|
|
||||||
(include "simplify.inc")
|
|
||||||
|
|
||||||
; OpenRISC 1000 is an architecture of a family of open source,
|
|
||||||
; synthesizeable RISC microprocessor cores. It is a 32-bit load
|
|
||||||
; and store RISC architecture designed with emphasis on speed,
|
|
||||||
; compact instruction set and scalability. OpenRISC 1000 targets
|
|
||||||
; wide range of embedded environments.
|
|
||||||
|
|
||||||
(define-arch
|
|
||||||
(name openrisc)
|
|
||||||
(comment "OpenRISC 1000")
|
|
||||||
(insn-lsb0? #t)
|
|
||||||
(machs openrisc or1300)
|
|
||||||
(isas or32)
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
; Attributes
|
|
||||||
|
|
||||||
; An attribute to describe if a model has insn and/or data caches.
|
|
||||||
(define-attr
|
|
||||||
(for model)
|
|
||||||
(type enum)
|
|
||||||
(name HAS-CACHE)
|
|
||||||
(comment "if this model has caches")
|
|
||||||
(values DATA-CACHE INSN-CACHE)
|
|
||||||
)
|
|
||||||
|
|
||||||
; An attribute to describe if an insn can be in the delay slot or not.
|
|
||||||
(define-attr
|
|
||||||
(for insn)
|
|
||||||
(type boolean)
|
|
||||||
(name NOT-IN-DELAY-SLOT)
|
|
||||||
(comment "insn can't go in delay slot")
|
|
||||||
)
|
|
||||||
|
|
||||||
; IDOC attribute for instruction documentation.
|
|
||||||
|
|
||||||
(define-attr
|
|
||||||
(for insn)
|
|
||||||
(type enum)
|
|
||||||
(name IDOC)
|
|
||||||
(comment "insn kind for documentation")
|
|
||||||
(attrs META)
|
|
||||||
(values
|
|
||||||
(MEM - () "Memory")
|
|
||||||
(ALU - () "ALU")
|
|
||||||
(FPU - () "FPU")
|
|
||||||
(BR - () "Branch")
|
|
||||||
(PRIV - () "Priviledged")
|
|
||||||
(MISC - () "Miscellaneous")
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
; Enum for exception vectors.
|
|
||||||
(define-enum
|
|
||||||
(name e-exception)
|
|
||||||
(comment "exception vectors")
|
|
||||||
(attrs)
|
|
||||||
(prefix E_)
|
|
||||||
(values (("RESET") ("BUSERR" -) ("DPF" -) ("IPF" -) ("EXTINT" -) ("ALIGN" -)
|
|
||||||
("ILLEGAL" -) ("PEINT" -) ("DTLBMISS" -) ("ITLBMISS" -) ("RRANGE" -)
|
|
||||||
("SYSCALL" -) ("BREAK" -) ("RESERVED" -)))
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
; Instruction set parameters.
|
|
||||||
|
|
||||||
(define-isa
|
|
||||||
; Name of the ISA.
|
|
||||||
(name or32)
|
|
||||||
|
|
||||||
; Base insturction length. The insns is always 32 bits wide.
|
|
||||||
(base-insn-bitsize 32)
|
|
||||||
|
|
||||||
; Address of insn in delay slot
|
|
||||||
(setup-semantics (set-quiet (reg h-delay-insn) (add pc 4)))
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
; CPU family definitions.
|
|
||||||
|
|
||||||
(define-cpu
|
|
||||||
; CPU names must be distinct from the architecture name and machine names.
|
|
||||||
; The "b" suffix stands for "base" and is the convention.
|
|
||||||
; The "f" suffix stands for "family" and is the convention.
|
|
||||||
(name openriscbf)
|
|
||||||
(comment "OpenRISC base family")
|
|
||||||
(endian big)
|
|
||||||
(word-bitsize 32)
|
|
||||||
)
|
|
||||||
|
|
||||||
; Generic machine
|
|
||||||
(define-mach
|
|
||||||
(name openrisc)
|
|
||||||
(comment "Generic OpenRISC cpu")
|
|
||||||
(cpu openriscbf)
|
|
||||||
(bfd-name "openrisc")
|
|
||||||
)
|
|
||||||
|
|
||||||
; OpenRISC 1300 machine
|
|
||||||
(define-mach
|
|
||||||
(name or1300)
|
|
||||||
(comment "OpenRISC 1300")
|
|
||||||
(cpu openriscbf)
|
|
||||||
(bfd-name "openrisc:1300")
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
; Model descriptions
|
|
||||||
|
|
||||||
; Generic OpenRISC model
|
|
||||||
(define-model
|
|
||||||
(name openrisc-1) (comment "OpenRISC generic model") (attrs)
|
|
||||||
(mach openrisc)
|
|
||||||
|
|
||||||
; Nothing special about this.
|
|
||||||
(unit u-exec "Execution Unit" () 1 1 () () () ())
|
|
||||||
)
|
|
||||||
|
|
||||||
; OpenRISC 1320
|
|
||||||
(define-model
|
|
||||||
(name or1320-1) (comment "OpenRISC 1320 model")
|
|
||||||
|
|
||||||
; This model has both instruction and data cache
|
|
||||||
(attrs (HAS-CACHE INSN-CACHE,DATA-CACHE))
|
|
||||||
(mach or1300)
|
|
||||||
|
|
||||||
; Nothing special about this.
|
|
||||||
(unit u-exec "Execution Unit" () 1 1 () () () ())
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
; Instruction fields.
|
|
||||||
|
|
||||||
; Attributes:
|
|
||||||
; . PCREL-ADDR pc relative value (for reloc and disassembly purposes)
|
|
||||||
; . ABS-ADDR absolute address (for reloc and disassembly purposes?)
|
|
||||||
; . RESERVED bits are not used to decode insn, must be all 0
|
|
||||||
|
|
||||||
; Instruction classes.
|
|
||||||
(dnf f-class "insn class" () 31 2)
|
|
||||||
(dnf f-sub "sub class" () 29 4)
|
|
||||||
|
|
||||||
; Register fields.
|
|
||||||
(dnf f-r1 "r1" () 25 5)
|
|
||||||
(dnf f-r2 "r2" () 20 5)
|
|
||||||
(dnf f-r3 "r3" () 15 5)
|
|
||||||
|
|
||||||
; Immediates.
|
|
||||||
(df f-simm16 "signed imm (16)" () 15 16 INT #f #f)
|
|
||||||
(dnf f-uimm16 "unsigned imm (16)" () 15 16)
|
|
||||||
(dnf f-uimm5 "unsigned imm (5)" () 4 5)
|
|
||||||
(df f-hi16 "high 16" () 15 16 INT #f #f)
|
|
||||||
(df f-lo16 "low 16" () 15 16 INT #f #f)
|
|
||||||
|
|
||||||
; Sub fields
|
|
||||||
(dnf f-op1 "op1" () 31 2)
|
|
||||||
(dnf f-op2 "op2" () 29 4)
|
|
||||||
(dnf f-op3 "op3" () 25 2)
|
|
||||||
(dnf f-op4 "op4" () 23 3)
|
|
||||||
(dnf f-op5 "op3" () 25 5)
|
|
||||||
(dnf f-op6 "op4" () 7 3)
|
|
||||||
(dnf f-op7 "op5" () 3 4)
|
|
||||||
|
|
||||||
(dnf f-i16-1 "uimm16-1" () 10 11)
|
|
||||||
(dnf f-i16-2 "uimm16-2" () 25 5)
|
|
||||||
|
|
||||||
; PC relative, 26-bit (2 shifted to right)
|
|
||||||
(df f-disp26 "disp26" (PCREL-ADDR) 25 26 INT
|
|
||||||
((value pc) (sra WI (sub WI value pc) (const 2)))
|
|
||||||
((value pc) (add WI (sll WI value (const 2)) pc)))
|
|
||||||
|
|
||||||
; absolute, 26-bit (2 shifted to right)
|
|
||||||
(df f-abs26 "abs26" (ABS-ADDR) 25 26 INT
|
|
||||||
((value pc) (sra WI pc (const 2)))
|
|
||||||
((value pc) (sll WI value (const 2))))
|
|
||||||
|
|
||||||
(define-multi-ifield
|
|
||||||
(name f-i16nc)
|
|
||||||
(comment "16 bit signed")
|
|
||||||
(attrs SIGN-OPT)
|
|
||||||
(mode HI)
|
|
||||||
(subfields f-i16-1 f-i16-2)
|
|
||||||
(insert (sequence ()
|
|
||||||
(set (ifield f-i16-2) (and (sra (ifield f-i16nc)
|
|
||||||
(const 11))
|
|
||||||
(const #x1f)))
|
|
||||||
(set (ifield f-i16-1) (and (ifield f-i16nc)
|
|
||||||
(const #x7ff)))))
|
|
||||||
(extract (sequence ()
|
|
||||||
(set (ifield f-i16nc) (c-raw-call SI "@arch@_sign_extend_16bit"
|
|
||||||
(or (sll (ifield f-i16-2)
|
|
||||||
(const 11))
|
|
||||||
(ifield f-i16-1))))))
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
; Enums.
|
|
||||||
|
|
||||||
; insn-class: bits 31-30
|
|
||||||
(define-normal-insn-enum insn-class "FIXME" () OP1_ f-class
|
|
||||||
(.map .str (.iota 4))
|
|
||||||
)
|
|
||||||
|
|
||||||
(define-normal-insn-enum insn-sub "FIXME" () OP2_ f-sub
|
|
||||||
(.map .str (.iota 16))
|
|
||||||
)
|
|
||||||
|
|
||||||
(define-normal-insn-enum insn-op3 "FIXME" () OP3_ f-op3
|
|
||||||
(.map .str (.iota 4))
|
|
||||||
)
|
|
||||||
|
|
||||||
(define-normal-insn-enum insn-op4 "FIXME" () OP4_ f-op4
|
|
||||||
(.map .str (.iota 8))
|
|
||||||
)
|
|
||||||
|
|
||||||
(define-normal-insn-enum insn-op5 "FIXME" () OP5_ f-op5
|
|
||||||
(.map .str (.iota 32))
|
|
||||||
)
|
|
||||||
|
|
||||||
(define-normal-insn-enum insn-op6 "FIXME" () OP6_ f-op6
|
|
||||||
(.map .str (.iota 8))
|
|
||||||
)
|
|
||||||
|
|
||||||
(define-normal-insn-enum insn-op7 "FIXME" () OP7_ f-op7
|
|
||||||
(.map .str (.iota 16))
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; Hardware pieces.
|
|
||||||
; These entries list the elements of the raw hardware.
|
|
||||||
; They're also used to provide tables and other elements of the assembly
|
|
||||||
; language.
|
|
||||||
|
|
||||||
(dnh h-pc "program counter" (PC PROFILE) (pc) () () ())
|
|
||||||
|
|
||||||
(define-hardware
|
|
||||||
(name h-gr) (comment "general registers") (attrs PROFILE)
|
|
||||||
(type register WI (32))
|
|
||||||
(indices keyword ""
|
|
||||||
((r0 0) (r1 1) (r2 2) (r3 3) (r4 4) (r5 5) (r6 6) (r7 7)
|
|
||||||
(r8 8) (r9 9) (r10 10) (r11 11) (r12 12) (r13 13) (r14 14)
|
|
||||||
(r15 15) (r16 16) (r17 17) (r18 18) (r19 19) (r20 20)
|
|
||||||
(r21 21) (r22 22) (r23 23) (r24 24) (r25 25) (r26 26)
|
|
||||||
(r27 27) (r28 28) (r29 29) (r30 30) (r31 31) (lr 11)
|
|
||||||
(sp 1) (fp 2)))
|
|
||||||
)
|
|
||||||
|
|
||||||
(define-hardware
|
|
||||||
(name h-sr) (comment "special registers")
|
|
||||||
(type register WI (#x20000))
|
|
||||||
(get (index) (c-call SI "@arch@_h_sr_get_handler" index))
|
|
||||||
(set (index newval) (c-call VOID "@arch@_h_sr_set_handler" index newval))
|
|
||||||
)
|
|
||||||
|
|
||||||
(dnh h-hi16 "high 16 bits" () (immediate (INT 16)) () () ())
|
|
||||||
(dnh h-lo16 "low 16 bits" () (immediate (INT 16)) () () ())
|
|
||||||
|
|
||||||
(dsh h-cbit "condition bit" () (register BI))
|
|
||||||
(dsh h-delay-insn "delay insn addr" () (register SI))
|
|
||||||
|
|
||||||
|
|
||||||
; Instruction operands.
|
|
||||||
|
|
||||||
(dnop sr "special register" (SEM-ONLY) h-sr f-nil)
|
|
||||||
(dnop cbit "condition bit" (SEM-ONLY) h-cbit f-nil)
|
|
||||||
(dnop simm-16 "16 bit signed immediate" () h-sint f-simm16)
|
|
||||||
(dnop uimm-16 "16 bit unsigned immediate" () h-uint f-uimm16)
|
|
||||||
(dnop disp-26 "pc-rel 26 bit" () h-iaddr f-disp26)
|
|
||||||
(dnop abs-26 "abs 26 bit" () h-iaddr f-abs26)
|
|
||||||
(dnop uimm-5 "imm5" () h-uint f-uimm5)
|
|
||||||
|
|
||||||
(dnop rD "destination register" () h-gr f-r1)
|
|
||||||
(dnop rA "source register A" () h-gr f-r2)
|
|
||||||
(dnop rB "source register B" () h-gr f-r3)
|
|
||||||
|
|
||||||
(dnop op-f-23 "f-op23" () h-uint f-op4)
|
|
||||||
(dnop op-f-3 "f-op3" () h-uint f-op5)
|
|
||||||
|
|
||||||
; For hi(foo).
|
|
||||||
(define-operand
|
|
||||||
(name hi16) (comment "high 16 bit immediate, sign optional")
|
|
||||||
(attrs SIGN-OPT)
|
|
||||||
(type h-hi16)
|
|
||||||
(index f-simm16)
|
|
||||||
(handlers (parse "hi16"))
|
|
||||||
)
|
|
||||||
|
|
||||||
; For lo(foo)
|
|
||||||
(define-operand
|
|
||||||
(name lo16) (comment "low 16 bit immediate, sign optional")
|
|
||||||
(attrs SIGN-OPT)
|
|
||||||
(type h-lo16)
|
|
||||||
(index f-lo16)
|
|
||||||
(handlers (parse "lo16"))
|
|
||||||
)
|
|
||||||
|
|
||||||
(define-operand
|
|
||||||
(name ui16nc)
|
|
||||||
(comment "16 bit immediate, sign optional")
|
|
||||||
(attrs)
|
|
||||||
(type h-lo16)
|
|
||||||
(index f-i16nc)
|
|
||||||
(handlers (parse "lo16"))
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
; Instructions.
|
|
||||||
|
|
||||||
; Branch releated instructions
|
|
||||||
|
|
||||||
(dni l-j "jump (absolute iaddr)"
|
|
||||||
; This function may not be in delay slot
|
|
||||||
(NOT-IN-DELAY-SLOT)
|
|
||||||
|
|
||||||
"l.j ${abs-26}"
|
|
||||||
(+ OP1_0 OP2_0 abs-26)
|
|
||||||
|
|
||||||
; We execute the delay slot before doin' the real branch
|
|
||||||
(delay 1 (set pc abs-26))
|
|
||||||
()
|
|
||||||
)
|
|
||||||
|
|
||||||
(dni l-jal "jump and link (absolute iaddr)"
|
|
||||||
; This function may not be in delay slot
|
|
||||||
(NOT-IN-DELAY-SLOT)
|
|
||||||
|
|
||||||
"l.jal ${abs-26}"
|
|
||||||
(+ OP1_0 OP2_1 abs-26)
|
|
||||||
|
|
||||||
; We execute the delay slot before doin' the real branch
|
|
||||||
; Set LR to (delay insn addr + 4)
|
|
||||||
(sequence ()
|
|
||||||
(set (reg h-gr 11) (add (reg h-delay-insn) 4))
|
|
||||||
(delay 1 (set pc abs-26)))
|
|
||||||
()
|
|
||||||
)
|
|
||||||
|
|
||||||
(dni l-jr "jump register (absolute iaddr)"
|
|
||||||
; This function may not be in delay slot
|
|
||||||
(NOT-IN-DELAY-SLOT)
|
|
||||||
|
|
||||||
"l.jr $rA"
|
|
||||||
(+ OP1_0 OP2_5 OP3_0 OP4_0 rA uimm-16)
|
|
||||||
|
|
||||||
; We execute the delay slot before doin' the real branch
|
|
||||||
(delay 1 (set pc rA))
|
|
||||||
()
|
|
||||||
)
|
|
||||||
|
|
||||||
(dni l-jalr "jump register and link (absolute iaddr)"
|
|
||||||
; This function may not be in delay slot
|
|
||||||
(NOT-IN-DELAY-SLOT)
|
|
||||||
|
|
||||||
"l.jalr $rA"
|
|
||||||
(+ OP1_0 OP2_5 OP3_0 OP4_1 rA uimm-16)
|
|
||||||
|
|
||||||
; We save the value of rA in a temporary slot before setting
|
|
||||||
; the link register. This because "l.jalr r11" would cause
|
|
||||||
; a forever-and-ever loop otherwise.
|
|
||||||
;
|
|
||||||
; We execute the delay slot before doin' the real branch
|
|
||||||
(sequence ((WI tmp-slot))
|
|
||||||
(set tmp-slot rA)
|
|
||||||
(set (reg h-gr 11) (add (reg h-delay-insn) 4))
|
|
||||||
(delay 1 (set pc tmp-slot)))
|
|
||||||
()
|
|
||||||
)
|
|
||||||
|
|
||||||
(dni l-bal "branch and link (pc relative iaddr)"
|
|
||||||
; This function may not be in delay slot
|
|
||||||
(NOT-IN-DELAY-SLOT)
|
|
||||||
|
|
||||||
"l.bal ${disp-26}"
|
|
||||||
(+ OP1_0 OP2_2 disp-26)
|
|
||||||
|
|
||||||
; We execute the delay slot before doin' the real branch
|
|
||||||
; Set LR to (delay insn addr + 4)
|
|
||||||
(sequence ()
|
|
||||||
(set (reg h-gr 11) (add (reg h-delay-insn) 4))
|
|
||||||
(delay 1 (set pc disp-26)))
|
|
||||||
()
|
|
||||||
)
|
|
||||||
|
|
||||||
(dni l-bnf "branch if condition bit not set (pc relative iaddr)"
|
|
||||||
; This function may not be in delay slot
|
|
||||||
(NOT-IN-DELAY-SLOT)
|
|
||||||
|
|
||||||
"l.bnf ${disp-26}"
|
|
||||||
(+ OP1_0 OP2_3 disp-26)
|
|
||||||
|
|
||||||
; We execute the delay slot before doin' the real branch
|
|
||||||
(if (eq cbit 0)
|
|
||||||
(sequence ()
|
|
||||||
(delay 1 (set pc disp-26))))
|
|
||||||
()
|
|
||||||
)
|
|
||||||
|
|
||||||
(dni l-bf "branch if condition bit is set (pc relative iaddr)"
|
|
||||||
; This function may not be in delay slot
|
|
||||||
(NOT-IN-DELAY-SLOT)
|
|
||||||
|
|
||||||
"l.bf ${disp-26}"
|
|
||||||
(+ OP1_0 OP2_4 disp-26)
|
|
||||||
|
|
||||||
; We execute the delay slot before doin' the real branch
|
|
||||||
(if (eq cbit 1)
|
|
||||||
(sequence ()
|
|
||||||
(delay 1 (set pc disp-26))))
|
|
||||||
()
|
|
||||||
)
|
|
||||||
|
|
||||||
(dni l-brk "break (exception)"
|
|
||||||
; This function may not be in delay slot
|
|
||||||
(NOT-IN-DELAY-SLOT)
|
|
||||||
|
|
||||||
"l.brk ${uimm-16}"
|
|
||||||
(+ OP1_0 OP2_5 OP3_3 OP4_0 rA uimm-16)
|
|
||||||
|
|
||||||
; FIXME should we do it like this ??
|
|
||||||
(c-call VOID "@cpu@_cpu_brk" uimm-16)
|
|
||||||
()
|
|
||||||
)
|
|
||||||
|
|
||||||
(dni l-rfe "return from exception"
|
|
||||||
; This function may not be in delay slot
|
|
||||||
(NOT-IN-DELAY-SLOT)
|
|
||||||
|
|
||||||
"l.rfe $rA"
|
|
||||||
(+ OP1_0 OP2_5 OP3_0 OP4_2 rA uimm-16)
|
|
||||||
(sequence ()
|
|
||||||
(delay 1 (set pc (c-call SI "@cpu@_cpu_rfe" rA))))
|
|
||||||
()
|
|
||||||
)
|
|
||||||
|
|
||||||
(dni l-sys "syscall (exception)"
|
|
||||||
; This function may not be in delay slot
|
|
||||||
(NOT-IN-DELAY-SLOT)
|
|
||||||
|
|
||||||
"l.sys ${uimm-16}"
|
|
||||||
(+ OP1_0 OP2_5 OP3_2 OP4_0 rA uimm-16)
|
|
||||||
(sequence()
|
|
||||||
(delay 1 (set pc (c-call SI "@cpu@_except" pc
|
|
||||||
#xc00 uimm-16))))
|
|
||||||
()
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
; Misc instructions
|
|
||||||
|
|
||||||
(dni l-nop "nop"
|
|
||||||
()
|
|
||||||
"l.nop"
|
|
||||||
(+ OP1_0 OP2_5 OP3_1 OP4_0 rA uimm-16)
|
|
||||||
(nop)
|
|
||||||
()
|
|
||||||
)
|
|
||||||
|
|
||||||
(dnmi l-ret "ret" ()
|
|
||||||
"l.ret"
|
|
||||||
(emit l-jr (rA 11) (uimm-16 0))
|
|
||||||
)
|
|
||||||
|
|
||||||
(dni l-movhi "movhi"
|
|
||||||
(DELAY-SLOT)
|
|
||||||
"l.movhi $rD,$hi16"
|
|
||||||
(+ OP1_0 OP2_6 hi16 rD rA)
|
|
||||||
(set rD (sll WI hi16 (const 16)))
|
|
||||||
()
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
; System releated instructions
|
|
||||||
|
|
||||||
(dni l-mfsr "mfsr"
|
|
||||||
(DELAY-SLOT)
|
|
||||||
"l.mfsr $rD,$rA"
|
|
||||||
(+ OP1_0 OP2_7 rD rA uimm-16)
|
|
||||||
(set rD (c-call SI "@cpu@_cpu_mfsr" rA))
|
|
||||||
()
|
|
||||||
)
|
|
||||||
|
|
||||||
(dni l-mtsr "mtsr"
|
|
||||||
(DELAY-SLOT)
|
|
||||||
"l.mtsr $rA,$rB"
|
|
||||||
(+ OP1_1 OP2_0 rA rB rD (f-i16-1 0))
|
|
||||||
(c-call VOID "@cpu@_cpu_mtsr" rA rB)
|
|
||||||
()
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; Load instructions
|
|
||||||
|
|
||||||
(dni l-lw "load word"
|
|
||||||
(DELAY-SLOT)
|
|
||||||
"l.lw $rD,${simm-16}($rA)"
|
|
||||||
(+ OP1_2 OP2_0 rD rA simm-16)
|
|
||||||
(set rD (mem SI (add rA simm-16)))
|
|
||||||
()
|
|
||||||
)
|
|
||||||
|
|
||||||
(dni l-lbz "load byte (zero extend)"
|
|
||||||
(DELAY-SLOT)
|
|
||||||
"l.lbz $rD,${simm-16}($rA)"
|
|
||||||
(+ OP1_2 OP2_1 rD rA simm-16)
|
|
||||||
(set rD (zext SI (mem QI (add rA simm-16))))
|
|
||||||
()
|
|
||||||
)
|
|
||||||
|
|
||||||
(dni l-lbs "load byte (sign extend)"
|
|
||||||
(DELAY-SLOT)
|
|
||||||
"l.lbs $rD,${simm-16}($rA)"
|
|
||||||
(+ OP1_2 OP2_2 rD rA simm-16)
|
|
||||||
(set rD (ext SI (mem QI (add rA simm-16))))
|
|
||||||
()
|
|
||||||
)
|
|
||||||
|
|
||||||
(dni l-lhz "load halfword (zero extend)"
|
|
||||||
(DELAY-SLOT)
|
|
||||||
"l.lhz $rD,${simm-16}($rA)"
|
|
||||||
(+ OP1_2 OP2_3 rD simm-16 rA)
|
|
||||||
(set rD (zext SI (mem HI (add rA simm-16))))
|
|
||||||
()
|
|
||||||
)
|
|
||||||
|
|
||||||
(dni l-lhs "load halfword (sign extend)"
|
|
||||||
(DELAY-SLOT)
|
|
||||||
"l.lhs $rD,${simm-16}($rA)"
|
|
||||||
(+ OP1_2 OP2_4 rD rA simm-16)
|
|
||||||
(set rD (ext SI (mem HI (add rA simm-16))))
|
|
||||||
()
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
; Store instructions
|
|
||||||
;
|
|
||||||
; We have to use a multi field since the integer is splited over 2 fields
|
|
||||||
|
|
||||||
(define-pmacro (store-insn mnemonic op2-op mode-op)
|
|
||||||
(begin
|
|
||||||
(dni (.sym l- mnemonic)
|
|
||||||
(.str "l." mnemonic " imm(reg)/reg")
|
|
||||||
(DELAY-SLOT)
|
|
||||||
(.str "l." mnemonic " ${ui16nc}($rA),$rB")
|
|
||||||
(+ OP1_3 op2-op rB rD ui16nc)
|
|
||||||
(set (mem mode-op (add rA ui16nc)) rB)
|
|
||||||
()
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
(store-insn sw OP2_5 SI)
|
|
||||||
(store-insn sb OP2_6 QI)
|
|
||||||
(store-insn sh OP2_7 HI)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; Shift and rotate instructions
|
|
||||||
|
|
||||||
; Reserved fields.
|
|
||||||
(dnf f-f-15-8 "nop" (RESERVED) 15 8)
|
|
||||||
(dnf f-f-10-3 "nop" (RESERVED) 10 3)
|
|
||||||
(dnf f-f-4-1 "nop" (RESERVED) 4 1)
|
|
||||||
(dnf f-f-7-3 "nop" (RESERVED) 7 3)
|
|
||||||
|
|
||||||
(define-pmacro (shift-insn mnemonic op4-op)
|
|
||||||
(begin
|
|
||||||
(dni (.sym l- mnemonic)
|
|
||||||
(.str "l." mnemonic " reg/reg/reg")
|
|
||||||
()
|
|
||||||
(.str "l." mnemonic " $rD,$rA,$rB")
|
|
||||||
(+ OP1_3 OP2_8 rD rA rB (f-f-10-3 0) op4-op (f-f-4-1 0) OP7_8)
|
|
||||||
(set rD (mnemonic rA rB))
|
|
||||||
()
|
|
||||||
)
|
|
||||||
(dni (.sym l- mnemonic "i")
|
|
||||||
(.str "l." mnemonic " reg/reg/imm")
|
|
||||||
()
|
|
||||||
(.str "l." mnemonic "i $rD,$rA,${uimm-5}")
|
|
||||||
(+ OP1_2 OP2_13 rD rA (f-f-15-8 0) op4-op uimm-5)
|
|
||||||
(set rD (mnemonic rA uimm-5))
|
|
||||||
()
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
(shift-insn sll OP6_0)
|
|
||||||
(shift-insn srl OP6_1)
|
|
||||||
(shift-insn sra OP6_2)
|
|
||||||
(shift-insn ror OP6_4)
|
|
||||||
|
|
||||||
|
|
||||||
; Arethmetic insns
|
|
||||||
|
|
||||||
; Reserved fields.
|
|
||||||
(dnf f-f-10-7 "nop" (RESERVED) 10 7)
|
|
||||||
|
|
||||||
(define-pmacro (ar-insn-u mnemonic op2-op op5-op)
|
|
||||||
(begin
|
|
||||||
(dni (.sym l- mnemonic)
|
|
||||||
(.str "l." mnemonic " reg/reg/reg")
|
|
||||||
()
|
|
||||||
(.str "l." mnemonic " $rD,$rA,$rB")
|
|
||||||
(+ OP1_3 OP2_8 rD rA rB (f-f-10-7 0) op5-op)
|
|
||||||
(set rD (mnemonic rA rB))
|
|
||||||
()
|
|
||||||
)
|
|
||||||
(dni (.sym l- mnemonic "i")
|
|
||||||
(.str "l." mnemonic " reg/reg/lo16")
|
|
||||||
()
|
|
||||||
(.str "l." mnemonic "i $rD,$rA,$lo16")
|
|
||||||
(+ OP1_2 op2-op rD rA lo16)
|
|
||||||
(set rD (mnemonic rA (and lo16 #xffff)))
|
|
||||||
()
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
(define-pmacro (ar-insn-s mnemonic op2-op op5-op)
|
|
||||||
(begin
|
|
||||||
(dni (.sym l- mnemonic)
|
|
||||||
(.str "l." mnemonic " reg/reg/reg")
|
|
||||||
()
|
|
||||||
(.str "l." mnemonic " $rD,$rA,$rB")
|
|
||||||
(+ OP1_3 OP2_8 rD rA rB (f-f-10-7 0) op5-op)
|
|
||||||
(set rD (mnemonic rA rB))
|
|
||||||
()
|
|
||||||
)
|
|
||||||
(dni (.sym l- mnemonic "i")
|
|
||||||
(.str "l." mnemonic " reg/reg/lo16")
|
|
||||||
()
|
|
||||||
(.str "l." mnemonic "i $rD,$rA,$lo16")
|
|
||||||
(+ OP1_2 op2-op rD rA lo16)
|
|
||||||
(set rD (mnemonic rA lo16))
|
|
||||||
()
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
(ar-insn-s add OP2_5 OP7_0)
|
|
||||||
;;(ar-op-s addc OP2_5 OP7_0)
|
|
||||||
(ar-insn-s sub OP2_7 OP7_2)
|
|
||||||
(ar-insn-u and OP2_8 OP7_3)
|
|
||||||
(ar-insn-u or OP2_9 OP7_4)
|
|
||||||
(ar-insn-u xor OP2_10 OP7_5)
|
|
||||||
(ar-insn-u mul OP2_11 OP7_6)
|
|
||||||
;;(ar-op-u mac OP2_12 OP7_7)
|
|
||||||
|
|
||||||
|
|
||||||
(dni l-div "divide (signed)"
|
|
||||||
(DELAY-SLOT)
|
|
||||||
"l.div $rD,$rA,$rB"
|
|
||||||
(+ OP1_3 OP2_8 rD rA rB (f-f-10-7 0) OP7_9)
|
|
||||||
(if VOID (eq rB (const 0))
|
|
||||||
(c-call VOID "@arch@_cpu_trap" pc (enum SI E_ILLEGAL))
|
|
||||||
(set rD (div rA rB)))
|
|
||||||
()
|
|
||||||
)
|
|
||||||
|
|
||||||
(dni l-divu "divide (unsigned)"
|
|
||||||
(DELAY-SLOT)
|
|
||||||
"l.divu $rD,$rA,$rB"
|
|
||||||
(+ OP1_3 OP2_8 rD rA rB (f-f-10-7 0) OP7_10)
|
|
||||||
(if VOID (eq rB (const 0))
|
|
||||||
(c-call VOID "@arch@_cpu_trap" pc (enum SI E_ILLEGAL))
|
|
||||||
(set rD (udiv rA rB)))
|
|
||||||
()
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
; Compare instructions
|
|
||||||
|
|
||||||
; Reserved fields.
|
|
||||||
(dnf f-f-10-11 "nop" (RESERVED) 10 11)
|
|
||||||
|
|
||||||
; Register compare (both signed and unsigned)
|
|
||||||
(define-pmacro (sf-insn-r op1-op op2-op op3-op op3-op-2 sem-op)
|
|
||||||
(begin
|
|
||||||
(dni (.sym l- "sf" (.sym sem-op "s"))
|
|
||||||
(.str "l." mnemonic " reg/reg")
|
|
||||||
(DELAY-SLOT)
|
|
||||||
(.str "l.sf" (.str sem-op) "s $rA,$rB")
|
|
||||||
(+ op1-op op2-op op3-op-2 rA rB (f-f-10-11 0))
|
|
||||||
(set cbit (sem-op rA rB))
|
|
||||||
()
|
|
||||||
)
|
|
||||||
(dni (.sym l- "sf" (.sym sem-op "u"))
|
|
||||||
(.str "l." mnemonic " reg/reg")
|
|
||||||
(DELAY-SLOT)
|
|
||||||
(.str "l.sf" (.str sem-op) "u $rA,$rB")
|
|
||||||
(+ op1-op op2-op op3-op rA rB (f-f-10-11 0))
|
|
||||||
(set cbit (sem-op rA rB))
|
|
||||||
()
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
; Immediate compare (both signed and unsigned)
|
|
||||||
(define-pmacro (sf-insn-i op1-op op2-op op3-op op3-op-2 sem-op)
|
|
||||||
(begin
|
|
||||||
(dni (.sym l- "sf" (.sym sem-op "si"))
|
|
||||||
(.str "l." mnemonic "si reg/imm")
|
|
||||||
(DELAY-SLOT)
|
|
||||||
(.str "l.sf" (.str sem-op) "si $rA,${simm-16}")
|
|
||||||
(+ op1-op op2-op op3-op-2 rA simm-16)
|
|
||||||
(set cbit (sem-op rA simm-16))
|
|
||||||
()
|
|
||||||
)
|
|
||||||
(dni (.sym l- "sf" (.sym sem-op "ui"))
|
|
||||||
(.str "l." mnemonic "ui reg/imm")
|
|
||||||
(DELAY-SLOT)
|
|
||||||
(.str "l.sf" (.str sem-op) "ui $rA,${uimm-16}")
|
|
||||||
(+ op1-op op2-op op3-op rA uimm-16)
|
|
||||||
(set cbit (sem-op rA uimm-16))
|
|
||||||
()
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
(define-pmacro (sf-insn op5-op sem-op)
|
|
||||||
(begin
|
|
||||||
(dni (.sym l- "sf" sem-op)
|
|
||||||
(.str "l." mnemonic " reg/reg")
|
|
||||||
(DELAY-SLOT)
|
|
||||||
(.str "l.sf" (.str sem-op) " $rA,$rB")
|
|
||||||
(+ OP1_3 OP2_9 op5-op rA rB (f-f-10-11 0))
|
|
||||||
(set cbit (sem-op rA rB))
|
|
||||||
()
|
|
||||||
)
|
|
||||||
(dni (.sym l- "sf" (.sym sem-op "i"))
|
|
||||||
(.str "l." mnemonic "i reg/imm")
|
|
||||||
(DELAY-SLOT)
|
|
||||||
(.str "l.sf" (.str sem-op) "i $rA,${simm-16}")
|
|
||||||
(+ OP1_2 OP2_14 op5-op rA simm-16)
|
|
||||||
(set cbit (sem-op rA simm-16))
|
|
||||||
()
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
(sf-insn-r OP1_3 OP2_9 OP5_2 OP5_6 gt)
|
|
||||||
(sf-insn-r OP1_3 OP2_9 OP5_3 OP5_7 ge)
|
|
||||||
(sf-insn-r OP1_3 OP2_9 OP5_4 OP5_8 lt)
|
|
||||||
(sf-insn-r OP1_3 OP2_9 OP5_5 OP5_9 le)
|
|
||||||
|
|
||||||
(sf-insn-i OP1_2 OP2_14 OP5_2 OP5_6 gt)
|
|
||||||
(sf-insn-i OP1_2 OP2_14 OP5_3 OP5_7 ge)
|
|
||||||
(sf-insn-i OP1_2 OP2_14 OP5_4 OP5_8 lt)
|
|
||||||
(sf-insn-i OP1_2 OP2_14 OP5_5 OP5_9 le)
|
|
||||||
|
|
||||||
(sf-insn OP5_0 eq)
|
|
||||||
(sf-insn OP5_1 ne)
|
|
164
cpu/openrisc.opc
164
cpu/openrisc.opc
@ -1,164 +0,0 @@
|
|||||||
/* OpenRISC opcode support. -*- C -*-
|
|
||||||
Copyright 2000, 2001, 2003, 2005, 2011 Free Software Foundation, Inc.
|
|
||||||
|
|
||||||
Contributed by Red Hat Inc;
|
|
||||||
|
|
||||||
This file is part of the GNU Binutils.
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
|
||||||
MA 02110-1301, USA. */
|
|
||||||
|
|
||||||
/* This file is an addendum to or32.cpu. Heavy use of C code isn't
|
|
||||||
appropriate in .cpu files, so it resides here. This especially applies
|
|
||||||
to assembly/disassembly where parsing/printing can be quite involved.
|
|
||||||
Such things aren't really part of the specification of the cpu, per se,
|
|
||||||
so .cpu files provide the general framework and .opc files handle the
|
|
||||||
nitty-gritty details as necessary.
|
|
||||||
|
|
||||||
Each section is delimited with start and end markers.
|
|
||||||
|
|
||||||
<arch>-opc.h additions use: "-- opc.h"
|
|
||||||
<arch>-opc.c additions use: "-- opc.c"
|
|
||||||
<arch>-asm.c additions use: "-- asm.c"
|
|
||||||
<arch>-dis.c additions use: "-- dis.c"
|
|
||||||
<arch>-ibd.h additions use: "-- ibd.h" */
|
|
||||||
|
|
||||||
/* -- opc.h */
|
|
||||||
#undef CGEN_DIS_HASH_SIZE
|
|
||||||
#define CGEN_DIS_HASH_SIZE 64
|
|
||||||
#undef CGEN_DIS_HASH
|
|
||||||
#define CGEN_DIS_HASH(buffer, value) (((unsigned char *) (buffer))[0] >> 2)
|
|
||||||
|
|
||||||
extern long openrisc_sign_extend_16bit (long);
|
|
||||||
/* -- */
|
|
||||||
|
|
||||||
/* -- opc.c */
|
|
||||||
/* -- */
|
|
||||||
|
|
||||||
/* -- asm.c */
|
|
||||||
|
|
||||||
static const char * MISSING_CLOSING_PARENTHESIS = N_("missing `)'");
|
|
||||||
|
|
||||||
#define CGEN_VERBOSE_ASSEMBLER_ERRORS
|
|
||||||
|
|
||||||
long
|
|
||||||
openrisc_sign_extend_16bit (long value)
|
|
||||||
{
|
|
||||||
return ((value & 0xffff) ^ 0x8000) - 0x8000;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Handle hi(). */
|
|
||||||
|
|
||||||
static const char *
|
|
||||||
parse_hi16 (CGEN_CPU_DESC cd, const char ** strp, int opindex, long * valuep)
|
|
||||||
{
|
|
||||||
const char *errmsg;
|
|
||||||
enum cgen_parse_operand_result result_type;
|
|
||||||
unsigned long ret;
|
|
||||||
|
|
||||||
if (**strp == '#')
|
|
||||||
++*strp;
|
|
||||||
|
|
||||||
if (strncasecmp (*strp, "hi(", 3) == 0)
|
|
||||||
{
|
|
||||||
bfd_vma value;
|
|
||||||
|
|
||||||
*strp += 3;
|
|
||||||
errmsg = cgen_parse_address (cd, strp, opindex, BFD_RELOC_HI16,
|
|
||||||
& result_type, & value);
|
|
||||||
if (**strp != ')')
|
|
||||||
return MISSING_CLOSING_PARENTHESIS;
|
|
||||||
|
|
||||||
++*strp;
|
|
||||||
if (errmsg == NULL
|
|
||||||
&& result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER)
|
|
||||||
value >>= 16;
|
|
||||||
ret = value;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (**strp == '-')
|
|
||||||
{
|
|
||||||
long value;
|
|
||||||
|
|
||||||
errmsg = cgen_parse_signed_integer (cd, strp, opindex, &value);
|
|
||||||
ret = value;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
unsigned long value;
|
|
||||||
|
|
||||||
errmsg = cgen_parse_unsigned_integer (cd, strp, opindex, &value);
|
|
||||||
ret = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
*valuep = ((ret & 0xffff) ^ 0x8000) - 0x8000;
|
|
||||||
return errmsg;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Handle lo(). */
|
|
||||||
|
|
||||||
static const char *
|
|
||||||
parse_lo16 (CGEN_CPU_DESC cd, const char ** strp, int opindex, long * valuep)
|
|
||||||
{
|
|
||||||
const char *errmsg;
|
|
||||||
enum cgen_parse_operand_result result_type;
|
|
||||||
unsigned long ret;
|
|
||||||
|
|
||||||
if (**strp == '#')
|
|
||||||
++*strp;
|
|
||||||
|
|
||||||
if (strncasecmp (*strp, "lo(", 3) == 0)
|
|
||||||
{
|
|
||||||
bfd_vma value;
|
|
||||||
|
|
||||||
*strp += 3;
|
|
||||||
errmsg = cgen_parse_address (cd, strp, opindex, BFD_RELOC_LO16,
|
|
||||||
& result_type, & value);
|
|
||||||
if (**strp != ')')
|
|
||||||
return MISSING_CLOSING_PARENTHESIS;
|
|
||||||
|
|
||||||
++*strp;
|
|
||||||
ret = value;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (**strp == '-')
|
|
||||||
{
|
|
||||||
long value;
|
|
||||||
|
|
||||||
errmsg = cgen_parse_signed_integer (cd, strp, opindex, &value);
|
|
||||||
ret = value;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
unsigned long value;
|
|
||||||
|
|
||||||
errmsg = cgen_parse_unsigned_integer (cd, strp, opindex, &value);
|
|
||||||
ret = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
*valuep = ((ret & 0xffff) ^ 0x8000) - 0x8000;
|
|
||||||
return errmsg;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -- */
|
|
||||||
|
|
||||||
/* -- ibd.h */
|
|
||||||
extern long openrisc_sign_extend_16bit (long);
|
|
||||||
|
|
||||||
/* -- */
|
|
131
cpu/or1k.cpu
Normal file
131
cpu/or1k.cpu
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
; OpenRISC 1000 architecture. -*- Scheme -*-
|
||||||
|
; Copyright 2000-2014 Free Software Foundation, Inc.
|
||||||
|
; Contributed for OR32 by Johan Rydberg, jrydberg@opencores.org
|
||||||
|
; Modified by Julius Baxter, juliusbaxter@gmail.com
|
||||||
|
; Modified by Peter Gavin, pgavin@gmail.com
|
||||||
|
;
|
||||||
|
; This program is free software; you can redistribute it and/or modify
|
||||||
|
; it under the terms of the GNU General Public License as published by
|
||||||
|
; the Free Software Foundation; either version 3 of the License, or
|
||||||
|
; (at your option) any later version.
|
||||||
|
;
|
||||||
|
; This program is distributed in the hope that it will be useful,
|
||||||
|
; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
; GNU General Public License for more details.
|
||||||
|
;
|
||||||
|
; You should have received a copy of the GNU General Public License
|
||||||
|
; along with this program; if not, see <http://www.gnu.org/licenses/>
|
||||||
|
|
||||||
|
(include "simplify.inc")
|
||||||
|
|
||||||
|
; The OpenRISC family is a set of RISC microprocessor architectures with an
|
||||||
|
; emphasis on scalability and is targetted at embedded use.
|
||||||
|
; The CPU RTL development is a collaborative open source effort.
|
||||||
|
; http://opencores.org/or1k
|
||||||
|
; http://openrisc.net
|
||||||
|
|
||||||
|
(define-arch
|
||||||
|
(name or1k)
|
||||||
|
(comment "OpenRISC 1000")
|
||||||
|
(default-alignment aligned)
|
||||||
|
(insn-lsb0? #t)
|
||||||
|
(machs or32 or32nd or64 or64nd)
|
||||||
|
(isas openrisc)
|
||||||
|
)
|
||||||
|
|
||||||
|
; Instruction set parameters.
|
||||||
|
(define-isa
|
||||||
|
; Name of the ISA.
|
||||||
|
(name openrisc)
|
||||||
|
; Base insturction length. The insns are always 32 bits wide.
|
||||||
|
(base-insn-bitsize 32)
|
||||||
|
)
|
||||||
|
|
||||||
|
(define-pmacro OR32-MACHS or32,or32nd)
|
||||||
|
(define-pmacro OR64-MACHS or64,or64nd)
|
||||||
|
(define-pmacro ORBIS-MACHS or32,or32nd,or64,or64nd)
|
||||||
|
(define-pmacro ORFPX-MACHS or32,or32nd,or64,or64nd)
|
||||||
|
(define-pmacro ORFPX32-MACHS or32,or32nd,or64,or64nd)
|
||||||
|
(define-pmacro ORFPX64-MACHS or64,or64nd)
|
||||||
|
|
||||||
|
(define-attr
|
||||||
|
(for model)
|
||||||
|
(type boolean)
|
||||||
|
(name NO-DELAY-SLOT)
|
||||||
|
(comment "does not have delay slots")
|
||||||
|
)
|
||||||
|
|
||||||
|
(if (keep-mach? (or32 or32nd))
|
||||||
|
(begin
|
||||||
|
(define-cpu
|
||||||
|
(name or1k32bf)
|
||||||
|
(comment "OpenRISC 1000 32-bit CPU family")
|
||||||
|
(insn-endian big)
|
||||||
|
(data-endian big)
|
||||||
|
(word-bitsize 32)
|
||||||
|
(file-transform "")
|
||||||
|
)
|
||||||
|
|
||||||
|
(define-mach
|
||||||
|
(name or32)
|
||||||
|
(comment "Generic OpenRISC 1000 32-bit CPU")
|
||||||
|
(cpu or1k32bf)
|
||||||
|
(bfd-name "or1k")
|
||||||
|
)
|
||||||
|
|
||||||
|
(define-mach
|
||||||
|
(name or32nd)
|
||||||
|
(comment "Generic OpenRISC 1000 32-bit CPU")
|
||||||
|
(cpu or1k32bf)
|
||||||
|
(bfd-name "or1knd")
|
||||||
|
)
|
||||||
|
|
||||||
|
; OpenRISC 1200 - 32-bit or1k CPU implementation
|
||||||
|
(define-model
|
||||||
|
(name or1200) (comment "OpenRISC 1200 model")
|
||||||
|
(attrs)
|
||||||
|
(mach or32)
|
||||||
|
(unit u-exec "Execution Unit" () 1 1 () () () ())
|
||||||
|
)
|
||||||
|
|
||||||
|
; OpenRISC 1200 - 32-bit or1k CPU implementation
|
||||||
|
(define-model
|
||||||
|
(name or1200nd) (comment "OpenRISC 1200 model")
|
||||||
|
(attrs NO-DELAY-SLOT)
|
||||||
|
(mach or32nd)
|
||||||
|
(unit u-exec "Execution Unit" () 1 1 () () () ())
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
(if (keep-mach? (or64 or64nd))
|
||||||
|
(begin
|
||||||
|
(define-cpu
|
||||||
|
(name or1k64bf)
|
||||||
|
(comment "OpenRISC 1000 64-bit CPU family")
|
||||||
|
(insn-endian big)
|
||||||
|
(data-endian big)
|
||||||
|
(word-bitsize 64)
|
||||||
|
(file-transform "64")
|
||||||
|
)
|
||||||
|
|
||||||
|
(define-mach
|
||||||
|
(name or64)
|
||||||
|
(comment "Generic OpenRISC 1000 64-bit CPU")
|
||||||
|
(cpu or1k64bf)
|
||||||
|
(bfd-name "or1k64")
|
||||||
|
)
|
||||||
|
|
||||||
|
(define-mach
|
||||||
|
(name or64nd)
|
||||||
|
(comment "Generic OpenRISC 1000 ND 64-bit CPU")
|
||||||
|
(cpu or1k64bf)
|
||||||
|
(bfd-name "or1k64nd")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
(include "or1kcommon.cpu")
|
||||||
|
(include "or1korbis.cpu")
|
||||||
|
(include "or1korfpx.cpu")
|
421
cpu/or1k.opc
Normal file
421
cpu/or1k.opc
Normal file
@ -0,0 +1,421 @@
|
|||||||
|
/* OpenRISC 1000 opcode support. -*- C -*-
|
||||||
|
Copyright 2000-2014 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
Originally ontributed for OR32 by Red Hat Inc;
|
||||||
|
|
||||||
|
This file is part of the GNU Binutils.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, see <http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
/* This file is an addendum to or1k.cpu. Heavy use of C code isn't
|
||||||
|
appropriate in .cpu files, so it resides here. This especially applies
|
||||||
|
to assembly/disassembly where parsing/printing can be quite involved.
|
||||||
|
Such things aren't really part of the specification of the cpu, per se,
|
||||||
|
so .cpu files provide the general framework and .opc files handle the
|
||||||
|
nitty-gritty details as necessary.
|
||||||
|
|
||||||
|
Each section is delimited with start and end markers.
|
||||||
|
|
||||||
|
<arch>-opc.h additions use: "-- opc.h"
|
||||||
|
<arch>-opc.c additions use: "-- opc.c"
|
||||||
|
<arch>-asm.c additions use: "-- asm.c"
|
||||||
|
<arch>-dis.c additions use: "-- dis.c"
|
||||||
|
<arch>-ibd.h additions use: "-- ibd.h" */
|
||||||
|
|
||||||
|
/* -- opc.h */
|
||||||
|
|
||||||
|
#undef CGEN_DIS_HASH_SIZE
|
||||||
|
#define CGEN_DIS_HASH_SIZE 256
|
||||||
|
#undef CGEN_DIS_HASH
|
||||||
|
#define CGEN_DIS_HASH(buffer, value) (((unsigned char *) (buffer))[0] >> 2)
|
||||||
|
|
||||||
|
/* -- */
|
||||||
|
|
||||||
|
/* -- opc.c */
|
||||||
|
/* -- */
|
||||||
|
|
||||||
|
/* -- asm.c */
|
||||||
|
|
||||||
|
static const char * MISSING_CLOSING_PARENTHESIS = N_("missing `)'");
|
||||||
|
|
||||||
|
#define CGEN_VERBOSE_ASSEMBLER_ERRORS
|
||||||
|
|
||||||
|
static const char *
|
||||||
|
parse_disp26 (CGEN_CPU_DESC cd,
|
||||||
|
const char ** strp,
|
||||||
|
int opindex,
|
||||||
|
int opinfo,
|
||||||
|
enum cgen_parse_operand_result * resultp,
|
||||||
|
bfd_vma * valuep)
|
||||||
|
{
|
||||||
|
const char *errmsg = NULL;
|
||||||
|
enum cgen_parse_operand_result result_type;
|
||||||
|
|
||||||
|
if (strncasecmp (*strp, "plt(", 4) == 0)
|
||||||
|
{
|
||||||
|
bfd_vma value;
|
||||||
|
|
||||||
|
*strp += 4;
|
||||||
|
errmsg = cgen_parse_address (cd, strp, opindex, BFD_RELOC_OR1K_PLT26,
|
||||||
|
& result_type, & value);
|
||||||
|
if (**strp != ')')
|
||||||
|
return MISSING_CLOSING_PARENTHESIS;
|
||||||
|
++*strp;
|
||||||
|
if (errmsg == NULL
|
||||||
|
&& result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER)
|
||||||
|
value = (value >> 2) & 0xffff;
|
||||||
|
*valuep = value;
|
||||||
|
return errmsg;
|
||||||
|
}
|
||||||
|
return cgen_parse_address (cd, strp, opindex, opinfo, resultp, valuep);
|
||||||
|
}
|
||||||
|
|
||||||
|
static const char *
|
||||||
|
parse_simm16 (CGEN_CPU_DESC cd, const char ** strp, int opindex, long * valuep)
|
||||||
|
{
|
||||||
|
const char *errmsg;
|
||||||
|
enum cgen_parse_operand_result result_type;
|
||||||
|
long ret;
|
||||||
|
|
||||||
|
if (**strp == '#')
|
||||||
|
++*strp;
|
||||||
|
|
||||||
|
if (strncasecmp (*strp, "hi(", 3) == 0)
|
||||||
|
{
|
||||||
|
bfd_vma value;
|
||||||
|
|
||||||
|
*strp += 3;
|
||||||
|
errmsg = cgen_parse_address (cd, strp, opindex, BFD_RELOC_HI16,
|
||||||
|
& result_type, & value);
|
||||||
|
if (**strp != ')')
|
||||||
|
errmsg = MISSING_CLOSING_PARENTHESIS;
|
||||||
|
++*strp;
|
||||||
|
|
||||||
|
ret = value;
|
||||||
|
|
||||||
|
if (errmsg == NULL
|
||||||
|
&& result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER)
|
||||||
|
{
|
||||||
|
ret >>= 16;
|
||||||
|
ret &= 0xffff;
|
||||||
|
ret = (ret ^ 0x8000) - 0x8000;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (strncasecmp (*strp, "lo(", 3) == 0)
|
||||||
|
{
|
||||||
|
bfd_vma value;
|
||||||
|
|
||||||
|
*strp += 3;
|
||||||
|
errmsg = cgen_parse_address (cd, strp, opindex, BFD_RELOC_LO16,
|
||||||
|
& result_type, & value);
|
||||||
|
if (**strp != ')')
|
||||||
|
return MISSING_CLOSING_PARENTHESIS;
|
||||||
|
++*strp;
|
||||||
|
|
||||||
|
ret = value;
|
||||||
|
|
||||||
|
if (result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER)
|
||||||
|
{
|
||||||
|
ret &= 0xffff;
|
||||||
|
ret = (ret ^ 0x8000) - 0x8000;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (strncasecmp (*strp, "got(", 4) == 0)
|
||||||
|
{
|
||||||
|
bfd_vma value;
|
||||||
|
|
||||||
|
*strp += 4;
|
||||||
|
errmsg = cgen_parse_address (cd, strp, opindex, BFD_RELOC_OR1K_GOT16,
|
||||||
|
& result_type, & value);
|
||||||
|
if (**strp != ')')
|
||||||
|
return MISSING_CLOSING_PARENTHESIS;
|
||||||
|
++*strp;
|
||||||
|
if (errmsg == NULL
|
||||||
|
&& result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER)
|
||||||
|
value &= 0xffff;
|
||||||
|
*valuep = value;
|
||||||
|
return errmsg;
|
||||||
|
}
|
||||||
|
else if (strncasecmp (*strp, "gotpchi(", 8) == 0)
|
||||||
|
{
|
||||||
|
bfd_vma value;
|
||||||
|
|
||||||
|
*strp += 8;
|
||||||
|
errmsg = cgen_parse_address (cd, strp, opindex,
|
||||||
|
BFD_RELOC_OR1K_GOTPC_HI16,
|
||||||
|
& result_type, & value);
|
||||||
|
if (**strp != ')')
|
||||||
|
return MISSING_CLOSING_PARENTHESIS;
|
||||||
|
++*strp;
|
||||||
|
if (errmsg == NULL
|
||||||
|
&& result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER)
|
||||||
|
value = (value >> 16) & 0xffff;
|
||||||
|
*valuep = value;
|
||||||
|
return errmsg;
|
||||||
|
}
|
||||||
|
else if (strncasecmp (*strp, "gotpclo(", 8) == 0)
|
||||||
|
{
|
||||||
|
bfd_vma value;
|
||||||
|
|
||||||
|
*strp += 8;
|
||||||
|
errmsg = cgen_parse_address (cd, strp, opindex,
|
||||||
|
BFD_RELOC_OR1K_GOTPC_LO16,
|
||||||
|
&result_type, &value);
|
||||||
|
if (**strp != ')')
|
||||||
|
return MISSING_CLOSING_PARENTHESIS;
|
||||||
|
++*strp;
|
||||||
|
if (errmsg == NULL
|
||||||
|
&& result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER)
|
||||||
|
value &= 0xffff;
|
||||||
|
*valuep = value;
|
||||||
|
return errmsg;
|
||||||
|
}
|
||||||
|
else if (strncasecmp (*strp, "gotoffhi(", 9) == 0)
|
||||||
|
{
|
||||||
|
bfd_vma value;
|
||||||
|
|
||||||
|
*strp += 9;
|
||||||
|
errmsg = cgen_parse_address (cd, strp, opindex,
|
||||||
|
BFD_RELOC_OR1K_GOTOFF_HI16,
|
||||||
|
& result_type, & value);
|
||||||
|
|
||||||
|
if (**strp != ')')
|
||||||
|
return MISSING_CLOSING_PARENTHESIS;
|
||||||
|
++*strp;
|
||||||
|
if (errmsg == NULL
|
||||||
|
&& result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER)
|
||||||
|
value = (value >> 16) & 0xffff;
|
||||||
|
*valuep = value;
|
||||||
|
return errmsg;
|
||||||
|
}
|
||||||
|
else if (strncasecmp (*strp, "gotofflo(", 9) == 0)
|
||||||
|
{
|
||||||
|
bfd_vma value;
|
||||||
|
|
||||||
|
*strp += 9;
|
||||||
|
errmsg = cgen_parse_address (cd, strp, opindex,
|
||||||
|
BFD_RELOC_OR1K_GOTOFF_LO16,
|
||||||
|
&result_type, &value);
|
||||||
|
if (**strp != ')')
|
||||||
|
return MISSING_CLOSING_PARENTHESIS;
|
||||||
|
++*strp;
|
||||||
|
if (errmsg == NULL
|
||||||
|
&& result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER)
|
||||||
|
value &= 0xffff;
|
||||||
|
*valuep = value;
|
||||||
|
return errmsg;
|
||||||
|
}
|
||||||
|
else if (strncasecmp (*strp, "tlsgdhi(", 8) == 0)
|
||||||
|
{
|
||||||
|
bfd_vma value;
|
||||||
|
|
||||||
|
*strp += 8;
|
||||||
|
errmsg = cgen_parse_address (cd, strp, opindex,
|
||||||
|
BFD_RELOC_OR1K_TLS_GD_HI16,
|
||||||
|
& result_type, & value);
|
||||||
|
|
||||||
|
if (**strp != ')')
|
||||||
|
return MISSING_CLOSING_PARENTHESIS;
|
||||||
|
++*strp;
|
||||||
|
if (errmsg == NULL
|
||||||
|
&& result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER)
|
||||||
|
value = (value >> 16) & 0xffff;
|
||||||
|
*valuep = value;
|
||||||
|
return errmsg;
|
||||||
|
}
|
||||||
|
else if (strncasecmp (*strp, "tlsgdlo(", 8) == 0)
|
||||||
|
{
|
||||||
|
bfd_vma value;
|
||||||
|
|
||||||
|
*strp += 8;
|
||||||
|
errmsg = cgen_parse_address (cd, strp, opindex,
|
||||||
|
BFD_RELOC_OR1K_TLS_GD_LO16,
|
||||||
|
&result_type, &value);
|
||||||
|
if (**strp != ')')
|
||||||
|
return MISSING_CLOSING_PARENTHESIS;
|
||||||
|
++*strp;
|
||||||
|
if (errmsg == NULL
|
||||||
|
&& result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER)
|
||||||
|
value &= 0xffff;
|
||||||
|
*valuep = value;
|
||||||
|
return errmsg;
|
||||||
|
}
|
||||||
|
else if (strncasecmp (*strp, "tlsldmhi(", 9) == 0)
|
||||||
|
{
|
||||||
|
bfd_vma value;
|
||||||
|
|
||||||
|
*strp += 9;
|
||||||
|
errmsg = cgen_parse_address (cd, strp, opindex,
|
||||||
|
BFD_RELOC_OR1K_TLS_LDM_HI16,
|
||||||
|
& result_type, & value);
|
||||||
|
|
||||||
|
if (**strp != ')')
|
||||||
|
return MISSING_CLOSING_PARENTHESIS;
|
||||||
|
++*strp;
|
||||||
|
if (errmsg == NULL
|
||||||
|
&& result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER)
|
||||||
|
value = (value >> 16) & 0xffff;
|
||||||
|
*valuep = value;
|
||||||
|
return errmsg;
|
||||||
|
}
|
||||||
|
else if (strncasecmp (*strp, "tlsldmlo(", 9) == 0)
|
||||||
|
{
|
||||||
|
bfd_vma value;
|
||||||
|
|
||||||
|
*strp += 9;
|
||||||
|
errmsg = cgen_parse_address (cd, strp, opindex,
|
||||||
|
BFD_RELOC_OR1K_TLS_LDM_LO16,
|
||||||
|
&result_type, &value);
|
||||||
|
if (**strp != ')')
|
||||||
|
return MISSING_CLOSING_PARENTHESIS;
|
||||||
|
++*strp;
|
||||||
|
if (errmsg == NULL
|
||||||
|
&& result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER)
|
||||||
|
value &= 0xffff;
|
||||||
|
*valuep = value;
|
||||||
|
return errmsg;
|
||||||
|
}
|
||||||
|
else if (strncasecmp (*strp, "dtpoffhi(", 9) == 0)
|
||||||
|
{
|
||||||
|
bfd_vma value;
|
||||||
|
|
||||||
|
*strp += 9;
|
||||||
|
errmsg = cgen_parse_address (cd, strp, opindex,
|
||||||
|
BFD_RELOC_OR1K_TLS_LDO_HI16,
|
||||||
|
& result_type, & value);
|
||||||
|
|
||||||
|
if (**strp != ')')
|
||||||
|
return MISSING_CLOSING_PARENTHESIS;
|
||||||
|
++*strp;
|
||||||
|
if (errmsg == NULL
|
||||||
|
&& result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER)
|
||||||
|
value = (value >> 16) & 0xffff;
|
||||||
|
*valuep = value;
|
||||||
|
return errmsg;
|
||||||
|
}
|
||||||
|
else if (strncasecmp (*strp, "dtpofflo(", 9) == 0)
|
||||||
|
{
|
||||||
|
bfd_vma value;
|
||||||
|
|
||||||
|
*strp += 9;
|
||||||
|
errmsg = cgen_parse_address (cd, strp, opindex,
|
||||||
|
BFD_RELOC_OR1K_TLS_LDO_LO16,
|
||||||
|
&result_type, &value);
|
||||||
|
if (**strp != ')')
|
||||||
|
return MISSING_CLOSING_PARENTHESIS;
|
||||||
|
++*strp;
|
||||||
|
if (errmsg == NULL
|
||||||
|
&& result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER)
|
||||||
|
value &= 0xffff;
|
||||||
|
*valuep = value;
|
||||||
|
return errmsg;
|
||||||
|
}
|
||||||
|
else if (strncasecmp (*strp, "gottpoffhi(", 11) == 0)
|
||||||
|
{
|
||||||
|
bfd_vma value;
|
||||||
|
|
||||||
|
*strp += 11;
|
||||||
|
errmsg = cgen_parse_address (cd, strp, opindex,
|
||||||
|
BFD_RELOC_OR1K_TLS_IE_HI16,
|
||||||
|
& result_type, & value);
|
||||||
|
|
||||||
|
if (**strp != ')')
|
||||||
|
return MISSING_CLOSING_PARENTHESIS;
|
||||||
|
++*strp;
|
||||||
|
if (errmsg == NULL
|
||||||
|
&& result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER)
|
||||||
|
value = (value >> 16) & 0xffff;
|
||||||
|
*valuep = value;
|
||||||
|
return errmsg;
|
||||||
|
}
|
||||||
|
else if (strncasecmp (*strp, "gottpofflo(", 11) == 0)
|
||||||
|
{
|
||||||
|
bfd_vma value;
|
||||||
|
|
||||||
|
*strp += 11;
|
||||||
|
errmsg = cgen_parse_address (cd, strp, opindex,
|
||||||
|
BFD_RELOC_OR1K_TLS_IE_LO16,
|
||||||
|
&result_type, &value);
|
||||||
|
if (**strp != ')')
|
||||||
|
return MISSING_CLOSING_PARENTHESIS;
|
||||||
|
++*strp;
|
||||||
|
if (errmsg == NULL
|
||||||
|
&& result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER)
|
||||||
|
value &= 0xffff;
|
||||||
|
*valuep = value;
|
||||||
|
return errmsg;
|
||||||
|
}
|
||||||
|
else if (strncasecmp (*strp, "tpoffhi(", 8) == 0)
|
||||||
|
{
|
||||||
|
bfd_vma value;
|
||||||
|
|
||||||
|
*strp += 8;
|
||||||
|
errmsg = cgen_parse_address (cd, strp, opindex,
|
||||||
|
BFD_RELOC_OR1K_TLS_LE_HI16,
|
||||||
|
& result_type, & value);
|
||||||
|
|
||||||
|
if (**strp != ')')
|
||||||
|
return MISSING_CLOSING_PARENTHESIS;
|
||||||
|
++*strp;
|
||||||
|
if (errmsg == NULL
|
||||||
|
&& result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER)
|
||||||
|
value = (value >> 16) & 0xffff;
|
||||||
|
*valuep = value;
|
||||||
|
return errmsg;
|
||||||
|
}
|
||||||
|
else if (strncasecmp (*strp, "tpofflo(", 8) == 0)
|
||||||
|
{
|
||||||
|
bfd_vma value;
|
||||||
|
|
||||||
|
*strp += 8;
|
||||||
|
errmsg = cgen_parse_address (cd, strp, opindex,
|
||||||
|
BFD_RELOC_OR1K_TLS_LE_LO16,
|
||||||
|
&result_type, &value);
|
||||||
|
if (**strp != ')')
|
||||||
|
return MISSING_CLOSING_PARENTHESIS;
|
||||||
|
++*strp;
|
||||||
|
if (errmsg == NULL
|
||||||
|
&& result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER)
|
||||||
|
value &= 0xffff;
|
||||||
|
*valuep = value;
|
||||||
|
return errmsg;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
long value;
|
||||||
|
errmsg = cgen_parse_signed_integer (cd, strp, opindex, &value);
|
||||||
|
ret = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (errmsg == NULL)
|
||||||
|
*valuep = ret;
|
||||||
|
|
||||||
|
return errmsg;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const char *
|
||||||
|
parse_uimm16 (CGEN_CPU_DESC cd, const char ** strp, int opindex, unsigned long * valuep)
|
||||||
|
{
|
||||||
|
const char *errmsg = parse_simm16(cd, strp, opindex, (long *) valuep);
|
||||||
|
|
||||||
|
if (errmsg == NULL)
|
||||||
|
*valuep &= 0xffff;
|
||||||
|
return errmsg;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -- */
|
||||||
|
|
||||||
|
/* -- ibd.h */
|
||||||
|
|
||||||
|
/* -- */
|
360
cpu/or1kcommon.cpu
Normal file
360
cpu/or1kcommon.cpu
Normal file
@ -0,0 +1,360 @@
|
|||||||
|
; OpenRISC 1000 32-bit CPU hardware description. -*- Scheme -*-
|
||||||
|
; Copyright 2000-2014 Free Software Foundation, Inc.
|
||||||
|
; Contributed for OR32 by Johan Rydberg, jrydberg@opencores.org
|
||||||
|
; Modified by Julius Baxter, juliusbaxter@gmail.com
|
||||||
|
;
|
||||||
|
; This program is free software; you can redistribute it and/or modify
|
||||||
|
; it under the terms of the GNU General Public License as published by
|
||||||
|
; the Free Software Foundation; either version 3 of the License, or
|
||||||
|
; (at your option) any later version.
|
||||||
|
;
|
||||||
|
; This program is distributed in the hope that it will be useful,
|
||||||
|
; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
; GNU General Public License for more details.
|
||||||
|
;
|
||||||
|
; You should have received a copy of the GNU General Public License
|
||||||
|
; along with this program; if not, see <http://www.gnu.org/licenses/>
|
||||||
|
|
||||||
|
; Hardware pieces.
|
||||||
|
; These entries list the elements of the raw hardware.
|
||||||
|
; They're also used to provide tables and other elements of the assembly
|
||||||
|
; language.
|
||||||
|
|
||||||
|
(define-hardware
|
||||||
|
(name h-pc)
|
||||||
|
(comment "program counter")
|
||||||
|
(attrs PC (MACH ORBIS-MACHS))
|
||||||
|
(type pc UWI)
|
||||||
|
)
|
||||||
|
|
||||||
|
(define-pmacro REG-INDICES
|
||||||
|
((r0 0)
|
||||||
|
(r1 1)
|
||||||
|
(r2 2)
|
||||||
|
(r3 3)
|
||||||
|
(r4 4)
|
||||||
|
(r5 5)
|
||||||
|
(r6 6)
|
||||||
|
(r7 7)
|
||||||
|
(r8 8)
|
||||||
|
(r9 9)
|
||||||
|
(r10 10)
|
||||||
|
(r11 11)
|
||||||
|
(r12 12)
|
||||||
|
(r13 13)
|
||||||
|
(r14 14)
|
||||||
|
(r15 15)
|
||||||
|
(r16 16)
|
||||||
|
(r17 17)
|
||||||
|
(r18 18)
|
||||||
|
(r19 19)
|
||||||
|
(r20 20)
|
||||||
|
(r21 21)
|
||||||
|
(r22 22)
|
||||||
|
(r23 23)
|
||||||
|
(r24 24)
|
||||||
|
(r25 25)
|
||||||
|
(r26 26)
|
||||||
|
(r27 27)
|
||||||
|
(r28 28)
|
||||||
|
(r29 29)
|
||||||
|
(r30 30)
|
||||||
|
(r31 31)
|
||||||
|
(lr 9)
|
||||||
|
(sp 1)
|
||||||
|
(fp 2))
|
||||||
|
)
|
||||||
|
|
||||||
|
(define-hardware
|
||||||
|
(name h-fsr)
|
||||||
|
(comment "floating point registers (single, virtual)")
|
||||||
|
(attrs VIRTUAL (MACH ORFPX32-MACHS))
|
||||||
|
(type register SF (32))
|
||||||
|
(indices keyword "" REG-INDICES)
|
||||||
|
(get (index) (subword SF (trunc SI (reg h-gpr index)) 0))
|
||||||
|
(set (index newval) (set UWI (reg h-gpr index) (zext UWI (subword SI newval 0))))
|
||||||
|
)
|
||||||
|
|
||||||
|
(define-hardware
|
||||||
|
(name h-fdr) (comment "floating point registers (double, virtual)")
|
||||||
|
(attrs VIRTUAL (MACH ORFPX64-MACHS))
|
||||||
|
(type register DF (32))
|
||||||
|
(indices keyword "" REG-INDICES)
|
||||||
|
(get (index) (subword DF (trunc DI (reg h-gpr index)) 0))
|
||||||
|
(set (index newval) (set UDI (reg h-gpr index) (zext UDI (subword DI newval 0))))
|
||||||
|
)
|
||||||
|
|
||||||
|
(define-hardware
|
||||||
|
(name h-spr) (comment "special purpose registers")
|
||||||
|
(attrs VIRTUAL (MACH ORBIS-MACHS))
|
||||||
|
(type register UWI (#x20000))
|
||||||
|
(get (index) (c-call UWI "@cpu@_h_spr_get_raw" index))
|
||||||
|
(set (index newval) (c-call VOID "@cpu@_h_spr_set_raw" index newval))
|
||||||
|
)
|
||||||
|
|
||||||
|
(define-pmacro spr-shift 11)
|
||||||
|
(define-pmacro (spr-address spr-group spr-index)
|
||||||
|
(or (sll UWI (enum UWI (.sym "SPR-GROUP-" spr-group)) spr-shift)
|
||||||
|
(enum UWI (.sym "SPR-INDEX-" spr-group "-" spr-index))))
|
||||||
|
|
||||||
|
(define-hardware
|
||||||
|
(name h-gpr) (comment "general registers")
|
||||||
|
(attrs (MACH ORBIS-MACHS))
|
||||||
|
(type register UWI (32))
|
||||||
|
(indices keyword "" REG-INDICES)
|
||||||
|
(get (index) (reg UWI h-spr (add index (spr-address SYS GPR0))))
|
||||||
|
(set (index newval) (set UWI (reg UWI h-spr (add index (spr-address SYS GPR0))) newval))
|
||||||
|
)
|
||||||
|
|
||||||
|
(define-normal-enum
|
||||||
|
except-number
|
||||||
|
"Exception numbers"
|
||||||
|
()
|
||||||
|
EXCEPT-
|
||||||
|
(("NONE" #x00)
|
||||||
|
("RESET" #x01)
|
||||||
|
("BUSERR" #x02)
|
||||||
|
("DPF" #x03)
|
||||||
|
("IPF" #x04)
|
||||||
|
("TICK" #x05)
|
||||||
|
("ALIGN" #x06)
|
||||||
|
("ILLEGAL" #x07)
|
||||||
|
("INT" #x08)
|
||||||
|
("DTLBMISS" #x09)
|
||||||
|
("ITLBMISS" #x0a)
|
||||||
|
("RANGE" #x0b)
|
||||||
|
("SYSCALL" #x0c)
|
||||||
|
("FPE" #x0d)
|
||||||
|
("TRAP" #x0e)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
(define-pmacro (raise-exception exnum)
|
||||||
|
(c-call VOID "@cpu@_exception" pc exnum))
|
||||||
|
|
||||||
|
(define-normal-enum
|
||||||
|
spr-groups
|
||||||
|
"special purpose register groups"
|
||||||
|
()
|
||||||
|
SPR-GROUP-
|
||||||
|
(("SYS" #x0)
|
||||||
|
("DMMU" #x1)
|
||||||
|
("IMMU" #x2)
|
||||||
|
("DCACHE" #x3)
|
||||||
|
("ICACHE" #x4)
|
||||||
|
("MAC" #x5)
|
||||||
|
("DEBUG" #x6)
|
||||||
|
("PERF" #x7)
|
||||||
|
("POWER" #x8)
|
||||||
|
("PIC" #x9)
|
||||||
|
("TICK" #xa)
|
||||||
|
("FPU" #xb)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
(define-pmacro (spr-reg-info)
|
||||||
|
(.splice
|
||||||
|
(SYS VR #x000 "version register")
|
||||||
|
(SYS UPR #x001 "unit present register")
|
||||||
|
(SYS CPUCFGR #x002 "cpu configuration register")
|
||||||
|
(SYS DMMUCFGR #x003 "Data MMU configuration register")
|
||||||
|
(SYS IMMUCFGR #x004 "Insn MMU configuration register")
|
||||||
|
(SYS DCCFGR #x005 "Data cache configuration register")
|
||||||
|
(SYS ICCFGR #x006 "Insn cache configuration register")
|
||||||
|
(SYS DCFGR #x007 "Debug configuration register")
|
||||||
|
(SYS PCCFGR #x008 "Performance counters configuration register")
|
||||||
|
(SYS NPC #x010 "Next program counter")
|
||||||
|
(SYS SR #x011 "Supervision Regsiter")
|
||||||
|
(SYS PPC #x012 "Previous program counter")
|
||||||
|
(SYS FPCSR #x014 "Floating point control status register")
|
||||||
|
(.unsplice
|
||||||
|
(.map (.pmacro (n) (.splice SYS (.sym "EPCR" n) (.add n #x20) (.str "Exception PC register " n)))
|
||||||
|
(.iota #x10)))
|
||||||
|
(.unsplice
|
||||||
|
(.map (.pmacro (n) (.splice SYS (.sym "EEAR" n) (.add n #x30) (.str "Exception effective address register " n)))
|
||||||
|
(.iota #x10)))
|
||||||
|
(.unsplice
|
||||||
|
(.map (.pmacro (n) (.splice SYS (.sym "ESR" n) (.add n #x40) (.str "Exception supervision register " n)))
|
||||||
|
(.iota #x10)))
|
||||||
|
(.unsplice
|
||||||
|
(.map (.pmacro (n) (.splice SYS (.sym "GPR" n) (.add n #x400) (.str "General purpose register " n)))
|
||||||
|
(.iota #x200)))
|
||||||
|
|
||||||
|
(MAC MACLO #x001 "Multiply and accumulate result (low)")
|
||||||
|
(MAC MACHI #x002 "Multiply and accumulate result (high)")
|
||||||
|
(TICK TTMR #x000 "Tick timer mode register")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
(define-normal-enum
|
||||||
|
spr-reg-indices
|
||||||
|
"special purpose register indicies"
|
||||||
|
()
|
||||||
|
SPR-INDEX-
|
||||||
|
(.map (.pmacro (args)
|
||||||
|
(.apply (.pmacro (group index n comment)
|
||||||
|
((.sym group "-" index) n))
|
||||||
|
args)
|
||||||
|
)
|
||||||
|
(spr-reg-info)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
(define-pmacro (define-h-spr-reg spr-group spr-index n spr-comment)
|
||||||
|
(define-hardware
|
||||||
|
(name (.sym "h-" (.downcase spr-group) "-" (.downcase spr-index)))
|
||||||
|
(comment spr-comment)
|
||||||
|
(attrs VIRTUAL (MACH ORBIS-MACHS))
|
||||||
|
(type register UWI)
|
||||||
|
(get () (reg UWI h-spr (spr-address spr-group spr-index)))
|
||||||
|
(set (newval) (set (reg UWI h-spr (spr-address spr-group spr-index)) newval))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(.splice begin (.unsplice (.map (.pmacro (args) (.apply define-h-spr-reg args)) (spr-reg-info))))
|
||||||
|
|
||||||
|
(define-pmacro (spr-field-info)
|
||||||
|
((SYS VR REV 5 0 "revision field")
|
||||||
|
(SYS VR CFG 23 16 "configuration template field")
|
||||||
|
(SYS VR VER 31 24 "version field")
|
||||||
|
(SYS UPR UP 0 0 "UPR present bit")
|
||||||
|
(SYS UPR DCP 1 1 "data cache present bit")
|
||||||
|
(SYS UPR ICP 2 2 "insn cache present bit")
|
||||||
|
(SYS UPR DMP 3 3 "data MMU present bit")
|
||||||
|
(SYS UPR MP 4 4 "MAC unit present bit")
|
||||||
|
(SYS UPR IMP 5 5 "insn MMU present bit")
|
||||||
|
(SYS UPR DUP 6 6 "debug unit present bit")
|
||||||
|
(SYS UPR PCUP 7 7 "performance counters unit present bit")
|
||||||
|
(SYS UPR PICP 8 8 "programmable interrupt controller present bit")
|
||||||
|
(SYS UPR PMP 9 9 "power management present bit")
|
||||||
|
(SYS UPR TTP 10 10 "tick timer present bit")
|
||||||
|
(SYS UPR CUP 31 24 "custom units present field")
|
||||||
|
(SYS CPUCFGR NSGR 3 0 "number of shadow GPR files field")
|
||||||
|
(SYS CPUCFGR CGF 4 4 "custom GPR file bit")
|
||||||
|
(SYS CPUCFGR OB32S 5 5 "ORBIS32 supported bit")
|
||||||
|
(SYS CPUCFGR OB64S 6 6 "ORBIS64 supported bit")
|
||||||
|
(SYS CPUCFGR OF32S 7 7 "ORFPX32 supported bit")
|
||||||
|
(SYS CPUCFGR OF64S 8 8 "ORFPX64 supported bit")
|
||||||
|
(SYS CPUCFGR OV64S 9 9 "ORVDX64 supported bit")
|
||||||
|
(SYS CPUCFGR ND 10 10 "no transfer delay bit")
|
||||||
|
(SYS SR SM 0 0 "supervisor mode bit")
|
||||||
|
(SYS SR TEE 1 1 "tick timer exception enabled bit")
|
||||||
|
(SYS SR IEE 2 2 "interrupt exception enabled bit")
|
||||||
|
(SYS SR DCE 3 3 "data cache enabled bit")
|
||||||
|
(SYS SR ICE 4 4 "insn cache enabled bit")
|
||||||
|
(SYS SR DME 5 5 "data MMU enabled bit")
|
||||||
|
(SYS SR IME 6 6 "insn MMU enabled bit")
|
||||||
|
(SYS SR LEE 7 7 "little endian enabled bit")
|
||||||
|
(SYS SR CE 8 8 "CID enable bit")
|
||||||
|
(SYS SR F 9 9 "flag bit")
|
||||||
|
(SYS SR CY 10 10 "carry bit")
|
||||||
|
(SYS SR OV 11 11 "overflow bit")
|
||||||
|
(SYS SR OVE 12 12 "overflow exception enabled bit")
|
||||||
|
(SYS SR DSX 13 13 "delay slot exception bit")
|
||||||
|
(SYS SR EPH 14 14 "exception prefix high bit")
|
||||||
|
(SYS SR FO 15 15 "fixed one bit")
|
||||||
|
(SYS SR SUMRA 16 16 "SPRs user mode read access bit")
|
||||||
|
(SYS SR CID 31 28 "context ID field")
|
||||||
|
(SYS FPCSR FPEE 0 0 "floating point exceptions enabled bit")
|
||||||
|
(SYS FPCSR RM 2 1 "floating point rounding mode field")
|
||||||
|
(SYS FPCSR OVF 3 3 "floating point overflow flag bit")
|
||||||
|
(SYS FPCSR UNF 4 4 "floating point underflow bit")
|
||||||
|
(SYS FPCSR SNF 5 5 "floating point SNAN flag bit")
|
||||||
|
(SYS FPCSR QNF 6 6 "floating point QNAN flag bit")
|
||||||
|
(SYS FPCSR ZF 7 7 "floating point zero flag bit")
|
||||||
|
(SYS FPCSR IXF 8 8 "floating point inexact flag bit")
|
||||||
|
(SYS FPCSR IVF 9 9 "floating point invalid flag bit")
|
||||||
|
(SYS FPCSR INF 10 10 "floating point infinity flag bit")
|
||||||
|
(SYS FPCSR DZF 11 11 "floating point divide by zero flag bit")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
(define-normal-enum
|
||||||
|
spr-field-msbs
|
||||||
|
"SPR field msb positions"
|
||||||
|
()
|
||||||
|
SPR-FIELD-MSB-
|
||||||
|
(.map (.pmacro (args)
|
||||||
|
(.apply (.pmacro (group index field msb lsb comment)
|
||||||
|
((.sym group "-" index "-" field) msb)
|
||||||
|
)
|
||||||
|
args
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(spr-field-info)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
(define-normal-enum
|
||||||
|
spr-field-lsbs
|
||||||
|
"SPR field lsb positions"
|
||||||
|
()
|
||||||
|
SPR-FIELD-SIZE-
|
||||||
|
(.map (.pmacro (args)
|
||||||
|
(.apply (.pmacro (group index field msb lsb comment)
|
||||||
|
((.sym group "-" index "-" field) lsb)
|
||||||
|
)
|
||||||
|
args
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(spr-field-info)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
(define-normal-enum
|
||||||
|
spr-field-masks
|
||||||
|
"SPR field masks"
|
||||||
|
()
|
||||||
|
SPR-FIELD-MASK-
|
||||||
|
(.map (.pmacro (args)
|
||||||
|
(.apply (.pmacro (group index field msb lsb comment)
|
||||||
|
(.splice (.str group "-" index "-" field) (.sll (.inv (.sll (.inv 0) (.add (.sub msb lsb) 1))) lsb))
|
||||||
|
)
|
||||||
|
args
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(spr-field-info)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
(define-pmacro (define-h-spr-field spr-group spr-index spr-field spr-field-msb spr-field-lsb spr-field-comment)
|
||||||
|
(.let ((spr-field-name (.sym "h-" (.downcase spr-group) "-" (.downcase spr-index) "-" (.downcase spr-field)))
|
||||||
|
)
|
||||||
|
(begin
|
||||||
|
(define-hardware
|
||||||
|
(name spr-field-name)
|
||||||
|
(comment spr-field-comment)
|
||||||
|
(attrs VIRTUAL (MACH ORBIS-MACHS))
|
||||||
|
(type register UWI)
|
||||||
|
(get () (c-call UWI "@cpu@_h_spr_field_get_raw" (spr-address spr-group spr-index) spr-field-msb spr-field-lsb))
|
||||||
|
(set (value) (c-call VOID "@cpu@_h_spr_field_set_raw" (spr-address spr-group spr-index) spr-field-msb spr-field-lsb value))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(.splice begin (.unsplice (.map (.pmacro (args) (.apply define-h-spr-field args)) (spr-field-info))))
|
||||||
|
|
||||||
|
(define-attr
|
||||||
|
(type boolean)
|
||||||
|
(for insn)
|
||||||
|
(name DELAYED-CTI)
|
||||||
|
(comment "delayed control transfer instruction")
|
||||||
|
(values #f #t)
|
||||||
|
(default #f)
|
||||||
|
)
|
||||||
|
|
||||||
|
(define-attr
|
||||||
|
(for insn)
|
||||||
|
(type boolean)
|
||||||
|
(name NOT-IN-DELAY-SLOT)
|
||||||
|
(comment "instruction cannot be in delay slot")
|
||||||
|
(values #f #t)
|
||||||
|
(default #f)
|
||||||
|
)
|
||||||
|
|
||||||
|
(define-attr
|
||||||
|
(for insn)
|
||||||
|
(type boolean)
|
||||||
|
(name FORCED-CTI)
|
||||||
|
(comment "instruction may forcefully transfer control (e.g., rfe)")
|
||||||
|
)
|
1080
cpu/or1korbis.cpu
Normal file
1080
cpu/or1korbis.cpu
Normal file
File diff suppressed because it is too large
Load Diff
222
cpu/or1korfpx.cpu
Normal file
222
cpu/or1korfpx.cpu
Normal file
@ -0,0 +1,222 @@
|
|||||||
|
; OpenRISC 1000 architecture. -*- Scheme -*-
|
||||||
|
; Copyright 2000-2014 Free Software Foundation, Inc.
|
||||||
|
; Contributed by Peter Gavin, pgavin@gmail.com
|
||||||
|
;
|
||||||
|
; This program is free software; you can redistribute it and/or modify
|
||||||
|
; it under the terms of the GNU General Public License as published by
|
||||||
|
; the Free Software Foundation; either version 3 of the License, or
|
||||||
|
; (at your option) any later version.
|
||||||
|
;
|
||||||
|
; This program is distributed in the hope that it will be useful,
|
||||||
|
; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
; GNU General Public License for more details.
|
||||||
|
;
|
||||||
|
; You should have received a copy of the GNU General Public License
|
||||||
|
; along with this program; if not, see <http://www.gnu.org/licenses/>
|
||||||
|
|
||||||
|
; Initial ORFPX32 instruction set
|
||||||
|
|
||||||
|
; I'm not sure how CGEN handles rounding in FP operations, except for
|
||||||
|
; in conversions to/from integers. So lf.add, lf.sub, lf.mul, and
|
||||||
|
; lf.div do not round according to the FPCSR RM field.
|
||||||
|
; NaN, overflow, and underflow are not yet handled either.
|
||||||
|
|
||||||
|
(define-normal-insn-enum insn-opcode-float-regreg
|
||||||
|
"floating point reg/reg insn opcode enums" ()
|
||||||
|
OPC_FLOAT_REGREG_ f-op-7-8
|
||||||
|
(("ADD_S" #x00)
|
||||||
|
("SUB_S" #x01)
|
||||||
|
("MUL_S" #x02)
|
||||||
|
("DIV_S" #x03)
|
||||||
|
("ITOF_S" #x04)
|
||||||
|
("FTOI_S" #x05)
|
||||||
|
("REM_S" #x06)
|
||||||
|
("MADD_S" #x07)
|
||||||
|
("SFEQ_S" #x08)
|
||||||
|
("SFNE_S" #x09)
|
||||||
|
("SFGT_S" #x0a)
|
||||||
|
("SFGE_S" #x0b)
|
||||||
|
("SFLT_S" #x0c)
|
||||||
|
("SFLE_S" #x0d)
|
||||||
|
("ADD_D" #x10)
|
||||||
|
("SUB_D" #x11)
|
||||||
|
("MUL_D" #x12)
|
||||||
|
("DIV_D" #x13)
|
||||||
|
("ITOF_D" #x14)
|
||||||
|
("FTOI_D" #x15)
|
||||||
|
("REM_D" #x16)
|
||||||
|
("MADD_D" #x17)
|
||||||
|
("SFEQ_D" #x18)
|
||||||
|
("SFNE_D" #x19)
|
||||||
|
("SFGT_D" #x1a)
|
||||||
|
("SFGE_D" #x1b)
|
||||||
|
("SFLT_D" #x1c)
|
||||||
|
("SFLE_D" #x1d)
|
||||||
|
("CUST1_S" #xd0)
|
||||||
|
("CUST1_D" #xe0)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
(dnop rDSF "destination register (single floating point mode)" () h-fsr f-r1)
|
||||||
|
(dnop rASF "source register A (single floating point mode)" () h-fsr f-r2)
|
||||||
|
(dnop rBSF "source register B (single floating point mode)" () h-fsr f-r3)
|
||||||
|
|
||||||
|
(dnop rDDF "destination register (double floating point mode)" ((MACH ORFPX64-MACHS)) h-fdr f-r1)
|
||||||
|
(dnop rADF "source register A (double floating point mode)" ((MACH ORFPX64-MACHS)) h-fdr f-r1)
|
||||||
|
(dnop rBDF "source register B (double floating point mode)" ((MACH ORFPX64-MACHS)) h-fdr f-r1)
|
||||||
|
|
||||||
|
(define-pmacro (float-regreg-insn mnemonic)
|
||||||
|
(begin
|
||||||
|
(dni (.sym lf- mnemonic -s)
|
||||||
|
(.str "lf." mnemonic ".s reg/reg/reg")
|
||||||
|
((MACH ORFPX-MACHS))
|
||||||
|
(.str "lf." mnemonic ".s $rDSF,$rASF,$rBSF")
|
||||||
|
(+ OPC_FLOAT rDSF rASF rBSF (f-resv-10-3 0) (.sym OPC_FLOAT_REGREG_ (.upcase mnemonic) _S))
|
||||||
|
(set SF rDSF (mnemonic SF rASF rBSF))
|
||||||
|
()
|
||||||
|
)
|
||||||
|
(dni (.sym lf- mnemonic -d)
|
||||||
|
(.str "lf." mnemonic ".d reg/reg/reg")
|
||||||
|
((MACH ORFPX64-MACHS))
|
||||||
|
(.str "lf." mnemonic ".d $rDDF,$rADF,$rBDF")
|
||||||
|
(+ OPC_FLOAT rDDF rADF rBDF (f-resv-10-3 0) (.sym OPC_FLOAT_REGREG_ (.upcase mnemonic) _D))
|
||||||
|
(set DF rDDF (mnemonic DF rADF rBDF))
|
||||||
|
()
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
(float-regreg-insn add)
|
||||||
|
(float-regreg-insn sub)
|
||||||
|
(float-regreg-insn mul)
|
||||||
|
(float-regreg-insn div)
|
||||||
|
|
||||||
|
(dni lf-rem-s
|
||||||
|
"lf.rem.s reg/reg/reg"
|
||||||
|
((MACH ORFPX-MACHS))
|
||||||
|
"lf.rem.s $rDSF,$rASF,$rBSF"
|
||||||
|
(+ OPC_FLOAT rDSF rASF rBSF (f-resv-10-3 0) OPC_FLOAT_REGREG_REM_S)
|
||||||
|
(set SF rDSF (rem SF rASF rBSF))
|
||||||
|
()
|
||||||
|
)
|
||||||
|
(dni lf-rem-d
|
||||||
|
"lf.rem.d reg/reg/reg"
|
||||||
|
((MACH ORFPX64-MACHS))
|
||||||
|
"lf.rem.d $rDDF,$rADF,$rBDF"
|
||||||
|
(+ OPC_FLOAT rDDF rADF rBDF (f-resv-10-3 0) OPC_FLOAT_REGREG_REM_D)
|
||||||
|
(set DF rDDF (mod DF rADF rBDF))
|
||||||
|
()
|
||||||
|
)
|
||||||
|
|
||||||
|
(define-pmacro (get-rounding-mode)
|
||||||
|
(case INT sys-fpcsr-rm
|
||||||
|
((0) 1) ; TIES-TO-EVEN -- I'm assuming this is what is meant by "round to nearest"
|
||||||
|
((1) 3) ; TOWARD-ZERO
|
||||||
|
((2) 4) ; TOWARD-POSITIVE
|
||||||
|
(else 5) ; TOWARD-NEGATIVE
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
(dni lf-itof-s
|
||||||
|
"lf.itof.s reg/reg"
|
||||||
|
((MACH ORFPX-MACHS))
|
||||||
|
"lf.itof.s $rDSF,$rA"
|
||||||
|
(+ OPC_FLOAT rDSF rA (f-r3 0) (f-resv-10-3 0) OPC_FLOAT_REGREG_ITOF_S)
|
||||||
|
(set SF rDSF (float SF (get-rounding-mode) (trunc SI rA)))
|
||||||
|
()
|
||||||
|
)
|
||||||
|
(dni lf-itof-d
|
||||||
|
"lf.itof.d reg/reg"
|
||||||
|
((MACH ORFPX64-MACHS))
|
||||||
|
"lf.itof.d $rDSF,$rA"
|
||||||
|
(+ OPC_FLOAT rDSF rA (f-r3 0) (f-resv-10-3 0) OPC_FLOAT_REGREG_ITOF_D)
|
||||||
|
(set DF rDDF (float DF (get-rounding-mode) rA))
|
||||||
|
()
|
||||||
|
)
|
||||||
|
|
||||||
|
(dni lf-ftoi-s
|
||||||
|
"lf.ftoi.s reg/reg"
|
||||||
|
((MACH ORFPX-MACHS))
|
||||||
|
"lf.ftoi.s $rD,$rASF"
|
||||||
|
(+ OPC_FLOAT rD rASF (f-r3 0) (f-resv-10-3 0) OPC_FLOAT_REGREG_FTOI_S)
|
||||||
|
(set WI rD (ext WI (fix SI (get-rounding-mode) rASF)))
|
||||||
|
()
|
||||||
|
)
|
||||||
|
|
||||||
|
(dni lf-ftoi-d
|
||||||
|
"lf.ftoi.d reg/reg"
|
||||||
|
((MACH ORFPX64-MACHS))
|
||||||
|
"lf.ftoi.d $rD,$rADF"
|
||||||
|
(+ OPC_FLOAT rD rADF (f-r3 0) (f-resv-10-3 0) OPC_FLOAT_REGREG_FTOI_D)
|
||||||
|
(set DI rD (fix DI (get-rounding-mode) rADF))
|
||||||
|
()
|
||||||
|
)
|
||||||
|
|
||||||
|
(define-pmacro (float-setflag-insn mnemonic)
|
||||||
|
(begin
|
||||||
|
(dni (.sym lf- mnemonic -s)
|
||||||
|
(.str "lf.sf" mnemonic ".s reg/reg")
|
||||||
|
((MACH ORFPX-MACHS))
|
||||||
|
(.str "lf.sf" mnemonic ".s $rASF,$rBSF")
|
||||||
|
(+ OPC_FLOAT (f-r1 0) rASF rBSF (f-resv-10-3 0) (.sym OPC_FLOAT_REGREG_SF (.upcase mnemonic) _S))
|
||||||
|
(set BI sys-sr-f (mnemonic SF rASF rBSF))
|
||||||
|
()
|
||||||
|
)
|
||||||
|
(dni (.sym lf- mnemonic -d)
|
||||||
|
(.str "lf.sf" mnemonic ".d reg/reg")
|
||||||
|
((MACH ORFPX64-MACHS))
|
||||||
|
(.str "lf.sf" mnemonic ".d $rASF,$rBSF")
|
||||||
|
(+ OPC_FLOAT (f-r1 0) rASF rBSF (f-resv-10-3 0) (.sym OPC_FLOAT_REGREG_SF (.upcase mnemonic) _D))
|
||||||
|
(set BI sys-sr-f (mnemonic DF rADF rBDF))
|
||||||
|
()
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
(float-setflag-insn eq)
|
||||||
|
(float-setflag-insn ne)
|
||||||
|
(float-setflag-insn ge)
|
||||||
|
(float-setflag-insn gt)
|
||||||
|
(float-setflag-insn lt)
|
||||||
|
(float-setflag-insn le)
|
||||||
|
|
||||||
|
(dni lf-madd-s
|
||||||
|
"lf.madd.s reg/reg/reg"
|
||||||
|
((MACH ORFPX-MACHS))
|
||||||
|
"lf.madd.s $rDSF,$rASF,$rBSF"
|
||||||
|
(+ OPC_FLOAT rDSF rASF rBSF (f-resv-10-3 0) OPC_FLOAT_REGREG_MADD_S)
|
||||||
|
(set SF rDSF (add SF (mul SF rASF rBSF) rDSF))
|
||||||
|
()
|
||||||
|
)
|
||||||
|
(dni lf-madd-d
|
||||||
|
"lf.madd.d reg/reg/reg"
|
||||||
|
((MACH ORFPX64-MACHS))
|
||||||
|
"lf.madd.d $rDDF,$rADF,$rBDF"
|
||||||
|
(+ OPC_FLOAT rDDF rADF rBDF (f-resv-10-3 0) OPC_FLOAT_REGREG_MADD_D)
|
||||||
|
(set DF rDDF (add DF (mul DF rADF rBDF) rDDF))
|
||||||
|
()
|
||||||
|
)
|
||||||
|
|
||||||
|
(define-pmacro (float-cust-insn cust-num)
|
||||||
|
(begin
|
||||||
|
(dni (.sym "lf-cust" cust-num "-s")
|
||||||
|
(.str "lf.cust" cust-num ".s")
|
||||||
|
((MACH ORFPX-MACHS))
|
||||||
|
(.str "lf.cust" cust-num ".s $rASF,$rBSF")
|
||||||
|
(+ OPC_FLOAT (f-resv-25-5 0) rASF rBSF (f-resv-10-3 0) (.sym "OPC_FLOAT_REGREG_CUST" cust-num "_S"))
|
||||||
|
(nop)
|
||||||
|
()
|
||||||
|
)
|
||||||
|
(dni (.sym "lf-cust" cust-num "-d")
|
||||||
|
(.str "lf.cust" cust-num ".d")
|
||||||
|
((MACH ORFPX64-MACHS))
|
||||||
|
(.str "lf.cust" cust-num ".d")
|
||||||
|
(+ OPC_FLOAT (f-resv-25-5 0) rADF rBDF (f-resv-10-3 0) (.sym "OPC_FLOAT_REGREG_CUST" cust-num "_D"))
|
||||||
|
(nop)
|
||||||
|
()
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
(float-cust-insn "1")
|
@ -1,3 +1,7 @@
|
|||||||
|
2014-04-22 Christian Svensson <blue@cmd.nu>
|
||||||
|
|
||||||
|
* elfcpp.h: Remove openrisc and or32 support.
|
||||||
|
|
||||||
2014-04-15 Sasa Stankovic <Sasa.Stankovic@imgtec.com>
|
2014-04-15 Sasa Stankovic <Sasa.Stankovic@imgtec.com>
|
||||||
|
|
||||||
* mips.h (R _MIPS16_TLS_GD, R_MIPS16_TLS_LDM, R_MIPS16_TLS_DTPREL_HI16,
|
* mips.h (R _MIPS16_TLS_GD, R_MIPS16_TLS_LDM, R_MIPS16_TLS_DTPREL_HI16,
|
||||||
|
@ -246,7 +246,7 @@ enum EM
|
|||||||
EM_MN10300 = 89,
|
EM_MN10300 = 89,
|
||||||
EM_MN10200 = 90,
|
EM_MN10200 = 90,
|
||||||
EM_PJ = 91,
|
EM_PJ = 91,
|
||||||
EM_OPENRISC = 92,
|
EM_OR1K = 92,
|
||||||
EM_ARC_A5 = 93,
|
EM_ARC_A5 = 93,
|
||||||
EM_XTENSA = 94,
|
EM_XTENSA = 94,
|
||||||
EM_VIDEOCORE = 95,
|
EM_VIDEOCORE = 95,
|
||||||
@ -288,7 +288,7 @@ enum EM
|
|||||||
// Old AVR objects used 0x1057 (EM_AVR is correct).
|
// Old AVR objects used 0x1057 (EM_AVR is correct).
|
||||||
// Old MSP430 objects used 0x1059 (EM_MSP430 is correct).
|
// Old MSP430 objects used 0x1059 (EM_MSP430 is correct).
|
||||||
// Old FR30 objects used 0x3330 (EM_FR30 is correct).
|
// Old FR30 objects used 0x3330 (EM_FR30 is correct).
|
||||||
// Old OpenRISC objects used 0x3426 and 0x8472 (EM_OPENRISC is correct).
|
// Old OpenRISC objects used 0x3426 and 0x8472 (EM_OR1K is correct).
|
||||||
// Old D10V objects used 0x7650 (EM_D10V is correct).
|
// Old D10V objects used 0x7650 (EM_D10V is correct).
|
||||||
// Old D30V objects used 0x7676 (EM_D30V is correct).
|
// Old D30V objects used 0x7676 (EM_D30V is correct).
|
||||||
// Old IP2X objects used 0x8217 (EM_IP2K is correct).
|
// Old IP2X objects used 0x8217 (EM_IP2K is correct).
|
||||||
|
@ -1,3 +1,19 @@
|
|||||||
|
2014-04-22 Christian Svensson <blue@cmd.nu>
|
||||||
|
|
||||||
|
* Makefile.am: Remove openrisc and or32 support. Add support for or1k.
|
||||||
|
* configure.in: Likewise.
|
||||||
|
* configure.tgt: Likewise.
|
||||||
|
* doc/as.texinfo: Likewise.
|
||||||
|
* config/obj-coff.h: Likewise.
|
||||||
|
* config/tc-or1k.c: New file.
|
||||||
|
* config/tc-or1k.h: New file.
|
||||||
|
* config/tc-openrisc.c: Delete.
|
||||||
|
* config/tc-openrisc.h: Delete.
|
||||||
|
* config/tc-or32.c: Delete.
|
||||||
|
* config/tc-or32.h: Delete.
|
||||||
|
* Makefile.in: Regenerate.
|
||||||
|
* configure: Regenerate.
|
||||||
|
|
||||||
2014-04-16 Alan Modra <amodra@gmail.com>
|
2014-04-16 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
* config/tc-tilegx.h (TC_CONS_FIX_NEW): Add RELOC arg.
|
* config/tc-tilegx.h (TC_CONS_FIX_NEW): Add RELOC arg.
|
||||||
|
@ -167,8 +167,7 @@ TARGET_CPU_CFILES = \
|
|||||||
config/tc-nds32.c \
|
config/tc-nds32.c \
|
||||||
config/tc-nios2.c \
|
config/tc-nios2.c \
|
||||||
config/tc-ns32k.c \
|
config/tc-ns32k.c \
|
||||||
config/tc-openrisc.c \
|
config/tc-or1k.c \
|
||||||
config/tc-or32.c \
|
|
||||||
config/tc-pdp11.c \
|
config/tc-pdp11.c \
|
||||||
config/tc-pj.c \
|
config/tc-pj.c \
|
||||||
config/tc-ppc.c \
|
config/tc-ppc.c \
|
||||||
@ -239,8 +238,7 @@ TARGET_CPU_HFILES = \
|
|||||||
config/tc-nds32.h \
|
config/tc-nds32.h \
|
||||||
config/tc-nios2.h \
|
config/tc-nios2.h \
|
||||||
config/tc-ns32k.h \
|
config/tc-ns32k.h \
|
||||||
config/tc-openrisc.h \
|
config/tc-or1k.h \
|
||||||
config/tc-or32.h \
|
|
||||||
config/tc-pdp11.h \
|
config/tc-pdp11.h \
|
||||||
config/tc-pj.h \
|
config/tc-pj.h \
|
||||||
config/tc-ppc.h \
|
config/tc-ppc.h \
|
||||||
|
@ -436,8 +436,7 @@ TARGET_CPU_CFILES = \
|
|||||||
config/tc-nds32.c \
|
config/tc-nds32.c \
|
||||||
config/tc-nios2.c \
|
config/tc-nios2.c \
|
||||||
config/tc-ns32k.c \
|
config/tc-ns32k.c \
|
||||||
config/tc-openrisc.c \
|
config/tc-or1k.c \
|
||||||
config/tc-or32.c \
|
|
||||||
config/tc-pdp11.c \
|
config/tc-pdp11.c \
|
||||||
config/tc-pj.c \
|
config/tc-pj.c \
|
||||||
config/tc-ppc.c \
|
config/tc-ppc.c \
|
||||||
@ -508,8 +507,7 @@ TARGET_CPU_HFILES = \
|
|||||||
config/tc-nds32.h \
|
config/tc-nds32.h \
|
||||||
config/tc-nios2.h \
|
config/tc-nios2.h \
|
||||||
config/tc-ns32k.h \
|
config/tc-ns32k.h \
|
||||||
config/tc-openrisc.h \
|
config/tc-or1k.h \
|
||||||
config/tc-or32.h \
|
|
||||||
config/tc-pdp11.h \
|
config/tc-pdp11.h \
|
||||||
config/tc-pj.h \
|
config/tc-pj.h \
|
||||||
config/tc-ppc.h \
|
config/tc-ppc.h \
|
||||||
@ -859,8 +857,7 @@ distclean-compile:
|
|||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-nds32.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-nds32.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-nios2.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-nios2.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-ns32k.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-ns32k.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-openrisc.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-or1k.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-or32.Po@am__quote@
|
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-pdp11.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-pdp11.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-pj.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-pj.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-ppc.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-ppc.Po@am__quote@
|
||||||
@ -1513,33 +1510,19 @@ tc-ns32k.obj: config/tc-ns32k.c
|
|||||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||||
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-ns32k.obj `if test -f 'config/tc-ns32k.c'; then $(CYGPATH_W) 'config/tc-ns32k.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-ns32k.c'; fi`
|
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-ns32k.obj `if test -f 'config/tc-ns32k.c'; then $(CYGPATH_W) 'config/tc-ns32k.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-ns32k.c'; fi`
|
||||||
|
|
||||||
tc-openrisc.o: config/tc-openrisc.c
|
tc-or1k.o: config/tc-or1k.c
|
||||||
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-openrisc.o -MD -MP -MF $(DEPDIR)/tc-openrisc.Tpo -c -o tc-openrisc.o `test -f 'config/tc-openrisc.c' || echo '$(srcdir)/'`config/tc-openrisc.c
|
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-or1k.o -MD -MP -MF $(DEPDIR)/tc-or1k.Tpo -c -o tc-or1k.o `test -f 'config/tc-or1k.c' || echo '$(srcdir)/'`config/tc-or1k.c
|
||||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-openrisc.Tpo $(DEPDIR)/tc-openrisc.Po
|
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-or1k.Tpo $(DEPDIR)/tc-or1k.Po
|
||||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-openrisc.c' object='tc-openrisc.o' libtool=no @AMDEPBACKSLASH@
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-or1k.c' object='tc-or1k.o' libtool=no @AMDEPBACKSLASH@
|
||||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||||
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-openrisc.o `test -f 'config/tc-openrisc.c' || echo '$(srcdir)/'`config/tc-openrisc.c
|
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-or1k.o `test -f 'config/tc-or1k.c' || echo '$(srcdir)/'`config/tc-or1k.c
|
||||||
|
|
||||||
tc-openrisc.obj: config/tc-openrisc.c
|
tc-or1k.obj: config/tc-or1k.c
|
||||||
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-openrisc.obj -MD -MP -MF $(DEPDIR)/tc-openrisc.Tpo -c -o tc-openrisc.obj `if test -f 'config/tc-openrisc.c'; then $(CYGPATH_W) 'config/tc-openrisc.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-openrisc.c'; fi`
|
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-or1k.obj -MD -MP -MF $(DEPDIR)/tc-or1k.Tpo -c -o tc-or1k.obj `if test -f 'config/tc-or1k.c'; then $(CYGPATH_W) 'config/tc-or1k.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-or1k.c'; fi`
|
||||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-openrisc.Tpo $(DEPDIR)/tc-openrisc.Po
|
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-or1k.Tpo $(DEPDIR)/tc-or1k.Po
|
||||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-openrisc.c' object='tc-openrisc.obj' libtool=no @AMDEPBACKSLASH@
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-or1k.c' object='tc-or1k.obj' libtool=no @AMDEPBACKSLASH@
|
||||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||||
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-openrisc.obj `if test -f 'config/tc-openrisc.c'; then $(CYGPATH_W) 'config/tc-openrisc.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-openrisc.c'; fi`
|
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-or1k.obj `if test -f 'config/tc-or1k.c'; then $(CYGPATH_W) 'config/tc-or1k.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-or1k.c'; fi`
|
||||||
|
|
||||||
tc-or32.o: config/tc-or32.c
|
|
||||||
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-or32.o -MD -MP -MF $(DEPDIR)/tc-or32.Tpo -c -o tc-or32.o `test -f 'config/tc-or32.c' || echo '$(srcdir)/'`config/tc-or32.c
|
|
||||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-or32.Tpo $(DEPDIR)/tc-or32.Po
|
|
||||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-or32.c' object='tc-or32.o' libtool=no @AMDEPBACKSLASH@
|
|
||||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
||||||
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-or32.o `test -f 'config/tc-or32.c' || echo '$(srcdir)/'`config/tc-or32.c
|
|
||||||
|
|
||||||
tc-or32.obj: config/tc-or32.c
|
|
||||||
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-or32.obj -MD -MP -MF $(DEPDIR)/tc-or32.Tpo -c -o tc-or32.obj `if test -f 'config/tc-or32.c'; then $(CYGPATH_W) 'config/tc-or32.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-or32.c'; fi`
|
|
||||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-or32.Tpo $(DEPDIR)/tc-or32.Po
|
|
||||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-or32.c' object='tc-or32.obj' libtool=no @AMDEPBACKSLASH@
|
|
||||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
||||||
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-or32.obj `if test -f 'config/tc-or32.c'; then $(CYGPATH_W) 'config/tc-or32.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-or32.c'; fi`
|
|
||||||
|
|
||||||
tc-pdp11.o: config/tc-pdp11.c
|
tc-pdp11.o: config/tc-pdp11.c
|
||||||
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-pdp11.o -MD -MP -MF $(DEPDIR)/tc-pdp11.Tpo -c -o tc-pdp11.o `test -f 'config/tc-pdp11.c' || echo '$(srcdir)/'`config/tc-pdp11.c
|
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-pdp11.o -MD -MP -MF $(DEPDIR)/tc-pdp11.Tpo -c -o tc-pdp11.o `test -f 'config/tc-pdp11.c' || echo '$(srcdir)/'`config/tc-pdp11.c
|
||||||
|
2
gas/NEWS
2
gas/NEWS
@ -1,5 +1,7 @@
|
|||||||
-*- text -*-
|
-*- text -*-
|
||||||
|
|
||||||
|
* Replace support for openrisc and or32 with support for or1k.
|
||||||
|
|
||||||
* Enhanced the ARM port to accept the assembler output from the CodeComposer
|
* Enhanced the ARM port to accept the assembler output from the CodeComposer
|
||||||
Studio tool. Support is enabled via the new command line option -mccs.
|
Studio tool. Support is enabled via the new command line option -mccs.
|
||||||
|
|
||||||
|
@ -75,11 +75,6 @@
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef TC_OR32
|
|
||||||
#include "coff/or32.h"
|
|
||||||
#define TARGET_FORMAT "coff-or32-big"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef TC_I960
|
#ifdef TC_I960
|
||||||
#include "coff/i960.h"
|
#include "coff/i960.h"
|
||||||
#define TARGET_FORMAT "coff-Intel-little"
|
#define TARGET_FORMAT "coff-Intel-little"
|
||||||
|
@ -1,61 +0,0 @@
|
|||||||
/* tc-openrisc.h -- Header file for tc-openrisc.c.
|
|
||||||
Copyright (C) 2001-2014 Free Software Foundation, Inc.
|
|
||||||
|
|
||||||
This file is part of GAS, the GNU Assembler.
|
|
||||||
|
|
||||||
GAS is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 3, or (at your option)
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
GAS is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with GAS; see the file COPYING. If not, write to
|
|
||||||
the Free Software Foundation, 51 Franklin Street - Fifth Floor,
|
|
||||||
Boston, MA 02110-1301, USA. */
|
|
||||||
|
|
||||||
#define TC_OPENRISC
|
|
||||||
|
|
||||||
#define LISTING_HEADER "OpenRISC GAS "
|
|
||||||
|
|
||||||
/* The target BFD architecture. */
|
|
||||||
#define TARGET_ARCH bfd_arch_openrisc
|
|
||||||
|
|
||||||
extern unsigned long openrisc_machine;
|
|
||||||
#define TARGET_MACH (openrisc_machine)
|
|
||||||
|
|
||||||
#define TARGET_FORMAT "elf32-openrisc"
|
|
||||||
#define TARGET_BYTES_BIG_ENDIAN 1
|
|
||||||
|
|
||||||
extern const char openrisc_comment_chars [];
|
|
||||||
#define tc_comment_chars openrisc_comment_chars
|
|
||||||
|
|
||||||
/* Permit temporary numeric labels. */
|
|
||||||
#define LOCAL_LABELS_FB 1
|
|
||||||
|
|
||||||
#define DIFF_EXPR_OK 1 /* .-foo gets turned into PC relative relocs */
|
|
||||||
|
|
||||||
/* We don't need to handle .word strangely. */
|
|
||||||
#define WORKING_DOT_WORD
|
|
||||||
|
|
||||||
/* Values passed to md_apply_fix don't include the symbol value. */
|
|
||||||
#define MD_APPLY_SYM_VALUE(FIX) 0
|
|
||||||
|
|
||||||
#define md_apply_fix gas_cgen_md_apply_fix
|
|
||||||
|
|
||||||
extern bfd_boolean openrisc_fix_adjustable (struct fix *);
|
|
||||||
#define tc_fix_adjustable(FIX) openrisc_fix_adjustable (FIX)
|
|
||||||
|
|
||||||
#define tc_gen_reloc gas_cgen_tc_gen_reloc
|
|
||||||
|
|
||||||
/* Call md_pcrel_from_section(), not md_pcrel_from(). */
|
|
||||||
extern long md_pcrel_from_section (struct fix *, segT);
|
|
||||||
#define MD_PCREL_FROM_SECTION(FIX, SEC) md_pcrel_from_section (FIX, SEC)
|
|
||||||
|
|
||||||
/* For 8 vs 16 vs 32 bit branch selection. */
|
|
||||||
extern const struct relax_type md_relax_table[];
|
|
||||||
#define TC_GENERIC_RELAX_TABLE md_relax_table
|
|
@ -1,6 +1,6 @@
|
|||||||
/* tc-openrisc.c -- Assembler for the OpenRISC family.
|
/* tc-or1k.c -- Assembler for the OpenRISC family.
|
||||||
Copyright (C) 2001-2014 Free Software Foundation, Inc.
|
Copyright 2001-2014 Free Software Foundation.
|
||||||
Contributed by Johan Rydberg, jrydberg@opencores.org
|
Contributed for OR32 by Johan Rydberg, jrydberg@opencores.org
|
||||||
|
|
||||||
This file is part of GAS, the GNU Assembler.
|
This file is part of GAS, the GNU Assembler.
|
||||||
|
|
||||||
@ -15,26 +15,25 @@
|
|||||||
GNU General Public License for more details.
|
GNU General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with GAS; see the file COPYING. If not, write to
|
along with this program; if not, see <http://www.gnu.org/licenses/> */
|
||||||
the Free Software Foundation, 51 Franklin Street - Fifth Floor,
|
|
||||||
Boston, MA 02110-1301, USA. */
|
|
||||||
|
|
||||||
#include "as.h"
|
#include "as.h"
|
||||||
|
#include "safe-ctype.h"
|
||||||
#include "subsegs.h"
|
#include "subsegs.h"
|
||||||
#include "symcat.h"
|
#include "symcat.h"
|
||||||
#include "opcodes/openrisc-desc.h"
|
#include "opcodes/or1k-desc.h"
|
||||||
#include "opcodes/openrisc-opc.h"
|
#include "opcodes/or1k-opc.h"
|
||||||
#include "cgen.h"
|
#include "cgen.h"
|
||||||
|
#include "elf/or1k.h"
|
||||||
|
#include "dw2gencfi.h"
|
||||||
|
|
||||||
/* Structure to hold all of the different components describing
|
/* Structure to hold all of the different components describing
|
||||||
an individual instruction. */
|
an individual instruction. */
|
||||||
typedef struct openrisc_insn openrisc_insn;
|
|
||||||
|
|
||||||
struct openrisc_insn
|
typedef struct
|
||||||
{
|
{
|
||||||
const CGEN_INSN * insn;
|
const CGEN_INSN * insn;
|
||||||
const CGEN_INSN * orig_insn;
|
const CGEN_INSN * orig_insn;
|
||||||
CGEN_FIELDS fields;
|
CGEN_FIELDS fields;
|
||||||
#if CGEN_INT_INSN_P
|
#if CGEN_INT_INSN_P
|
||||||
CGEN_INSN_INT buffer [1];
|
CGEN_INSN_INT buffer [1];
|
||||||
#define INSN_VALUE(buf) (*(buf))
|
#define INSN_VALUE(buf) (*(buf))
|
||||||
@ -42,13 +41,13 @@ struct openrisc_insn
|
|||||||
unsigned char buffer [CGEN_MAX_INSN_SIZE];
|
unsigned char buffer [CGEN_MAX_INSN_SIZE];
|
||||||
#define INSN_VALUE(buf) (buf)
|
#define INSN_VALUE(buf) (buf)
|
||||||
#endif
|
#endif
|
||||||
char * addr;
|
char * addr;
|
||||||
fragS * frag;
|
fragS * frag;
|
||||||
int num_fixups;
|
int num_fixups;
|
||||||
fixS * fixups [GAS_CGEN_MAX_FIXUPS];
|
fixS * fixups [GAS_CGEN_MAX_FIXUPS];
|
||||||
int indices [MAX_OPERAND_INSTANCES];
|
int indices [MAX_OPERAND_INSTANCES];
|
||||||
};
|
}
|
||||||
|
or1k_insn;
|
||||||
|
|
||||||
const char comment_chars[] = "#";
|
const char comment_chars[] = "#";
|
||||||
const char line_comment_chars[] = "#";
|
const char line_comment_chars[] = "#";
|
||||||
@ -56,9 +55,8 @@ const char line_separator_chars[] = ";";
|
|||||||
const char EXP_CHARS[] = "eE";
|
const char EXP_CHARS[] = "eE";
|
||||||
const char FLT_CHARS[] = "dD";
|
const char FLT_CHARS[] = "dD";
|
||||||
|
|
||||||
|
#define OR1K_SHORTOPTS "m:"
|
||||||
#define OPENRISC_SHORTOPTS "m:"
|
const char * md_shortopts = OR1K_SHORTOPTS;
|
||||||
const char * md_shortopts = OPENRISC_SHORTOPTS;
|
|
||||||
|
|
||||||
struct option md_longopts[] =
|
struct option md_longopts[] =
|
||||||
{
|
{
|
||||||
@ -66,7 +64,7 @@ struct option md_longopts[] =
|
|||||||
};
|
};
|
||||||
size_t md_longopts_size = sizeof (md_longopts);
|
size_t md_longopts_size = sizeof (md_longopts);
|
||||||
|
|
||||||
unsigned long openrisc_machine = 0; /* default */
|
unsigned long or1k_machine = 0; /* default */
|
||||||
|
|
||||||
int
|
int
|
||||||
md_parse_option (int c ATTRIBUTE_UNUSED, char * arg ATTRIBUTE_UNUSED)
|
md_parse_option (int c ATTRIBUTE_UNUSED, char * arg ATTRIBUTE_UNUSED)
|
||||||
@ -85,30 +83,38 @@ ignore_pseudo (int val ATTRIBUTE_UNUSED)
|
|||||||
discard_rest_of_line ();
|
discard_rest_of_line ();
|
||||||
}
|
}
|
||||||
|
|
||||||
const char openrisc_comment_chars [] = ";#";
|
static bfd_boolean nodelay = FALSE;
|
||||||
|
static void
|
||||||
|
s_nodelay (int val ATTRIBUTE_UNUSED)
|
||||||
|
{
|
||||||
|
nodelay = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char or1k_comment_chars [] = ";#";
|
||||||
|
|
||||||
/* The target specific pseudo-ops which we support. */
|
/* The target specific pseudo-ops which we support. */
|
||||||
const pseudo_typeS md_pseudo_table[] =
|
const pseudo_typeS md_pseudo_table[] =
|
||||||
{
|
{
|
||||||
|
{ "align", s_align_bytes, 0 },
|
||||||
{ "word", cons, 4 },
|
{ "word", cons, 4 },
|
||||||
{ "proc", ignore_pseudo, 0 },
|
{ "proc", ignore_pseudo, 0 },
|
||||||
{ "endproc", ignore_pseudo, 0 },
|
{ "endproc", ignore_pseudo, 0 },
|
||||||
{ NULL, NULL, 0 }
|
{ "nodelay", s_nodelay, 0 },
|
||||||
|
{ NULL, NULL, 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
md_begin (void)
|
md_begin (void)
|
||||||
{
|
{
|
||||||
/* Initialize the `cgen' interface. */
|
/* Initialize the `cgen' interface. */
|
||||||
|
|
||||||
/* Set the machine number and endian. */
|
/* Set the machine number and endian. */
|
||||||
gas_cgen_cpu_desc = openrisc_cgen_cpu_open (CGEN_CPU_OPEN_MACHS, 0,
|
gas_cgen_cpu_desc = or1k_cgen_cpu_open (CGEN_CPU_OPEN_MACHS, 0,
|
||||||
CGEN_CPU_OPEN_ENDIAN,
|
CGEN_CPU_OPEN_ENDIAN,
|
||||||
CGEN_ENDIAN_BIG,
|
CGEN_ENDIAN_BIG,
|
||||||
CGEN_CPU_OPEN_END);
|
CGEN_CPU_OPEN_END);
|
||||||
openrisc_cgen_init_asm (gas_cgen_cpu_desc);
|
or1k_cgen_init_asm (gas_cgen_cpu_desc);
|
||||||
|
|
||||||
/* This is a callback from cgen to gas to parse operands. */
|
/* This is a callback from cgen to gas to parse operands. */
|
||||||
cgen_set_parse_operand_fn (gas_cgen_cpu_desc, gas_cgen_parse_operand);
|
cgen_set_parse_operand_fn (gas_cgen_cpu_desc, gas_cgen_parse_operand);
|
||||||
@ -118,13 +124,13 @@ void
|
|||||||
md_assemble (char * str)
|
md_assemble (char * str)
|
||||||
{
|
{
|
||||||
static int last_insn_had_delay_slot = 0;
|
static int last_insn_had_delay_slot = 0;
|
||||||
openrisc_insn insn;
|
or1k_insn insn;
|
||||||
char * errmsg;
|
char * errmsg;
|
||||||
|
|
||||||
/* Initialize GAS's cgen interface for a new instruction. */
|
/* Initialize GAS's cgen interface for a new instruction. */
|
||||||
gas_cgen_init_parse ();
|
gas_cgen_init_parse ();
|
||||||
|
|
||||||
insn.insn = openrisc_cgen_assemble_insn
|
insn.insn = or1k_cgen_assemble_insn
|
||||||
(gas_cgen_cpu_desc, str, & insn.fields, insn.buffer, & errmsg);
|
(gas_cgen_cpu_desc, str, & insn.fields, insn.buffer, & errmsg);
|
||||||
|
|
||||||
if (!insn.insn)
|
if (!insn.insn)
|
||||||
@ -135,10 +141,11 @@ md_assemble (char * str)
|
|||||||
|
|
||||||
/* Doesn't really matter what we pass for RELAX_P here. */
|
/* Doesn't really matter what we pass for RELAX_P here. */
|
||||||
gas_cgen_finish_insn (insn.insn, insn.buffer,
|
gas_cgen_finish_insn (insn.insn, insn.buffer,
|
||||||
CGEN_FIELDS_BITSIZE (& insn.fields), 1, NULL);
|
CGEN_FIELDS_BITSIZE (& insn.fields), 1, NULL);
|
||||||
|
|
||||||
last_insn_had_delay_slot
|
last_insn_had_delay_slot
|
||||||
= CGEN_INSN_ATTR_VALUE (insn.insn, CGEN_INSN_DELAY_SLOT);
|
= CGEN_INSN_ATTR_VALUE (insn.insn, CGEN_INSN_DELAY_SLOT);
|
||||||
|
(void) last_insn_had_delay_slot;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -168,10 +175,8 @@ md_undefined_symbol (char * name ATTRIBUTE_UNUSED)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Interface to relax_segment. */
|
|
||||||
|
|
||||||
/* FIXME: Look through this. */
|
/* Interface to relax_segment. */
|
||||||
|
|
||||||
const relax_typeS md_relax_table[] =
|
const relax_typeS md_relax_table[] =
|
||||||
{
|
{
|
||||||
@ -185,71 +190,14 @@ const relax_typeS md_relax_table[] =
|
|||||||
each list. */
|
each list. */
|
||||||
{1, 1, 0, 0},
|
{1, 1, 0, 0},
|
||||||
|
|
||||||
/* The displacement used by GAS is from the end of the 2 byte insn,
|
/* The displacement used by GAS is from the end of the 4 byte insn,
|
||||||
so we subtract 2 from the following. */
|
so we subtract 4 from the following. */
|
||||||
/* 16 bit insn, 8 bit disp -> 10 bit range.
|
{(((1 << 25) - 1) << 2) - 4, -(1 << 25) - 4, 0, 0},
|
||||||
This doesn't handle a branch in the right slot at the border:
|
|
||||||
the "& -4" isn't taken into account. It's not important enough to
|
|
||||||
complicate things over it, so we subtract an extra 2 (or + 2 in -ve
|
|
||||||
case). */
|
|
||||||
{511 - 2 - 2, -512 - 2 + 2, 0, 2 },
|
|
||||||
/* 32 bit insn, 24 bit disp -> 26 bit range. */
|
|
||||||
{0x2000000 - 1 - 2, -0x2000000 - 2, 2, 0 },
|
|
||||||
/* Same thing, but with leading nop for alignment. */
|
|
||||||
{0x2000000 - 1 - 2, -0x2000000 - 2, 4, 0 }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Return an initial guess of the length by which a fragment must grow to
|
|
||||||
hold a branch to reach its destination.
|
|
||||||
Also updates fr_type/fr_subtype as necessary.
|
|
||||||
|
|
||||||
Called just before doing relaxation.
|
|
||||||
Any symbol that is now undefined will not become defined.
|
|
||||||
The guess for fr_var is ACTUALLY the growth beyond fr_fix.
|
|
||||||
Whatever we do to grow fr_fix or fr_var contributes to our returned value.
|
|
||||||
Although it may not be explicit in the frag, pretend fr_var starts with a
|
|
||||||
0 value. */
|
|
||||||
|
|
||||||
int
|
int
|
||||||
md_estimate_size_before_relax (fragS * fragP, segT segment)
|
md_estimate_size_before_relax (fragS * fragP, segT segment ATTRIBUTE_UNUSED)
|
||||||
{
|
{
|
||||||
/* The only thing we have to handle here are symbols outside of the
|
|
||||||
current segment. They may be undefined or in a different segment in
|
|
||||||
which case linker scripts may place them anywhere.
|
|
||||||
However, we can't finish the fragment here and emit the reloc as insn
|
|
||||||
alignment requirements may move the insn about. */
|
|
||||||
|
|
||||||
if (S_GET_SEGMENT (fragP->fr_symbol) != segment)
|
|
||||||
{
|
|
||||||
/* The symbol is undefined in this segment.
|
|
||||||
Change the relaxation subtype to the max allowable and leave
|
|
||||||
all further handling to md_convert_frag. */
|
|
||||||
fragP->fr_subtype = 2;
|
|
||||||
|
|
||||||
{
|
|
||||||
const CGEN_INSN * insn;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
/* Update the recorded insn.
|
|
||||||
Fortunately we don't have to look very far.
|
|
||||||
FIXME: Change this to record in the instruction the next higher
|
|
||||||
relaxable insn to use. */
|
|
||||||
for (i = 0, insn = fragP->fr_cgen.insn; i < 4; i++, insn++)
|
|
||||||
{
|
|
||||||
if ((strcmp (CGEN_INSN_MNEMONIC (insn),
|
|
||||||
CGEN_INSN_MNEMONIC (fragP->fr_cgen.insn))
|
|
||||||
== 0)
|
|
||||||
&& CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_RELAXED))
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (i == 4)
|
|
||||||
abort ();
|
|
||||||
|
|
||||||
fragP->fr_cgen.insn = insn;
|
|
||||||
return 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return md_relax_table[fragP->fr_subtype].rlx_length;
|
return md_relax_table[fragP->fr_subtype].rlx_length;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -262,13 +210,13 @@ md_estimate_size_before_relax (fragS * fragP, segT segment)
|
|||||||
|
|
||||||
void
|
void
|
||||||
md_convert_frag (bfd * abfd ATTRIBUTE_UNUSED,
|
md_convert_frag (bfd * abfd ATTRIBUTE_UNUSED,
|
||||||
segT sec ATTRIBUTE_UNUSED,
|
segT sec ATTRIBUTE_UNUSED,
|
||||||
fragS * fragP ATTRIBUTE_UNUSED)
|
fragS * fragP ATTRIBUTE_UNUSED)
|
||||||
{
|
{
|
||||||
/* FIXME */
|
/* FIXME */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Functions concerning relocs. */
|
/* Functions concerning relocs. */
|
||||||
|
|
||||||
/* The location from which a PC relative jump should be calculated,
|
/* The location from which a PC relative jump should be calculated,
|
||||||
@ -279,12 +227,16 @@ md_pcrel_from_section (fixS * fixP, segT sec)
|
|||||||
{
|
{
|
||||||
if (fixP->fx_addsy != (symbolS *) NULL
|
if (fixP->fx_addsy != (symbolS *) NULL
|
||||||
&& (! S_IS_DEFINED (fixP->fx_addsy)
|
&& (! S_IS_DEFINED (fixP->fx_addsy)
|
||||||
|| S_GET_SEGMENT (fixP->fx_addsy) != sec))
|
|| (S_GET_SEGMENT (fixP->fx_addsy) != sec)
|
||||||
/* The symbol is undefined (or is defined but not in this section).
|
|| S_IS_EXTERNAL (fixP->fx_addsy)
|
||||||
Let the linker figure it out. */
|
|| S_IS_WEAK (fixP->fx_addsy)))
|
||||||
return 0;
|
{
|
||||||
|
/* The symbol is undefined (or is defined but not in this section).
|
||||||
|
Let the linker figure it out. */
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
return (fixP->fx_frag->fr_address + fixP->fx_where) & ~1;
|
return fixP->fx_frag->fr_address + fixP->fx_where;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -294,40 +246,23 @@ md_pcrel_from_section (fixS * fixP, segT sec)
|
|||||||
|
|
||||||
bfd_reloc_code_real_type
|
bfd_reloc_code_real_type
|
||||||
md_cgen_lookup_reloc (const CGEN_INSN * insn ATTRIBUTE_UNUSED,
|
md_cgen_lookup_reloc (const CGEN_INSN * insn ATTRIBUTE_UNUSED,
|
||||||
const CGEN_OPERAND * operand,
|
const CGEN_OPERAND * operand,
|
||||||
fixS * fixP)
|
fixS * fixP)
|
||||||
{
|
{
|
||||||
bfd_reloc_code_real_type type;
|
if (fixP->fx_cgen.opinfo)
|
||||||
|
return fixP->fx_cgen.opinfo;
|
||||||
|
|
||||||
switch (operand->type)
|
switch (operand->type)
|
||||||
{
|
{
|
||||||
case OPENRISC_OPERAND_ABS_26:
|
case OR1K_OPERAND_DISP26:
|
||||||
fixP->fx_pcrel = 0;
|
|
||||||
type = BFD_RELOC_OPENRISC_ABS_26;
|
|
||||||
goto emit;
|
|
||||||
case OPENRISC_OPERAND_DISP_26:
|
|
||||||
fixP->fx_pcrel = 1;
|
fixP->fx_pcrel = 1;
|
||||||
type = BFD_RELOC_OPENRISC_REL_26;
|
return BFD_RELOC_OR1K_REL_26;
|
||||||
goto emit;
|
|
||||||
|
|
||||||
case OPENRISC_OPERAND_HI16:
|
default: /* avoid -Wall warning */
|
||||||
type = BFD_RELOC_HI16;
|
return BFD_RELOC_NONE;
|
||||||
goto emit;
|
|
||||||
|
|
||||||
case OPENRISC_OPERAND_LO16:
|
|
||||||
type = BFD_RELOC_LO16;
|
|
||||||
goto emit;
|
|
||||||
|
|
||||||
emit:
|
|
||||||
return type;
|
|
||||||
|
|
||||||
default : /* avoid -Wall warning */
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return BFD_RELOC_NONE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Write a value out to the object file, using the appropriate endianness. */
|
/* Write a value out to the object file, using the appropriate endianness. */
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -338,10 +273,9 @@ md_number_to_chars (char * buf, valueT val, int n)
|
|||||||
|
|
||||||
/* Turn a string in input_line_pointer into a floating point constant of type
|
/* Turn a string in input_line_pointer into a floating point constant of type
|
||||||
type, and store the appropriate bytes in *litP. The number of LITTLENUMS
|
type, and store the appropriate bytes in *litP. The number of LITTLENUMS
|
||||||
emitted is stored in *sizeP . An error message is returned, or NULL on OK.
|
emitted is stored in *sizeP . An error message is returned, or NULL on OK. */
|
||||||
*/
|
|
||||||
|
|
||||||
/* Equal to MAX_PRECISION in atof-ieee.c */
|
/* Equal to MAX_PRECISION in atof-ieee.c. */
|
||||||
#define MAX_LITTLENUMS 6
|
#define MAX_LITTLENUMS 6
|
||||||
|
|
||||||
char *
|
char *
|
||||||
@ -351,12 +285,78 @@ md_atof (int type, char * litP, int * sizeP)
|
|||||||
}
|
}
|
||||||
|
|
||||||
bfd_boolean
|
bfd_boolean
|
||||||
openrisc_fix_adjustable (fixS * fixP)
|
or1k_fix_adjustable (fixS * fixP)
|
||||||
{
|
{
|
||||||
/* We need the symbol name for the VTABLE entries. */
|
/* We need the symbol name for the VTABLE entries. */
|
||||||
if (fixP->fx_r_type == BFD_RELOC_VTABLE_INHERIT
|
if (fixP->fx_r_type == BFD_RELOC_VTABLE_INHERIT
|
||||||
|| fixP->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
|
|| fixP->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
|
||||||
return 0;
|
return FALSE;
|
||||||
|
|
||||||
return 1;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define GOT_NAME "_GLOBAL_OFFSET_TABLE_"
|
||||||
|
|
||||||
|
arelent *
|
||||||
|
tc_gen_reloc (asection *sec, fixS *fx)
|
||||||
|
{
|
||||||
|
bfd_reloc_code_real_type code = fx->fx_r_type;
|
||||||
|
|
||||||
|
if (fx->fx_addsy != NULL
|
||||||
|
&& strcmp (S_GET_NAME (fx->fx_addsy), GOT_NAME) == 0
|
||||||
|
&& (code == BFD_RELOC_OR1K_GOTPC_HI16
|
||||||
|
|| code == BFD_RELOC_OR1K_GOTPC_LO16))
|
||||||
|
{
|
||||||
|
arelent * reloc;
|
||||||
|
|
||||||
|
reloc = xmalloc (sizeof (* reloc));
|
||||||
|
reloc->sym_ptr_ptr = xmalloc (sizeof (asymbol *));
|
||||||
|
*reloc->sym_ptr_ptr = symbol_get_bfdsym (fx->fx_addsy);
|
||||||
|
reloc->address = fx->fx_frag->fr_address + fx->fx_where;
|
||||||
|
reloc->howto = bfd_reloc_type_lookup (stdoutput, fx->fx_r_type);
|
||||||
|
reloc->addend = fx->fx_offset;
|
||||||
|
return reloc;
|
||||||
|
}
|
||||||
|
|
||||||
|
return gas_cgen_tc_gen_reloc (sec, fx);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
or1k_apply_fix (struct fix *f, valueT *t, segT s)
|
||||||
|
{
|
||||||
|
gas_cgen_md_apply_fix (f, t, s);
|
||||||
|
|
||||||
|
switch (f->fx_r_type)
|
||||||
|
{
|
||||||
|
case BFD_RELOC_OR1K_TLS_GD_HI16:
|
||||||
|
case BFD_RELOC_OR1K_TLS_GD_LO16:
|
||||||
|
case BFD_RELOC_OR1K_TLS_LDM_HI16:
|
||||||
|
case BFD_RELOC_OR1K_TLS_LDM_LO16:
|
||||||
|
case BFD_RELOC_OR1K_TLS_LDO_HI16:
|
||||||
|
case BFD_RELOC_OR1K_TLS_LDO_LO16:
|
||||||
|
case BFD_RELOC_OR1K_TLS_IE_HI16:
|
||||||
|
case BFD_RELOC_OR1K_TLS_IE_LO16:
|
||||||
|
case BFD_RELOC_OR1K_TLS_LE_HI16:
|
||||||
|
case BFD_RELOC_OR1K_TLS_LE_LO16:
|
||||||
|
S_SET_THREAD_LOCAL (f->fx_addsy);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
or1k_elf_final_processing (void)
|
||||||
|
{
|
||||||
|
if (nodelay)
|
||||||
|
elf_elfheader (stdoutput)->e_flags |= EF_OR1K_NODELAY;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Standard calling conventions leave the CFA at SP on entry. */
|
||||||
|
|
||||||
|
void
|
||||||
|
or1k_cfi_frame_initial_instructions (void)
|
||||||
|
{
|
||||||
|
cfi_add_CFA_def_cfa_register (1);
|
||||||
|
}
|
||||||
|
|
79
gas/config/tc-or1k.h
Normal file
79
gas/config/tc-or1k.h
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
/* tc-or1k.h -- Header file for tc-or1k.c.
|
||||||
|
Copyright 2001-2014 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GAS, the GNU Assembler.
|
||||||
|
|
||||||
|
GAS is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 3, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GAS is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, see <http://www.gnu.org/licenses/> */
|
||||||
|
|
||||||
|
#define TC_OR1K
|
||||||
|
|
||||||
|
#define LISTING_HEADER "Or1k GAS "
|
||||||
|
|
||||||
|
/* The target BFD architecture. */
|
||||||
|
#define TARGET_ARCH bfd_arch_or1k
|
||||||
|
|
||||||
|
extern unsigned long or1k_machine;
|
||||||
|
#define TARGET_MACH (or1k_machine)
|
||||||
|
|
||||||
|
#define TARGET_FORMAT "elf32-or1k"
|
||||||
|
#define TARGET_BYTES_BIG_ENDIAN 1
|
||||||
|
|
||||||
|
extern const char or1k_comment_chars [];
|
||||||
|
#define tc_comment_chars or1k_comment_chars
|
||||||
|
|
||||||
|
/* Permit temporary numeric labels. */
|
||||||
|
#define LOCAL_LABELS_FB 1
|
||||||
|
|
||||||
|
#define DIFF_EXPR_OK 1 /* .-foo gets turned into PC relative relocs. */
|
||||||
|
|
||||||
|
/* We don't need to handle .word strangely. */
|
||||||
|
#define WORKING_DOT_WORD
|
||||||
|
|
||||||
|
/* Values passed to md_apply_fix don't include the symbol value. */
|
||||||
|
#define MD_APPLY_SYM_VALUE(FIX) 0
|
||||||
|
|
||||||
|
#define md_apply_fix or1k_apply_fix
|
||||||
|
extern void or1k_apply_fix (struct fix *, valueT *, segT);
|
||||||
|
|
||||||
|
extern bfd_boolean or1k_fix_adjustable (struct fix *);
|
||||||
|
#define tc_fix_adjustable(FIX) or1k_fix_adjustable (FIX)
|
||||||
|
|
||||||
|
/* Call md_pcrel_from_section(), not md_pcrel_from(). */
|
||||||
|
extern long md_pcrel_from_section (struct fix *, segT);
|
||||||
|
#define MD_PCREL_FROM_SECTION(FIX, SEC) md_pcrel_from_section (FIX, SEC)
|
||||||
|
|
||||||
|
/* For 8 vs 16 vs 32 bit branch selection. */
|
||||||
|
extern const struct relax_type md_relax_table[];
|
||||||
|
#define TC_GENERIC_RELAX_TABLE md_relax_table
|
||||||
|
|
||||||
|
#define GAS_CGEN_PCREL_R_TYPE(r_type) gas_cgen_pcrel_r_type(r_type)
|
||||||
|
|
||||||
|
#define elf_tc_final_processing or1k_elf_final_processing
|
||||||
|
void or1k_elf_final_processing (void);
|
||||||
|
|
||||||
|
/* Enable cfi directives. */
|
||||||
|
#define TARGET_USE_CFIPOP 1
|
||||||
|
|
||||||
|
/* Stack grows to lower addresses and wants 4 byte boundary. */
|
||||||
|
#define DWARF2_CIE_DATA_ALIGNMENT -4
|
||||||
|
|
||||||
|
/* Define the column that represents the PC. */
|
||||||
|
#define DWARF2_DEFAULT_RETURN_COLUMN 9
|
||||||
|
|
||||||
|
/* or1k instructions are 4 bytes long. */
|
||||||
|
#define DWARF2_LINE_MIN_INSN_LENGTH 4
|
||||||
|
|
||||||
|
#define tc_cfi_frame_initial_instructions \
|
||||||
|
or1k_cfi_frame_initial_instructions
|
||||||
|
extern void or1k_cfi_frame_initial_instructions (void);
|
@ -1,966 +0,0 @@
|
|||||||
/* Assembly backend for the OpenRISC 1000.
|
|
||||||
Copyright (C) 2002-2014 Free Software Foundation, Inc.
|
|
||||||
Contributed by Damjan Lampret <lampret@opencores.org>.
|
|
||||||
Modified bu Johan Rydberg, <johan.rydberg@netinsight.se>.
|
|
||||||
Based upon a29k port.
|
|
||||||
|
|
||||||
This file is part of GAS, the GNU Assembler.
|
|
||||||
|
|
||||||
GAS is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 3, or (at your option)
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
GAS is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with GAS; see the file COPYING. If not, write to
|
|
||||||
the Free Software Foundation, 51 Franklin Street - Fifth Floor,
|
|
||||||
Boston, MA 02110-1301, USA. */
|
|
||||||
|
|
||||||
/* tc-a29k.c used as a template. */
|
|
||||||
|
|
||||||
#include "as.h"
|
|
||||||
#include "safe-ctype.h"
|
|
||||||
#include "opcode/or32.h"
|
|
||||||
#include "elf/or32.h"
|
|
||||||
|
|
||||||
#define DEBUG 0
|
|
||||||
|
|
||||||
#ifndef REGISTER_PREFIX
|
|
||||||
#define REGISTER_PREFIX '%'
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Make it easier to clone this machine desc into another one. */
|
|
||||||
#define machine_opcode or32_opcode
|
|
||||||
#define machine_opcodes or32_opcodes
|
|
||||||
#define machine_ip or32_ip
|
|
||||||
#define machine_it or32_it
|
|
||||||
|
|
||||||
/* Handle of the OPCODE hash table. */
|
|
||||||
static struct hash_control *op_hash = NULL;
|
|
||||||
|
|
||||||
struct machine_it
|
|
||||||
{
|
|
||||||
char * error;
|
|
||||||
unsigned long opcode;
|
|
||||||
struct nlist * nlistp;
|
|
||||||
expressionS exp;
|
|
||||||
int pcrel;
|
|
||||||
int reloc_offset; /* Offset of reloc within insn. */
|
|
||||||
int reloc;
|
|
||||||
}
|
|
||||||
the_insn;
|
|
||||||
|
|
||||||
const pseudo_typeS md_pseudo_table[] =
|
|
||||||
{
|
|
||||||
{"align", s_align_bytes, 4 },
|
|
||||||
{"space", s_space, 0 },
|
|
||||||
{"cputype", s_ignore, 0 },
|
|
||||||
{"reg", s_lsym, 0 }, /* Register equate, same as equ. */
|
|
||||||
{"sect", s_ignore, 0 }, /* Creation of coff sections. */
|
|
||||||
{"proc", s_ignore, 0 }, /* Start of a function. */
|
|
||||||
{"endproc", s_ignore, 0 }, /* Function end. */
|
|
||||||
{"word", cons, 4 },
|
|
||||||
{NULL, 0, 0 },
|
|
||||||
};
|
|
||||||
|
|
||||||
int md_short_jump_size = 4;
|
|
||||||
int md_long_jump_size = 4;
|
|
||||||
|
|
||||||
/* This array holds the chars that always start a comment.
|
|
||||||
If the pre-processor is disabled, these aren't very useful. */
|
|
||||||
const char comment_chars[] = "#";
|
|
||||||
|
|
||||||
/* This array holds the chars that only start a comment at the beginning of
|
|
||||||
a line. If the line seems to have the form '# 123 filename'
|
|
||||||
.line and .file directives will appear in the pre-processed output. */
|
|
||||||
/* Note that input_file.c hand checks for '#' at the beginning of the
|
|
||||||
first line of the input file. This is because the compiler outputs
|
|
||||||
#NO_APP at the beginning of its output. */
|
|
||||||
/* Also note that comments like this one will always work. */
|
|
||||||
const char line_comment_chars[] = "#";
|
|
||||||
|
|
||||||
/* We needed an unused char for line separation to work around the
|
|
||||||
lack of macros, using sed and such. */
|
|
||||||
const char line_separator_chars[] = ";";
|
|
||||||
|
|
||||||
/* Chars that can be used to separate mant from exp in floating point nums. */
|
|
||||||
const char EXP_CHARS[] = "eE";
|
|
||||||
|
|
||||||
/* Chars that mean this number is a floating point constant.
|
|
||||||
As in 0f12.456
|
|
||||||
or 0d1.2345e12. */
|
|
||||||
const char FLT_CHARS[] = "rRsSfFdDxXpP";
|
|
||||||
|
|
||||||
/* "l.jalr r9" precalculated opcode. */
|
|
||||||
static unsigned long jalr_r9_opcode;
|
|
||||||
|
|
||||||
static void machine_ip (char *);
|
|
||||||
|
|
||||||
|
|
||||||
/* Set bits in machine opcode according to insn->encoding
|
|
||||||
description and passed operand. */
|
|
||||||
|
|
||||||
static void
|
|
||||||
encode (const struct machine_opcode *insn,
|
|
||||||
unsigned long *opcode,
|
|
||||||
signed long param_val,
|
|
||||||
char param_ch)
|
|
||||||
{
|
|
||||||
int opc_pos = 0;
|
|
||||||
int param_pos = 0;
|
|
||||||
char *enc;
|
|
||||||
|
|
||||||
#if DEBUG
|
|
||||||
printf (" encode: opcode=%.8lx param_val=%.8lx abs=%.8lx param_ch=%c\n",
|
|
||||||
*opcode, param_val, abs (param_val), param_ch);
|
|
||||||
#endif
|
|
||||||
for (enc = insn->encoding; *enc != '\0'; enc++)
|
|
||||||
if (*enc == param_ch)
|
|
||||||
{
|
|
||||||
if (enc - 2 >= insn->encoding && (*(enc - 2) == '0') && (*(enc - 1) == 'x'))
|
|
||||||
continue;
|
|
||||||
else
|
|
||||||
param_pos ++;
|
|
||||||
}
|
|
||||||
|
|
||||||
opc_pos = 32;
|
|
||||||
|
|
||||||
for (enc = insn->encoding; *enc != '\0';)
|
|
||||||
{
|
|
||||||
if ((*enc == '0') && (*(enc + 1) == 'x'))
|
|
||||||
{
|
|
||||||
int tmp = strtol (enc, NULL, 16);
|
|
||||||
|
|
||||||
opc_pos -= 4;
|
|
||||||
*opcode |= tmp << opc_pos;
|
|
||||||
enc += 3;
|
|
||||||
}
|
|
||||||
else if ((*enc == '0') || (*enc == '-'))
|
|
||||||
{
|
|
||||||
opc_pos--;
|
|
||||||
enc++;
|
|
||||||
}
|
|
||||||
else if (*enc == '1')
|
|
||||||
{
|
|
||||||
opc_pos--;
|
|
||||||
*opcode |= 1 << opc_pos;
|
|
||||||
enc++;
|
|
||||||
}
|
|
||||||
else if (*enc == param_ch)
|
|
||||||
{
|
|
||||||
opc_pos--;
|
|
||||||
param_pos--;
|
|
||||||
*opcode |= ((param_val >> param_pos) & 0x1) << opc_pos;
|
|
||||||
enc++;
|
|
||||||
}
|
|
||||||
else if (ISALPHA (*enc))
|
|
||||||
{
|
|
||||||
opc_pos--;
|
|
||||||
enc++;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
enc++;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if DEBUG
|
|
||||||
printf (" opcode=%.8lx\n", *opcode);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
/* This function is called once, at assembler startup time. It should
|
|
||||||
set up all the tables, etc., that the MD part of the assembler will
|
|
||||||
need. */
|
|
||||||
|
|
||||||
void
|
|
||||||
md_begin (void)
|
|
||||||
{
|
|
||||||
const char *retval = NULL;
|
|
||||||
int lose = 0;
|
|
||||||
int skipnext = 0;
|
|
||||||
unsigned int i;
|
|
||||||
|
|
||||||
/* Hash up all the opcodes for fast use later. */
|
|
||||||
op_hash = hash_new ();
|
|
||||||
|
|
||||||
for (i = 0; i < or32_num_opcodes; i++)
|
|
||||||
{
|
|
||||||
const char *name = machine_opcodes[i].name;
|
|
||||||
|
|
||||||
if (skipnext)
|
|
||||||
{
|
|
||||||
skipnext = 0;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
retval = hash_insert (op_hash, name, (void *) &machine_opcodes[i]);
|
|
||||||
if (retval != NULL)
|
|
||||||
{
|
|
||||||
fprintf (stderr, "internal error: can't hash `%s': %s\n",
|
|
||||||
machine_opcodes[i].name, retval);
|
|
||||||
lose = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (lose)
|
|
||||||
as_fatal (_("Broken assembler. No assembly attempted."));
|
|
||||||
|
|
||||||
encode (&machine_opcodes[insn_index ("l.jalr")], &jalr_r9_opcode, 9, 'B');
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Returns non zero if instruction is to be used. */
|
|
||||||
|
|
||||||
static int
|
|
||||||
check_invalid_opcode (unsigned long opcode)
|
|
||||||
{
|
|
||||||
return opcode == jalr_r9_opcode;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Assemble a single instruction. Its label has already been handled
|
|
||||||
by the generic front end. We just parse opcode and operands, and
|
|
||||||
produce the bytes of data and relocation. */
|
|
||||||
|
|
||||||
void
|
|
||||||
md_assemble (char *str)
|
|
||||||
{
|
|
||||||
char *toP;
|
|
||||||
|
|
||||||
#if DEBUG
|
|
||||||
printf ("NEW INSTRUCTION\n");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
know (str);
|
|
||||||
machine_ip (str);
|
|
||||||
toP = frag_more (4);
|
|
||||||
|
|
||||||
/* Put out the opcode. */
|
|
||||||
md_number_to_chars (toP, the_insn.opcode, 4);
|
|
||||||
|
|
||||||
/* Put out the symbol-dependent stuff. */
|
|
||||||
if (the_insn.reloc != BFD_RELOC_NONE)
|
|
||||||
{
|
|
||||||
fix_new_exp (frag_now,
|
|
||||||
(toP - frag_now->fr_literal + the_insn.reloc_offset),
|
|
||||||
4, /* size */
|
|
||||||
&the_insn.exp,
|
|
||||||
the_insn.pcrel,
|
|
||||||
the_insn.reloc);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* This is true of the we have issued a "lo(" or "hi"(. */
|
|
||||||
static int waiting_for_shift = 0;
|
|
||||||
|
|
||||||
static int mask_or_shift = 0;
|
|
||||||
|
|
||||||
static char *
|
|
||||||
parse_operand (char *s, expressionS *operandp, int opt)
|
|
||||||
{
|
|
||||||
char *save = input_line_pointer;
|
|
||||||
char *new_pointer;
|
|
||||||
|
|
||||||
#if DEBUG
|
|
||||||
printf (" PROCESS NEW OPERAND(%s) == %c (%d)\n", s, opt ? opt : '!', opt);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
input_line_pointer = s;
|
|
||||||
|
|
||||||
if (strncasecmp (s, "HI(", 3) == 0)
|
|
||||||
{
|
|
||||||
waiting_for_shift = 1;
|
|
||||||
mask_or_shift = BFD_RELOC_HI16;
|
|
||||||
|
|
||||||
input_line_pointer += 3;
|
|
||||||
}
|
|
||||||
else if (strncasecmp (s, "LO(", 3) == 0)
|
|
||||||
{
|
|
||||||
mask_or_shift = BFD_RELOC_LO16;
|
|
||||||
|
|
||||||
input_line_pointer += 3;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
mask_or_shift = 0;
|
|
||||||
|
|
||||||
if ((*s == '(') && (*(s+1) == 'r'))
|
|
||||||
s++;
|
|
||||||
|
|
||||||
if ((*s == 'r') && ISDIGIT (*(s + 1)))
|
|
||||||
{
|
|
||||||
operandp->X_add_number = strtol (s + 1, NULL, 10);
|
|
||||||
operandp->X_op = O_register;
|
|
||||||
for (; (*s != ',') && (*s != '\0');)
|
|
||||||
s++;
|
|
||||||
input_line_pointer = save;
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
|
|
||||||
expression (operandp);
|
|
||||||
|
|
||||||
if (operandp->X_op == O_absent)
|
|
||||||
{
|
|
||||||
if (! opt)
|
|
||||||
as_bad (_("missing operand"));
|
|
||||||
else
|
|
||||||
{
|
|
||||||
operandp->X_add_number = 0;
|
|
||||||
operandp->X_op = O_constant;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
new_pointer = input_line_pointer;
|
|
||||||
input_line_pointer = save;
|
|
||||||
|
|
||||||
#if DEBUG
|
|
||||||
printf (" %s=parse_operand(%s): operandp->X_op = %u\n", new_pointer, s,
|
|
||||||
operandp->X_op);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return new_pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Instruction parsing. Takes a string containing the opcode.
|
|
||||||
Operands are at input_line_pointer. Output is in the_insn.
|
|
||||||
Warnings or errors are generated. */
|
|
||||||
|
|
||||||
static void
|
|
||||||
machine_ip (char *str)
|
|
||||||
{
|
|
||||||
char *s;
|
|
||||||
const char *args;
|
|
||||||
const struct machine_opcode *insn;
|
|
||||||
unsigned long opcode;
|
|
||||||
expressionS the_operand;
|
|
||||||
expressionS *operand = &the_operand;
|
|
||||||
unsigned int regno;
|
|
||||||
int reloc = BFD_RELOC_NONE;
|
|
||||||
|
|
||||||
#if DEBUG
|
|
||||||
printf ("machine_ip(%s)\n", str);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
s = str;
|
|
||||||
for (; ISALNUM (*s) || *s == '.'; ++s)
|
|
||||||
if (ISUPPER (*s))
|
|
||||||
*s = TOLOWER (*s);
|
|
||||||
|
|
||||||
switch (*s)
|
|
||||||
{
|
|
||||||
case '\0':
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ' ': /* FIXME-SOMEDAY more whitespace. */
|
|
||||||
*s++ = '\0';
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
as_bad (_("unknown opcode1: `%s'"), str);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((insn = (struct machine_opcode *) hash_find (op_hash, str)) == NULL)
|
|
||||||
{
|
|
||||||
as_bad (_("unknown opcode2 `%s'."), str);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
opcode = 0;
|
|
||||||
memset (&the_insn, '\0', sizeof (the_insn));
|
|
||||||
the_insn.reloc = BFD_RELOC_NONE;
|
|
||||||
|
|
||||||
reloc = BFD_RELOC_NONE;
|
|
||||||
|
|
||||||
/* Build the opcode, checking as we go to make sure that the
|
|
||||||
operands match.
|
|
||||||
|
|
||||||
If an operand matches, we modify the_insn or opcode appropriately,
|
|
||||||
and do a "continue". If an operand fails to match, we "break". */
|
|
||||||
if (insn->args[0] != '\0')
|
|
||||||
/* Prime the pump. */
|
|
||||||
s = parse_operand (s, operand, insn->args[0] == 'I');
|
|
||||||
|
|
||||||
for (args = insn->args;; ++args)
|
|
||||||
{
|
|
||||||
#if DEBUG
|
|
||||||
printf (" args = %s\n", args);
|
|
||||||
#endif
|
|
||||||
switch (*args)
|
|
||||||
{
|
|
||||||
case '\0': /* End of args. */
|
|
||||||
/* We have have 0 args, do the bazoooka! */
|
|
||||||
if (args == insn->args)
|
|
||||||
encode (insn, &opcode, 0, 0);
|
|
||||||
|
|
||||||
if (*s == '\0')
|
|
||||||
{
|
|
||||||
/* We are truly done. */
|
|
||||||
the_insn.opcode = opcode;
|
|
||||||
if (check_invalid_opcode (opcode))
|
|
||||||
as_bad (_("instruction not allowed: %s"), str);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
as_bad (_("too many operands: %s"), s);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ',': /* Must match a comma. */
|
|
||||||
if (*s++ == ',')
|
|
||||||
{
|
|
||||||
reloc = BFD_RELOC_NONE;
|
|
||||||
|
|
||||||
/* Parse next operand. */
|
|
||||||
s = parse_operand (s, operand, args[1] == 'I');
|
|
||||||
#if DEBUG
|
|
||||||
printf (" ',' case: operand->X_add_number = %d, *args = %s, *s = %s\n",
|
|
||||||
operand->X_add_number, args, s);
|
|
||||||
#endif
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case '(': /* Must match a (. */
|
|
||||||
s = parse_operand (s, operand, args[1] == 'I');
|
|
||||||
continue;
|
|
||||||
|
|
||||||
case ')': /* Must match a ). */
|
|
||||||
continue;
|
|
||||||
|
|
||||||
case 'r': /* A general register. */
|
|
||||||
args++;
|
|
||||||
|
|
||||||
if (operand->X_op != O_register)
|
|
||||||
break; /* Only registers. */
|
|
||||||
|
|
||||||
know (operand->X_add_symbol == 0);
|
|
||||||
know (operand->X_op_symbol == 0);
|
|
||||||
regno = operand->X_add_number;
|
|
||||||
encode (insn, &opcode, regno, *args);
|
|
||||||
#if DEBUG
|
|
||||||
printf (" r: operand->X_op = %d\n", operand->X_op);
|
|
||||||
#endif
|
|
||||||
continue;
|
|
||||||
|
|
||||||
default:
|
|
||||||
/* if (! ISALPHA (*args))
|
|
||||||
break; */ /* Only immediate values. */
|
|
||||||
|
|
||||||
if (mask_or_shift)
|
|
||||||
{
|
|
||||||
#if DEBUG
|
|
||||||
printf ("mask_or_shift = %d\n", mask_or_shift);
|
|
||||||
#endif
|
|
||||||
reloc = mask_or_shift;
|
|
||||||
}
|
|
||||||
mask_or_shift = 0;
|
|
||||||
|
|
||||||
if (strncasecmp (args, "LO(", 3) == 0)
|
|
||||||
{
|
|
||||||
#if DEBUG
|
|
||||||
printf ("reloc_const\n");
|
|
||||||
#endif
|
|
||||||
reloc = BFD_RELOC_LO16;
|
|
||||||
}
|
|
||||||
else if (strncasecmp (args, "HI(", 3) == 0)
|
|
||||||
{
|
|
||||||
#if DEBUG
|
|
||||||
printf ("reloc_consth\n");
|
|
||||||
#endif
|
|
||||||
reloc = BFD_RELOC_HI16;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (*s == '(')
|
|
||||||
operand->X_op = O_constant;
|
|
||||||
else if (*s == ')')
|
|
||||||
s += 1;
|
|
||||||
#if DEBUG
|
|
||||||
printf (" default case: operand->X_add_number = %d, *args = %s, *s = %s\n", operand->X_add_number, args, s);
|
|
||||||
#endif
|
|
||||||
if (operand->X_op == O_constant)
|
|
||||||
{
|
|
||||||
if (reloc == BFD_RELOC_NONE)
|
|
||||||
{
|
|
||||||
bfd_vma v, mask;
|
|
||||||
|
|
||||||
mask = 0x3ffffff;
|
|
||||||
v = abs (operand->X_add_number) & ~ mask;
|
|
||||||
if (v)
|
|
||||||
as_bad (_("call/jmp target out of range (1)"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (reloc == BFD_RELOC_HI16)
|
|
||||||
operand->X_add_number = ((operand->X_add_number >> 16) & 0xffff);
|
|
||||||
|
|
||||||
the_insn.pcrel = 0;
|
|
||||||
encode (insn, &opcode, operand->X_add_number, *args);
|
|
||||||
/* the_insn.reloc = BFD_RELOC_NONE; */
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (reloc == BFD_RELOC_NONE)
|
|
||||||
the_insn.reloc = BFD_RELOC_32_GOT_PCREL;
|
|
||||||
else
|
|
||||||
the_insn.reloc = reloc;
|
|
||||||
|
|
||||||
/* the_insn.reloc = insn->reloc; */
|
|
||||||
#if DEBUG
|
|
||||||
printf (" reloc sym=%d\n", the_insn.reloc);
|
|
||||||
printf (" BFD_RELOC_NONE=%d\n", BFD_RELOC_NONE);
|
|
||||||
#endif
|
|
||||||
the_insn.exp = *operand;
|
|
||||||
|
|
||||||
/* the_insn.reloc_offset = 1; */
|
|
||||||
the_insn.pcrel = 1; /* Assume PC-relative jump. */
|
|
||||||
|
|
||||||
/* FIXME-SOON, Do we figure out whether abs later, after
|
|
||||||
know sym val? */
|
|
||||||
if (reloc == BFD_RELOC_LO16 || reloc == BFD_RELOC_HI16)
|
|
||||||
the_insn.pcrel = 0;
|
|
||||||
|
|
||||||
encode (insn, &opcode, operand->X_add_number, *args);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Types or values of args don't match. */
|
|
||||||
as_bad (_("invalid operands"));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
char *
|
|
||||||
md_atof (int type, char * litP, int * sizeP)
|
|
||||||
{
|
|
||||||
return ieee_md_atof (type, litP, sizeP, TRUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Write out big-endian. */
|
|
||||||
|
|
||||||
void
|
|
||||||
md_number_to_chars (char *buf, valueT val, int n)
|
|
||||||
{
|
|
||||||
number_to_chars_bigendian (buf, val, n);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
md_apply_fix (fixS * fixP, valueT * val, segT seg ATTRIBUTE_UNUSED)
|
|
||||||
{
|
|
||||||
char *buf = fixP->fx_where + fixP->fx_frag->fr_literal;
|
|
||||||
long t_val;
|
|
||||||
|
|
||||||
t_val = (long) *val;
|
|
||||||
|
|
||||||
#if DEBUG
|
|
||||||
printf ("md_apply_fix val:%x\n", t_val);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
fixP->fx_addnumber = t_val; /* Remember value for emit_reloc. */
|
|
||||||
|
|
||||||
switch (fixP->fx_r_type)
|
|
||||||
{
|
|
||||||
case BFD_RELOC_32: /* XXXXXXXX pattern in a word. */
|
|
||||||
#if DEBUG
|
|
||||||
printf ("reloc_const: val=%x\n", t_val);
|
|
||||||
#endif
|
|
||||||
buf[0] = t_val >> 24;
|
|
||||||
buf[1] = t_val >> 16;
|
|
||||||
buf[2] = t_val >> 8;
|
|
||||||
buf[3] = t_val;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case BFD_RELOC_16: /* XXXX0000 pattern in a word. */
|
|
||||||
#if DEBUG
|
|
||||||
printf ("reloc_const: val=%x\n", t_val);
|
|
||||||
#endif
|
|
||||||
buf[0] = t_val >> 8;
|
|
||||||
buf[1] = t_val;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case BFD_RELOC_8: /* XX000000 pattern in a word. */
|
|
||||||
#if DEBUG
|
|
||||||
printf ("reloc_const: val=%x\n", t_val);
|
|
||||||
#endif
|
|
||||||
buf[0] = t_val;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case BFD_RELOC_LO16: /* 0000XXXX pattern in a word. */
|
|
||||||
#if DEBUG
|
|
||||||
printf ("reloc_const: val=%x\n", t_val);
|
|
||||||
#endif
|
|
||||||
buf[2] = t_val >> 8; /* Holds bits 0000XXXX. */
|
|
||||||
buf[3] = t_val;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case BFD_RELOC_HI16: /* 0000XXXX pattern in a word. */
|
|
||||||
#if DEBUG
|
|
||||||
printf ("reloc_consth: val=%x\n", t_val);
|
|
||||||
#endif
|
|
||||||
buf[2] = t_val >> 24; /* Holds bits XXXX0000. */
|
|
||||||
buf[3] = t_val >> 16;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case BFD_RELOC_32_GOT_PCREL: /* 0000XXXX pattern in a word. */
|
|
||||||
if (!fixP->fx_done)
|
|
||||||
;
|
|
||||||
else if (fixP->fx_pcrel)
|
|
||||||
{
|
|
||||||
long v = t_val >> 28;
|
|
||||||
|
|
||||||
if (v != 0 && v != -1)
|
|
||||||
as_bad_where (fixP->fx_file, fixP->fx_line,
|
|
||||||
_("call/jmp target out of range (2)"));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
/* This case was supposed to be handled in machine_ip. */
|
|
||||||
abort ();
|
|
||||||
|
|
||||||
buf[0] |= (t_val >> 26) & 0x03; /* Holds bits 0FFFFFFC of address. */
|
|
||||||
buf[1] = t_val >> 18;
|
|
||||||
buf[2] = t_val >> 10;
|
|
||||||
buf[3] = t_val >> 2;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case BFD_RELOC_VTABLE_INHERIT:
|
|
||||||
case BFD_RELOC_VTABLE_ENTRY:
|
|
||||||
fixP->fx_done = 0;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case BFD_RELOC_NONE:
|
|
||||||
default:
|
|
||||||
as_bad (_("bad relocation type: 0x%02x"), fixP->fx_r_type);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fixP->fx_addsy == (symbolS *) NULL)
|
|
||||||
fixP->fx_done = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Should never be called for or32. */
|
|
||||||
|
|
||||||
void
|
|
||||||
md_create_short_jump (char * ptr ATTRIBUTE_UNUSED,
|
|
||||||
addressT from_addr ATTRIBUTE_UNUSED,
|
|
||||||
addressT to_addr ATTRIBUTE_UNUSED,
|
|
||||||
fragS * frag ATTRIBUTE_UNUSED,
|
|
||||||
symbolS * to_symbol ATTRIBUTE_UNUSED)
|
|
||||||
{
|
|
||||||
as_fatal ("or32_create_short_jmp\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Should never be called for or32. */
|
|
||||||
|
|
||||||
void
|
|
||||||
md_convert_frag (bfd * headers ATTRIBUTE_UNUSED,
|
|
||||||
segT seg ATTRIBUTE_UNUSED,
|
|
||||||
fragS * fragP ATTRIBUTE_UNUSED)
|
|
||||||
{
|
|
||||||
as_fatal ("or32_convert_frag\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Should never be called for or32. */
|
|
||||||
|
|
||||||
void
|
|
||||||
md_create_long_jump (char * ptr ATTRIBUTE_UNUSED,
|
|
||||||
addressT from_addr ATTRIBUTE_UNUSED,
|
|
||||||
addressT to_addr ATTRIBUTE_UNUSED,
|
|
||||||
fragS * frag ATTRIBUTE_UNUSED,
|
|
||||||
symbolS * to_symbol ATTRIBUTE_UNUSED)
|
|
||||||
{
|
|
||||||
as_fatal ("or32_create_long_jump\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Should never be called for or32. */
|
|
||||||
|
|
||||||
int
|
|
||||||
md_estimate_size_before_relax (fragS * fragP ATTRIBUTE_UNUSED,
|
|
||||||
segT segtype ATTRIBUTE_UNUSED)
|
|
||||||
{
|
|
||||||
as_fatal ("or32_estimate_size_before_relax\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Translate internal representation of relocation info to target format.
|
|
||||||
|
|
||||||
On sparc/29k: first 4 bytes are normal unsigned long address, next three
|
|
||||||
bytes are index, most sig. byte first. Byte 7 is broken up with
|
|
||||||
bit 7 as external, bits 6 & 5 unused, and the lower
|
|
||||||
five bits as relocation type. Next 4 bytes are long addend. */
|
|
||||||
/* Thanx and a tip of the hat to Michael Bloom, mb@ttidca.tti.com. */
|
|
||||||
|
|
||||||
#ifdef OBJ_AOUT
|
|
||||||
void
|
|
||||||
tc_aout_fix_to_chars (char *where,
|
|
||||||
fixS *fixP,
|
|
||||||
relax_addressT segment_address_in_file)
|
|
||||||
{
|
|
||||||
long r_symbolnum;
|
|
||||||
|
|
||||||
#if DEBUG
|
|
||||||
printf ("tc_aout_fix_to_chars\n");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
know (fixP->fx_r_type < BFD_RELOC_NONE);
|
|
||||||
know (fixP->fx_addsy != NULL);
|
|
||||||
|
|
||||||
md_number_to_chars
|
|
||||||
(where,
|
|
||||||
fixP->fx_frag->fr_address + fixP->fx_where - segment_address_in_file,
|
|
||||||
4);
|
|
||||||
|
|
||||||
r_symbolnum = (S_IS_DEFINED (fixP->fx_addsy)
|
|
||||||
? S_GET_TYPE (fixP->fx_addsy)
|
|
||||||
: fixP->fx_addsy->sy_number);
|
|
||||||
|
|
||||||
where[4] = (r_symbolnum >> 16) & 0x0ff;
|
|
||||||
where[5] = (r_symbolnum >> 8) & 0x0ff;
|
|
||||||
where[6] = r_symbolnum & 0x0ff;
|
|
||||||
where[7] = (((!S_IS_DEFINED (fixP->fx_addsy)) << 7) & 0x80) | (0 & 0x60) | (fixP->fx_r_type & 0x1F);
|
|
||||||
|
|
||||||
/* Also easy. */
|
|
||||||
md_number_to_chars (&where[8], fixP->fx_addnumber, 4);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* OBJ_AOUT */
|
|
||||||
|
|
||||||
const char *md_shortopts = "";
|
|
||||||
|
|
||||||
struct option md_longopts[] =
|
|
||||||
{
|
|
||||||
{ NULL, no_argument, NULL, 0 }
|
|
||||||
};
|
|
||||||
size_t md_longopts_size = sizeof (md_longopts);
|
|
||||||
|
|
||||||
int
|
|
||||||
md_parse_option (int c ATTRIBUTE_UNUSED, char * arg ATTRIBUTE_UNUSED)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
md_show_usage (FILE * stream ATTRIBUTE_UNUSED)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/* This is called when a line is unrecognized. This is used to handle
|
|
||||||
definitions of or32 style local labels. */
|
|
||||||
|
|
||||||
int
|
|
||||||
or32_unrecognized_line (int c)
|
|
||||||
{
|
|
||||||
int lab;
|
|
||||||
char *s;
|
|
||||||
|
|
||||||
if (c != '$'
|
|
||||||
|| ! ISDIGIT ((unsigned char) input_line_pointer[0]))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
s = input_line_pointer;
|
|
||||||
|
|
||||||
lab = 0;
|
|
||||||
while (ISDIGIT ((unsigned char) *s))
|
|
||||||
{
|
|
||||||
lab = lab * 10 + *s - '0';
|
|
||||||
++s;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (*s != ':')
|
|
||||||
/* Not a label definition. */
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
if (dollar_label_defined (lab))
|
|
||||||
{
|
|
||||||
as_bad (_("label \"$%d\" redefined"), lab);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
define_dollar_label (lab);
|
|
||||||
colon (dollar_label_name (lab, 0));
|
|
||||||
input_line_pointer = s + 1;
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Default the values of symbols known that should be "predefined". We
|
|
||||||
don't bother to predefine them unless you actually use one, since there
|
|
||||||
are a lot of them. */
|
|
||||||
|
|
||||||
symbolS *
|
|
||||||
md_undefined_symbol (char *name ATTRIBUTE_UNUSED)
|
|
||||||
{
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Parse an operand that is machine-specific. */
|
|
||||||
|
|
||||||
void
|
|
||||||
md_operand (expressionS *expressionP)
|
|
||||||
{
|
|
||||||
#if DEBUG
|
|
||||||
printf (" md_operand(input_line_pointer = %s)\n", input_line_pointer);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (input_line_pointer[0] == REGISTER_PREFIX && input_line_pointer[1] == 'r')
|
|
||||||
{
|
|
||||||
/* We have a numeric register expression. No biggy. */
|
|
||||||
input_line_pointer += 2; /* Skip %r */
|
|
||||||
(void) expression (expressionP);
|
|
||||||
|
|
||||||
if (expressionP->X_op != O_constant
|
|
||||||
|| expressionP->X_add_number > 255)
|
|
||||||
as_bad (_("Invalid expression after %%%%\n"));
|
|
||||||
expressionP->X_op = O_register;
|
|
||||||
}
|
|
||||||
else if (input_line_pointer[0] == '&')
|
|
||||||
{
|
|
||||||
/* We are taking the 'address' of a register...this one is not
|
|
||||||
in the manual, but it *is* in traps/fpsymbol.h! What they
|
|
||||||
seem to want is the register number, as an absolute number. */
|
|
||||||
input_line_pointer++; /* Skip & */
|
|
||||||
(void) expression (expressionP);
|
|
||||||
|
|
||||||
if (expressionP->X_op != O_register)
|
|
||||||
as_bad (_("invalid register in & expression"));
|
|
||||||
else
|
|
||||||
expressionP->X_op = O_constant;
|
|
||||||
}
|
|
||||||
else if (input_line_pointer[0] == '$'
|
|
||||||
&& ISDIGIT ((unsigned char) input_line_pointer[1]))
|
|
||||||
{
|
|
||||||
long lab;
|
|
||||||
char *name;
|
|
||||||
symbolS *sym;
|
|
||||||
|
|
||||||
/* This is a local label. */
|
|
||||||
++input_line_pointer;
|
|
||||||
lab = (long) get_absolute_expression ();
|
|
||||||
|
|
||||||
if (dollar_label_defined (lab))
|
|
||||||
{
|
|
||||||
name = dollar_label_name (lab, 0);
|
|
||||||
sym = symbol_find (name);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
name = dollar_label_name (lab, 1);
|
|
||||||
sym = symbol_find_or_make (name);
|
|
||||||
}
|
|
||||||
|
|
||||||
expressionP->X_op = O_symbol;
|
|
||||||
expressionP->X_add_symbol = sym;
|
|
||||||
expressionP->X_add_number = 0;
|
|
||||||
}
|
|
||||||
else if (input_line_pointer[0] == '$')
|
|
||||||
{
|
|
||||||
char *s;
|
|
||||||
char type;
|
|
||||||
int fieldnum, fieldlimit;
|
|
||||||
LITTLENUM_TYPE floatbuf[8];
|
|
||||||
|
|
||||||
/* $float(), $doubleN(), or $extendN() convert floating values
|
|
||||||
to integers. */
|
|
||||||
s = input_line_pointer;
|
|
||||||
|
|
||||||
++s;
|
|
||||||
|
|
||||||
fieldnum = 0;
|
|
||||||
if (strncmp (s, "double", sizeof "double" - 1) == 0)
|
|
||||||
{
|
|
||||||
s += sizeof "double" - 1;
|
|
||||||
type = 'd';
|
|
||||||
fieldlimit = 2;
|
|
||||||
}
|
|
||||||
else if (strncmp (s, "float", sizeof "float" - 1) == 0)
|
|
||||||
{
|
|
||||||
s += sizeof "float" - 1;
|
|
||||||
type = 'f';
|
|
||||||
fieldlimit = 1;
|
|
||||||
}
|
|
||||||
else if (strncmp (s, "extend", sizeof "extend" - 1) == 0)
|
|
||||||
{
|
|
||||||
s += sizeof "extend" - 1;
|
|
||||||
type = 'x';
|
|
||||||
fieldlimit = 4;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (ISDIGIT (*s))
|
|
||||||
{
|
|
||||||
fieldnum = *s - '0';
|
|
||||||
++s;
|
|
||||||
}
|
|
||||||
if (fieldnum >= fieldlimit)
|
|
||||||
return;
|
|
||||||
|
|
||||||
SKIP_WHITESPACE ();
|
|
||||||
if (*s != '(')
|
|
||||||
return;
|
|
||||||
++s;
|
|
||||||
SKIP_WHITESPACE ();
|
|
||||||
|
|
||||||
s = atof_ieee (s, type, floatbuf);
|
|
||||||
if (s == NULL)
|
|
||||||
return;
|
|
||||||
s = s;
|
|
||||||
|
|
||||||
SKIP_WHITESPACE ();
|
|
||||||
if (*s != ')')
|
|
||||||
return;
|
|
||||||
++s;
|
|
||||||
SKIP_WHITESPACE ();
|
|
||||||
|
|
||||||
input_line_pointer = s;
|
|
||||||
expressionP->X_op = O_constant;
|
|
||||||
expressionP->X_unsigned = 1;
|
|
||||||
expressionP->X_add_number = ((floatbuf[fieldnum * 2]
|
|
||||||
<< LITTLENUM_NUMBER_OF_BITS)
|
|
||||||
+ floatbuf[fieldnum * 2 + 1]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Round up a section size to the appropriate boundary. */
|
|
||||||
|
|
||||||
valueT
|
|
||||||
md_section_align (segT segment ATTRIBUTE_UNUSED, valueT size ATTRIBUTE_UNUSED)
|
|
||||||
{
|
|
||||||
return size; /* Byte alignment is fine. */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Exactly what point is a PC-relative offset relative TO?
|
|
||||||
On the 29000, they're relative to the address of the instruction,
|
|
||||||
which we have set up as the address of the fixup too. */
|
|
||||||
|
|
||||||
long
|
|
||||||
md_pcrel_from (fixS *fixP)
|
|
||||||
{
|
|
||||||
return fixP->fx_where + fixP->fx_frag->fr_address;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Generate a reloc for a fixup. */
|
|
||||||
|
|
||||||
arelent *
|
|
||||||
tc_gen_reloc (asection *seg ATTRIBUTE_UNUSED, fixS *fixp)
|
|
||||||
{
|
|
||||||
arelent *reloc;
|
|
||||||
|
|
||||||
reloc = xmalloc (sizeof (arelent));
|
|
||||||
reloc->sym_ptr_ptr = xmalloc (sizeof (asymbol *));
|
|
||||||
*reloc->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
|
|
||||||
reloc->address = fixp->fx_frag->fr_address + fixp->fx_where;
|
|
||||||
/* reloc->address = fixp->fx_frag->fr_address + fixp->fx_where + fixp->fx_addnumber;*/
|
|
||||||
reloc->howto = bfd_reloc_type_lookup (stdoutput, fixp->fx_r_type);
|
|
||||||
|
|
||||||
if (reloc->howto == (reloc_howto_type *) NULL)
|
|
||||||
{
|
|
||||||
as_bad_where (fixp->fx_file, fixp->fx_line,
|
|
||||||
_("reloc %d not supported by object file format"),
|
|
||||||
(int) fixp->fx_r_type);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fixp->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
|
|
||||||
reloc->address = fixp->fx_offset;
|
|
||||||
|
|
||||||
reloc->addend = fixp->fx_addnumber;
|
|
||||||
return reloc;
|
|
||||||
}
|
|
@ -1,56 +0,0 @@
|
|||||||
/* tc-or32.h -- Assemble for the OpenRISC 1000.
|
|
||||||
Copyright (C) 2002-2014 Free Software Foundation, Inc.
|
|
||||||
Contributed by Damjan Lampret <lampret@opencores.org>.
|
|
||||||
Based upon a29k port.
|
|
||||||
|
|
||||||
This file is part of GAS, the GNU Assembler.
|
|
||||||
|
|
||||||
GAS is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 3, or (at your option)
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
GAS is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with GAS; see the file COPYING. If not, write to
|
|
||||||
the Free Software Foundation, 51 Franklin Street - Fifth Floor,
|
|
||||||
Boston, MA 02110-1301, USA. */
|
|
||||||
|
|
||||||
#define TC_OR32
|
|
||||||
|
|
||||||
#define TARGET_BYTES_BIG_ENDIAN 1
|
|
||||||
|
|
||||||
#define LEX_DOLLAR 1
|
|
||||||
|
|
||||||
#ifdef OBJ_ELF
|
|
||||||
#define TARGET_FORMAT "elf32-or32"
|
|
||||||
#define TARGET_ARCH bfd_arch_or32
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef OBJ_COFF
|
|
||||||
#define TARGET_FORMAT "coff-or32-big"
|
|
||||||
#define reloc_type int
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define tc_unrecognized_line(c) or32_unrecognized_line (c)
|
|
||||||
|
|
||||||
extern int or32_unrecognized_line (int);
|
|
||||||
|
|
||||||
#define tc_coff_symbol_emit_hook(a) ; /* Not used. */
|
|
||||||
|
|
||||||
#define COFF_MAGIC SIPFBOMAGIC
|
|
||||||
|
|
||||||
/* No shared lib support, so we don't need to ensure externally
|
|
||||||
visible symbols can be overridden. */
|
|
||||||
#define EXTERN_FORCE_RELOC 0
|
|
||||||
|
|
||||||
#ifdef OBJ_ELF
|
|
||||||
/* Values passed to md_apply_fix don't include the symbol value. */
|
|
||||||
#define MD_APPLY_SYM_VALUE(FIX) 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define ZERO_BASED_SEGMENTS
|
|
4
gas/configure
vendored
4
gas/configure
vendored
@ -12150,7 +12150,7 @@ _ACEOF
|
|||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
|
|
||||||
epiphany | fr30 | ip2k | iq2000 | lm32 | m32r | openrisc)
|
epiphany | fr30 | ip2k | iq2000 | lm32 | m32r | or1k)
|
||||||
using_cgen=yes
|
using_cgen=yes
|
||||||
;;
|
;;
|
||||||
|
|
||||||
@ -12426,6 +12426,8 @@ esac
|
|||||||
cgen_cpu_prefix=""
|
cgen_cpu_prefix=""
|
||||||
if test $using_cgen = yes ; then
|
if test $using_cgen = yes ; then
|
||||||
case ${target_cpu} in
|
case ${target_cpu} in
|
||||||
|
or1knd)
|
||||||
|
cgen_cpu_prefix=or1k ;;
|
||||||
*) cgen_cpu_prefix=${target_cpu} ;;
|
*) cgen_cpu_prefix=${target_cpu} ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
@ -321,7 +321,7 @@ changequote([,])dnl
|
|||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
|
|
||||||
epiphany | fr30 | ip2k | iq2000 | lm32 | m32r | openrisc)
|
epiphany | fr30 | ip2k | iq2000 | lm32 | m32r | or1k)
|
||||||
using_cgen=yes
|
using_cgen=yes
|
||||||
;;
|
;;
|
||||||
|
|
||||||
@ -568,6 +568,8 @@ esac
|
|||||||
cgen_cpu_prefix=""
|
cgen_cpu_prefix=""
|
||||||
if test $using_cgen = yes ; then
|
if test $using_cgen = yes ; then
|
||||||
case ${target_cpu} in
|
case ${target_cpu} in
|
||||||
|
or1knd)
|
||||||
|
cgen_cpu_prefix=or1k ;;
|
||||||
*) cgen_cpu_prefix=${target_cpu} ;;
|
*) cgen_cpu_prefix=${target_cpu} ;;
|
||||||
esac
|
esac
|
||||||
AC_SUBST(cgen_cpu_prefix)
|
AC_SUBST(cgen_cpu_prefix)
|
||||||
|
@ -81,7 +81,7 @@ case ${cpu} in
|
|||||||
mt) cpu_type=mt endian=big ;;
|
mt) cpu_type=mt endian=big ;;
|
||||||
nds32be) cpu_type=nds32 endian=big ;;
|
nds32be) cpu_type=nds32 endian=big ;;
|
||||||
nds32le) cpu_type=nds32 endian=little ;;
|
nds32le) cpu_type=nds32 endian=little ;;
|
||||||
or32*) cpu_type=or32 endian=big ;;
|
or1k* | or1knd*) cpu_type=or1k endian=big ;;
|
||||||
pjl*) cpu_type=pj endian=little ;;
|
pjl*) cpu_type=pj endian=little ;;
|
||||||
pj*) cpu_type=pj endian=big ;;
|
pj*) cpu_type=pj endian=big ;;
|
||||||
powerpc*le*) cpu_type=ppc endian=little ;;
|
powerpc*le*) cpu_type=ppc endian=little ;;
|
||||||
@ -357,10 +357,8 @@ case ${generic_target} in
|
|||||||
ns32k-pc532-lites*) fmt=aout em=nbsd532 ;;
|
ns32k-pc532-lites*) fmt=aout em=nbsd532 ;;
|
||||||
ns32k-*-*n*bsd*) fmt=aout em=nbsd532 ;;
|
ns32k-*-*n*bsd*) fmt=aout em=nbsd532 ;;
|
||||||
|
|
||||||
openrisc-*-*) fmt=elf ;;
|
or1k-*-elf | or1knd-*-elf) fmt=elf endian=big ;;
|
||||||
|
or1k-*-linux* | or1knd-*-linux*) fmt=elf em=linux endian=big ;;
|
||||||
or32-*-rtems*) fmt=elf ;;
|
|
||||||
or32-*-elf) fmt=elf ;;
|
|
||||||
|
|
||||||
pj*) fmt=elf ;;
|
pj*) fmt=elf ;;
|
||||||
|
|
||||||
@ -474,7 +472,7 @@ case ${generic_target} in
|
|||||||
esac
|
esac
|
||||||
|
|
||||||
case ${cpu_type} in
|
case ${cpu_type} in
|
||||||
aarch64 | alpha | arm | i386 | ia64 | microblaze | mips | ns32k | pdp11 | ppc | sparc | z80 | z8k)
|
aarch64 | alpha | arm | i386 | ia64 | microblaze | mips | ns32k | or1k | or1knd | pdp11 | ppc | sparc | z80 | z8k)
|
||||||
bfd_gas=yes
|
bfd_gas=yes
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
@ -4350,7 +4350,7 @@ required alignment; this can be useful if you want the alignment to be filled
|
|||||||
with no-op instructions when appropriate.
|
with no-op instructions when appropriate.
|
||||||
|
|
||||||
The way the required alignment is specified varies from system to system.
|
The way the required alignment is specified varies from system to system.
|
||||||
For the arc, hppa, i386 using ELF, i860, iq2000, m68k, or32,
|
For the arc, hppa, i386 using ELF, i860, iq2000, m68k, or1k,
|
||||||
s390, sparc, tic4x, tic80 and xtensa, the first expression is the
|
s390, sparc, tic4x, tic80 and xtensa, the first expression is the
|
||||||
alignment request in bytes. For example @samp{.align 8} advances
|
alignment request in bytes. For example @samp{.align 8} advances
|
||||||
the location counter until it is a multiple of 8. If the location counter
|
the location counter until it is a multiple of 8. If the location counter
|
||||||
|
@ -1,3 +1,23 @@
|
|||||||
|
2014-04-22 Christian Svensson <blue@cmd.nu>
|
||||||
|
|
||||||
|
* Makefile.am: Remove openrisc and or32 support. Add support for or1k.
|
||||||
|
* gas/all/gas.exp: Likewise.
|
||||||
|
* gas/elf/warn-2.s: Likewise.
|
||||||
|
* gas/lns/lns.exp: Likewise.
|
||||||
|
* gas/lns/lns-common-1-or1k.s: New file.
|
||||||
|
* gas/or1k/allinsn.d: New file.
|
||||||
|
* gas/or1k/allinsn.exp: New file.
|
||||||
|
* gas/or1k/allinsn.s: New file.
|
||||||
|
* gas/openrisc/addi.d: Delete.
|
||||||
|
* gas/openrisc/addi.s: Delete.
|
||||||
|
* gas/openrisc/allinsn.d: Delete.
|
||||||
|
* gas/openrisc/allinsn.exp: Delete.
|
||||||
|
* gas/openrisc/allinsn.s: Delete.
|
||||||
|
* gas/openrisc/lohi.d: Delete.
|
||||||
|
* gas/openrisc/lohi.s: Delete.
|
||||||
|
* gas/openrisc/store.d: Delete.
|
||||||
|
* gas/openrisc/store.s: Delete.
|
||||||
|
|
||||||
2014-04-10 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com>
|
2014-04-10 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com>
|
||||||
|
|
||||||
* gas/avr/diffreloc_withrelax.d: New testcase.
|
* gas/avr/diffreloc_withrelax.d: New testcase.
|
||||||
|
@ -163,7 +163,7 @@ case $target_triplet in {
|
|||||||
# These targets fail redef3 because section contents for the
|
# These targets fail redef3 because section contents for the
|
||||||
# word referencing the .comm sym is not zero and/or its reloc
|
# word referencing the .comm sym is not zero and/or its reloc
|
||||||
# has a non-zero addend. Relaxing the test would hide real
|
# has a non-zero addend. Relaxing the test would hide real
|
||||||
# failures such as or32-elf.
|
# failures.
|
||||||
setup_xfail "bfin-*-*" "i\[3-7\]86-*-*coff" \
|
setup_xfail "bfin-*-*" "i\[3-7\]86-*-*coff" \
|
||||||
"i\[3-7\]86-*-*pe" "i\[3-7\]86-*-go32*" \
|
"i\[3-7\]86-*-*pe" "i\[3-7\]86-*-go32*" \
|
||||||
"i\[3-7\]86-*-cygwin*" "i\[3-7\]86-*-mingw*" "x86_64-*-mingw*"
|
"i\[3-7\]86-*-cygwin*" "i\[3-7\]86-*-mingw*" "x86_64-*-mingw*"
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
;# { dg-do assemble }
|
;# { dg-do assemble }
|
||||||
;# { dg-options "--gdwarf2 --defsym nop_type=0" }
|
;# { dg-options "--gdwarf2 --defsym nop_type=0" }
|
||||||
;# { dg-options "--gdwarf2 --defsym nop_type=1" { target ia64-*-* } }
|
;# { dg-options "--gdwarf2 --defsym nop_type=1" { target ia64-*-* } }
|
||||||
;# { dg-options "--gdwarf2 --defsym nop_type=2" { target or32-*-* openrisc-*-* } }
|
;# { dg-options "--gdwarf2 --defsym nop_type=2" { target or1k*-*-* } }
|
||||||
;# { dg-options "--gdwarf2 --defsym nop_type=3" { target i370-*-* } }
|
;# { dg-options "--gdwarf2 --defsym nop_type=3" { target i370-*-* } }
|
||||||
|
|
||||||
.offset 40
|
.offset 40
|
||||||
@ -20,4 +20,4 @@
|
|||||||
.endif
|
.endif
|
||||||
.endif
|
.endif
|
||||||
|
|
||||||
;# { dg-warning "Warning: dwarf line number information for .* ignored" "" { xfail i370-*-* mcore-*-* mn10200-*-* moxie-*-* openrisc-*-* or32-*-* v850*-*-* } 0 }
|
;# { dg-warning "Warning: dwarf line number information for .* ignored" "" { xfail i370-*-* mcore-*-* mn10200-*-* moxie-*-* v850*-*-* } 0 }
|
||||||
|
25
gas/testsuite/gas/lns/lns-common-1-or1k.s
Normal file
25
gas/testsuite/gas/lns/lns-common-1-or1k.s
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
.file 1 "foo.c"
|
||||||
|
.loc 1 1
|
||||||
|
l.nop
|
||||||
|
l.nop
|
||||||
|
.loc 1 2 3
|
||||||
|
l.nop
|
||||||
|
l.nop
|
||||||
|
.loc 1 3 prologue_end
|
||||||
|
l.nop
|
||||||
|
l.nop
|
||||||
|
.loc 1 4 0 epilogue_begin
|
||||||
|
l.nop
|
||||||
|
l.nop
|
||||||
|
.loc 1 5 isa 1 basic_block
|
||||||
|
l.nop
|
||||||
|
l.nop
|
||||||
|
.loc 1 6 is_stmt 0
|
||||||
|
l.nop
|
||||||
|
l.nop
|
||||||
|
.loc 1 7 is_stmt 1
|
||||||
|
l.nop
|
||||||
|
l.nop
|
||||||
|
.loc 1 7 discriminator 1
|
||||||
|
l.nop
|
||||||
|
l.nop
|
@ -28,7 +28,6 @@ if {
|
|||||||
![istarget i370-*-*]
|
![istarget i370-*-*]
|
||||||
&& ![istarget i960-*-*]
|
&& ![istarget i960-*-*]
|
||||||
&& ![istarget mcore-*-*]
|
&& ![istarget mcore-*-*]
|
||||||
&& ![istarget or32-*-*]
|
|
||||||
&& ![istarget rx-*-*]
|
&& ![istarget rx-*-*]
|
||||||
&& ![istarget s390*-*-*]
|
&& ![istarget s390*-*-*]
|
||||||
} {
|
} {
|
||||||
@ -44,6 +43,8 @@ if {
|
|||||||
run_dump_test "lns-big-delta"
|
run_dump_test "lns-big-delta"
|
||||||
} elseif { [istarget ia64*-*-*] } {
|
} elseif { [istarget ia64*-*-*] } {
|
||||||
run_dump_test "lns-common-1" { { source "lns-common-1-ia64.s" } }
|
run_dump_test "lns-common-1" { { source "lns-common-1-ia64.s" } }
|
||||||
|
} elseif { [istarget or1k*-*-*] } {
|
||||||
|
run_dump_test "lns-common-1" { { source "lns-common-1-or1k.s" } }
|
||||||
} else {
|
} else {
|
||||||
run_dump_test "lns-common-1"
|
run_dump_test "lns-common-1"
|
||||||
}
|
}
|
||||||
|
@ -1,10 +0,0 @@
|
|||||||
#as:
|
|
||||||
#objdump: -dr
|
|
||||||
#name: addi
|
|
||||||
|
|
||||||
.*: +file format .*
|
|
||||||
|
|
||||||
Disassembly of section .text:
|
|
||||||
|
|
||||||
00000000 <l_addi>:
|
|
||||||
0: 94 22 ff ff l.addi r1,r2,-1
|
|
@ -1,4 +0,0 @@
|
|||||||
.text
|
|
||||||
.global l_addi
|
|
||||||
l_addi:
|
|
||||||
l.addi r1, r2, -1
|
|
@ -1,201 +0,0 @@
|
|||||||
#as:
|
|
||||||
#objdump: -dr
|
|
||||||
#name: allinsn
|
|
||||||
|
|
||||||
.*: +file format .*
|
|
||||||
|
|
||||||
Disassembly of section .text:
|
|
||||||
|
|
||||||
00000000 <l_j>:
|
|
||||||
0: 00 00 00 00 l.j 0 <l_j>
|
|
||||||
0: R_OPENRISC_INSN_ABS_26 .text
|
|
||||||
|
|
||||||
00000004 <l_jal>:
|
|
||||||
4: 04 00 00 00 l.jal 0 <l_j>
|
|
||||||
4: R_OPENRISC_INSN_ABS_26 .text
|
|
||||||
|
|
||||||
00000008 <l_jr>:
|
|
||||||
8: 14 00 00 00 l.jr r0
|
|
||||||
|
|
||||||
0000000c <l_jalr>:
|
|
||||||
c: 14 20 00 00 l.jalr r0
|
|
||||||
|
|
||||||
00000010 <l_bal>:
|
|
||||||
10: 0b ff ff fc l.bal 0 <l_j>
|
|
||||||
|
|
||||||
00000014 <l_bnf>:
|
|
||||||
14: 0f ff ff fb l.bnf 0 <l_j>
|
|
||||||
|
|
||||||
00000018 <l_bf>:
|
|
||||||
18: 13 ff ff fa l.bf 0 <l_j>
|
|
||||||
|
|
||||||
0000001c <l_brk>:
|
|
||||||
1c: 17 00 00 00 l.brk 0x0
|
|
||||||
|
|
||||||
00000020 <l_rfe>:
|
|
||||||
20: 14 40 00 00 l.rfe r0
|
|
||||||
|
|
||||||
00000024 <l_sys>:
|
|
||||||
24: 16 00 00 00 l.sys 0x0
|
|
||||||
|
|
||||||
00000028 <l_nop>:
|
|
||||||
28: 15 00 00 00 l.nop
|
|
||||||
|
|
||||||
0000002c <l_movhi>:
|
|
||||||
2c: 18 00 00 00 l.movhi r0,0
|
|
||||||
|
|
||||||
00000030 <l_mfsr>:
|
|
||||||
30: 1c 00 00 00 l.mfsr r0,r0
|
|
||||||
|
|
||||||
00000034 <l_mtsr>:
|
|
||||||
34: 40 00 00 00 l.mtsr r0,r0
|
|
||||||
|
|
||||||
00000038 <l_lw>:
|
|
||||||
38: 80 00 00 00 l.lw r0,0\(r0\)
|
|
||||||
|
|
||||||
0000003c <l_lbz>:
|
|
||||||
3c: 84 00 00 00 l.lbz r0,0\(r0\)
|
|
||||||
|
|
||||||
00000040 <l_lbs>:
|
|
||||||
40: 88 00 00 00 l.lbs r0,0\(r0\)
|
|
||||||
|
|
||||||
00000044 <l_lhz>:
|
|
||||||
44: 8c 00 00 00 l.lhz r0,0\(r0\)
|
|
||||||
|
|
||||||
00000048 <l_lhs>:
|
|
||||||
48: 90 00 00 00 l.lhs r0,0\(r0\)
|
|
||||||
|
|
||||||
0000004c <l_sw>:
|
|
||||||
4c: d4 00 00 00 l.sw 0\(r0\),r0
|
|
||||||
|
|
||||||
00000050 <l_sb>:
|
|
||||||
50: d8 00 00 00 l.sb 0\(r0\),r0
|
|
||||||
|
|
||||||
00000054 <l_sh>:
|
|
||||||
54: dc 00 00 00 l.sh 0\(r0\),r0
|
|
||||||
|
|
||||||
00000058 <l_sll>:
|
|
||||||
58: e0 00 00 08 l.sll r0,r0,r0
|
|
||||||
|
|
||||||
0000005c <l_slli>:
|
|
||||||
5c: b4 00 00 00 l.slli r0,r0,0x0
|
|
||||||
|
|
||||||
00000060 <l_srl>:
|
|
||||||
60: e0 00 00 28 l.srl r0,r0,r0
|
|
||||||
|
|
||||||
00000064 <l_srli>:
|
|
||||||
64: b4 00 00 20 l.srli r0,r0,0x0
|
|
||||||
|
|
||||||
00000068 <l_sra>:
|
|
||||||
68: e0 00 00 48 l.sra r0,r0,r0
|
|
||||||
|
|
||||||
0000006c <l_srai>:
|
|
||||||
6c: b4 00 00 40 l.srai r0,r0,0x0
|
|
||||||
|
|
||||||
00000070 <l_ror>:
|
|
||||||
70: e0 00 00 88 l.ror r0,r0,r0
|
|
||||||
|
|
||||||
00000074 <l_rori>:
|
|
||||||
74: b4 00 00 80 l.rori r0,r0,0x0
|
|
||||||
|
|
||||||
00000078 <l_add>:
|
|
||||||
78: e0 00 00 00 l.add r0,r0,r0
|
|
||||||
|
|
||||||
0000007c <l_addi>:
|
|
||||||
7c: 94 00 00 00 l.addi r0,r0,0
|
|
||||||
|
|
||||||
00000080 <l_sub>:
|
|
||||||
80: e0 00 00 02 l.sub r0,r0,r0
|
|
||||||
|
|
||||||
00000084 <l_subi>:
|
|
||||||
84: 9c 00 00 00 l.subi r0,r0,0
|
|
||||||
|
|
||||||
00000088 <l_and>:
|
|
||||||
88: e0 00 00 03 l.and r0,r0,r0
|
|
||||||
|
|
||||||
0000008c <l_andi>:
|
|
||||||
8c: a0 00 00 00 l.andi r0,r0,0
|
|
||||||
|
|
||||||
00000090 <l_or>:
|
|
||||||
90: e0 00 00 04 l.or r0,r0,r0
|
|
||||||
|
|
||||||
00000094 <l_ori>:
|
|
||||||
94: a4 00 00 00 l.ori r0,r0,0
|
|
||||||
|
|
||||||
00000098 <l_xor>:
|
|
||||||
98: e0 00 00 05 l.xor r0,r0,r0
|
|
||||||
|
|
||||||
0000009c <l_xori>:
|
|
||||||
9c: a8 00 00 00 l.xori r0,r0,0
|
|
||||||
|
|
||||||
000000a0 <l_mul>:
|
|
||||||
a0: e0 00 00 06 l.mul r0,r0,r0
|
|
||||||
|
|
||||||
000000a4 <l_muli>:
|
|
||||||
a4: ac 00 00 00 l.muli r0,r0,0
|
|
||||||
|
|
||||||
000000a8 <l_div>:
|
|
||||||
a8: e0 00 00 09 l.div r0,r0,r0
|
|
||||||
|
|
||||||
000000ac <l_divu>:
|
|
||||||
ac: e0 00 00 0a l.divu r0,r0,r0
|
|
||||||
|
|
||||||
000000b0 <l_sfgts>:
|
|
||||||
b0: e4 c0 00 00 l.sfgts r0,r0
|
|
||||||
|
|
||||||
000000b4 <l_sfgtu>:
|
|
||||||
b4: e4 40 00 00 l.sfgtu r0,r0
|
|
||||||
|
|
||||||
000000b8 <l_sfges>:
|
|
||||||
b8: e4 e0 00 00 l.sfges r0,r0
|
|
||||||
|
|
||||||
000000bc <l_sfgeu>:
|
|
||||||
bc: e4 60 00 00 l.sfgeu r0,r0
|
|
||||||
|
|
||||||
000000c0 <l_sflts>:
|
|
||||||
c0: e5 00 00 00 l.sflts r0,r0
|
|
||||||
|
|
||||||
000000c4 <l_sfltu>:
|
|
||||||
c4: e4 80 00 00 l.sfltu r0,r0
|
|
||||||
|
|
||||||
000000c8 <l_sfles>:
|
|
||||||
c8: e5 20 00 00 l.sfles r0,r0
|
|
||||||
|
|
||||||
000000cc <l_sfleu>:
|
|
||||||
cc: e4 a0 00 00 l.sfleu r0,r0
|
|
||||||
|
|
||||||
000000d0 <l_sfgtsi>:
|
|
||||||
d0: b8 c0 00 00 l.sfgtsi r0,0
|
|
||||||
|
|
||||||
000000d4 <l_sfgtui>:
|
|
||||||
d4: b8 40 00 00 l.sfgtui r0,0x0
|
|
||||||
|
|
||||||
000000d8 <l_sfgesi>:
|
|
||||||
d8: b8 e0 00 00 l.sfgesi r0,0
|
|
||||||
|
|
||||||
000000dc <l_sfgeui>:
|
|
||||||
dc: b8 60 00 00 l.sfgeui r0,0x0
|
|
||||||
|
|
||||||
000000e0 <l_sfltsi>:
|
|
||||||
e0: b9 00 00 00 l.sfltsi r0,0
|
|
||||||
|
|
||||||
000000e4 <l_sfltui>:
|
|
||||||
e4: b8 80 00 00 l.sfltui r0,0x0
|
|
||||||
|
|
||||||
000000e8 <l_sflesi>:
|
|
||||||
e8: b9 20 00 00 l.sflesi r0,0
|
|
||||||
|
|
||||||
000000ec <l_sfleui>:
|
|
||||||
ec: b8 a0 00 00 l.sfleui r0,0x0
|
|
||||||
|
|
||||||
000000f0 <l_sfeq>:
|
|
||||||
f0: e4 00 00 00 l.sfeq r0,r0
|
|
||||||
|
|
||||||
000000f4 <l_sfeqi>:
|
|
||||||
f4: b8 00 00 00 l.sfeqi r0,0
|
|
||||||
|
|
||||||
000000f8 <l_sfne>:
|
|
||||||
f8: e4 20 00 00 l.sfne r0,r0
|
|
||||||
|
|
||||||
000000fc <l_sfnei>:
|
|
||||||
fc: b8 20 00 00 l.sfnei r0,0
|
|
@ -1,24 +0,0 @@
|
|||||||
# Copyright (C) 2012-2014 Free Software Foundation, Inc.
|
|
||||||
|
|
||||||
# This program is free software; you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation; either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software
|
|
||||||
# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
|
|
||||||
# OpenRISC assembler testsuite.
|
|
||||||
|
|
||||||
if [istarget openrisc*-*-*] {
|
|
||||||
run_dump_test "allinsn"
|
|
||||||
run_dump_test "addi"
|
|
||||||
run_dump_test "lohi"
|
|
||||||
run_dump_test "store"
|
|
||||||
}
|
|
@ -1,260 +0,0 @@
|
|||||||
.data
|
|
||||||
foodata: .word 42
|
|
||||||
.text
|
|
||||||
footext:
|
|
||||||
.text
|
|
||||||
.global l_j
|
|
||||||
l_j:
|
|
||||||
l.j footext
|
|
||||||
.text
|
|
||||||
.global l_jal
|
|
||||||
l_jal:
|
|
||||||
l.jal footext
|
|
||||||
.text
|
|
||||||
.global l_jr
|
|
||||||
l_jr:
|
|
||||||
l.jr r0
|
|
||||||
.text
|
|
||||||
.global l_jalr
|
|
||||||
l_jalr:
|
|
||||||
l.jalr r0
|
|
||||||
.text
|
|
||||||
.global l_bal
|
|
||||||
l_bal:
|
|
||||||
l.bal footext
|
|
||||||
.text
|
|
||||||
.global l_bnf
|
|
||||||
l_bnf:
|
|
||||||
l.bnf footext
|
|
||||||
.text
|
|
||||||
.global l_bf
|
|
||||||
l_bf:
|
|
||||||
l.bf footext
|
|
||||||
.text
|
|
||||||
.global l_brk
|
|
||||||
l_brk:
|
|
||||||
l.brk 0
|
|
||||||
.text
|
|
||||||
.global l_rfe
|
|
||||||
l_rfe:
|
|
||||||
l.rfe r0
|
|
||||||
.text
|
|
||||||
.global l_sys
|
|
||||||
l_sys:
|
|
||||||
l.sys 0
|
|
||||||
.text
|
|
||||||
.global l_nop
|
|
||||||
l_nop:
|
|
||||||
l.nop
|
|
||||||
.text
|
|
||||||
.global l_movhi
|
|
||||||
l_movhi:
|
|
||||||
l.movhi r0,0
|
|
||||||
.text
|
|
||||||
.global l_mfsr
|
|
||||||
l_mfsr:
|
|
||||||
l.mfsr r0,r0
|
|
||||||
.text
|
|
||||||
.global l_mtsr
|
|
||||||
l_mtsr:
|
|
||||||
l.mtsr r0,r0
|
|
||||||
.text
|
|
||||||
.global l_lw
|
|
||||||
l_lw:
|
|
||||||
l.lw r0,0(r0)
|
|
||||||
.text
|
|
||||||
.global l_lbz
|
|
||||||
l_lbz:
|
|
||||||
l.lbz r0,0(r0)
|
|
||||||
.text
|
|
||||||
.global l_lbs
|
|
||||||
l_lbs:
|
|
||||||
l.lbs r0,0(r0)
|
|
||||||
.text
|
|
||||||
.global l_lhz
|
|
||||||
l_lhz:
|
|
||||||
l.lhz r0,0(r0)
|
|
||||||
.text
|
|
||||||
.global l_lhs
|
|
||||||
l_lhs:
|
|
||||||
l.lhs r0,0(r0)
|
|
||||||
.text
|
|
||||||
.global l_sw
|
|
||||||
l_sw:
|
|
||||||
l.sw 0(r0),r0
|
|
||||||
.text
|
|
||||||
.global l_sb
|
|
||||||
l_sb:
|
|
||||||
l.sb 0(r0),r0
|
|
||||||
.text
|
|
||||||
.global l_sh
|
|
||||||
l_sh:
|
|
||||||
l.sh 0(r0),r0
|
|
||||||
.text
|
|
||||||
.global l_sll
|
|
||||||
l_sll:
|
|
||||||
l.sll r0,r0,r0
|
|
||||||
.text
|
|
||||||
.global l_slli
|
|
||||||
l_slli:
|
|
||||||
l.slli r0,r0,0
|
|
||||||
.text
|
|
||||||
.global l_srl
|
|
||||||
l_srl:
|
|
||||||
l.srl r0,r0,r0
|
|
||||||
.text
|
|
||||||
.global l_srli
|
|
||||||
l_srli:
|
|
||||||
l.srli r0,r0,0
|
|
||||||
.text
|
|
||||||
.global l_sra
|
|
||||||
l_sra:
|
|
||||||
l.sra r0,r0,r0
|
|
||||||
.text
|
|
||||||
.global l_srai
|
|
||||||
l_srai:
|
|
||||||
l.srai r0,r0,0
|
|
||||||
.text
|
|
||||||
.global l_ror
|
|
||||||
l_ror:
|
|
||||||
l.ror r0,r0,r0
|
|
||||||
.text
|
|
||||||
.global l_rori
|
|
||||||
l_rori:
|
|
||||||
l.rori r0,r0,0
|
|
||||||
.text
|
|
||||||
.global l_add
|
|
||||||
l_add:
|
|
||||||
l.add r0,r0,r0
|
|
||||||
.text
|
|
||||||
.global l_addi
|
|
||||||
l_addi:
|
|
||||||
l.addi r0,r0,0
|
|
||||||
.text
|
|
||||||
.global l_sub
|
|
||||||
l_sub:
|
|
||||||
l.sub r0,r0,r0
|
|
||||||
.text
|
|
||||||
.global l_subi
|
|
||||||
l_subi:
|
|
||||||
l.subi r0,r0,0
|
|
||||||
.text
|
|
||||||
.global l_and
|
|
||||||
l_and:
|
|
||||||
l.and r0,r0,r0
|
|
||||||
.text
|
|
||||||
.global l_andi
|
|
||||||
l_andi:
|
|
||||||
l.andi r0,r0,0
|
|
||||||
.text
|
|
||||||
.global l_or
|
|
||||||
l_or:
|
|
||||||
l.or r0,r0,r0
|
|
||||||
.text
|
|
||||||
.global l_ori
|
|
||||||
l_ori:
|
|
||||||
l.ori r0,r0,0
|
|
||||||
.text
|
|
||||||
.global l_xor
|
|
||||||
l_xor:
|
|
||||||
l.xor r0,r0,r0
|
|
||||||
.text
|
|
||||||
.global l_xori
|
|
||||||
l_xori:
|
|
||||||
l.xori r0,r0,0
|
|
||||||
.text
|
|
||||||
.global l_mul
|
|
||||||
l_mul:
|
|
||||||
l.mul r0,r0,r0
|
|
||||||
.text
|
|
||||||
.global l_muli
|
|
||||||
l_muli:
|
|
||||||
l.muli r0,r0,0
|
|
||||||
.text
|
|
||||||
.global l_div
|
|
||||||
l_div:
|
|
||||||
l.div r0,r0,r0
|
|
||||||
.text
|
|
||||||
.global l_divu
|
|
||||||
l_divu:
|
|
||||||
l.divu r0,r0,r0
|
|
||||||
.text
|
|
||||||
.global l_sfgts
|
|
||||||
l_sfgts:
|
|
||||||
l.sfgts r0,r0
|
|
||||||
.text
|
|
||||||
.global l_sfgtu
|
|
||||||
l_sfgtu:
|
|
||||||
l.sfgtu r0,r0
|
|
||||||
.text
|
|
||||||
.global l_sfges
|
|
||||||
l_sfges:
|
|
||||||
l.sfges r0,r0
|
|
||||||
.text
|
|
||||||
.global l_sfgeu
|
|
||||||
l_sfgeu:
|
|
||||||
l.sfgeu r0,r0
|
|
||||||
.text
|
|
||||||
.global l_sflts
|
|
||||||
l_sflts:
|
|
||||||
l.sflts r0,r0
|
|
||||||
.text
|
|
||||||
.global l_sfltu
|
|
||||||
l_sfltu:
|
|
||||||
l.sfltu r0,r0
|
|
||||||
.text
|
|
||||||
.global l_sfles
|
|
||||||
l_sfles:
|
|
||||||
l.sfles r0,r0
|
|
||||||
.text
|
|
||||||
.global l_sfleu
|
|
||||||
l_sfleu:
|
|
||||||
l.sfleu r0,r0
|
|
||||||
.text
|
|
||||||
.global l_sfgtsi
|
|
||||||
l_sfgtsi:
|
|
||||||
l.sfgtsi r0,0
|
|
||||||
.text
|
|
||||||
.global l_sfgtui
|
|
||||||
l_sfgtui:
|
|
||||||
l.sfgtui r0,0
|
|
||||||
.text
|
|
||||||
.global l_sfgesi
|
|
||||||
l_sfgesi:
|
|
||||||
l.sfgesi r0,0
|
|
||||||
.text
|
|
||||||
.global l_sfgeui
|
|
||||||
l_sfgeui:
|
|
||||||
l.sfgeui r0,0
|
|
||||||
.text
|
|
||||||
.global l_sfltsi
|
|
||||||
l_sfltsi:
|
|
||||||
l.sfltsi r0,0
|
|
||||||
.text
|
|
||||||
.global l_sfltui
|
|
||||||
l_sfltui:
|
|
||||||
l.sfltui r0,0
|
|
||||||
.text
|
|
||||||
.global l_sflesi
|
|
||||||
l_sflesi:
|
|
||||||
l.sflesi r0,0
|
|
||||||
.text
|
|
||||||
.global l_sfleui
|
|
||||||
l_sfleui:
|
|
||||||
l.sfleui r0,0
|
|
||||||
.text
|
|
||||||
.global l_sfeq
|
|
||||||
l_sfeq:
|
|
||||||
l.sfeq r0,r0
|
|
||||||
.text
|
|
||||||
.global l_sfeqi
|
|
||||||
l_sfeqi:
|
|
||||||
l.sfeqi r0,0
|
|
||||||
.text
|
|
||||||
.global l_sfne
|
|
||||||
l_sfne:
|
|
||||||
l.sfne r0,r0
|
|
||||||
.text
|
|
||||||
.global l_sfnei
|
|
||||||
l_sfnei:
|
|
||||||
l.sfnei r0,0
|
|
@ -1,13 +0,0 @@
|
|||||||
#as:
|
|
||||||
#objdump: -dr
|
|
||||||
#name: lohi
|
|
||||||
|
|
||||||
.*: +file format .*
|
|
||||||
|
|
||||||
Disassembly of section .text:
|
|
||||||
|
|
||||||
00000000 <l_lo>:
|
|
||||||
0: 94 21 be ef l.addi r1,r1,-16657
|
|
||||||
|
|
||||||
00000004 <l_hi>:
|
|
||||||
4: 18 20 de ad l.movhi r1,-8531
|
|
@ -1,7 +0,0 @@
|
|||||||
.text
|
|
||||||
.global l_lo
|
|
||||||
l_lo:
|
|
||||||
l.addi r1, r1, lo(0xdeadbeef)
|
|
||||||
.global l_hi
|
|
||||||
l_hi:
|
|
||||||
l.movhi r1, hi(0xdeadbeef)
|
|
@ -1,13 +0,0 @@
|
|||||||
#as:
|
|
||||||
#objdump: -dr
|
|
||||||
#name: store
|
|
||||||
|
|
||||||
.*: +file format .*
|
|
||||||
|
|
||||||
Disassembly of section .text:
|
|
||||||
|
|
||||||
00000000 <l_sw>:
|
|
||||||
0: d7 e1 0f fc l.sw -4\(r1\),r1
|
|
||||||
|
|
||||||
00000004 <l_lw>:
|
|
||||||
4: 80 21 ff 9c l.lw r1,-100\(r1\)
|
|
@ -1,7 +0,0 @@
|
|||||||
.text
|
|
||||||
.global l_sw
|
|
||||||
l_sw:
|
|
||||||
l.sw -4(r1), r1
|
|
||||||
.global l_lw
|
|
||||||
l_lw:
|
|
||||||
l.lw r1, -100(r1)
|
|
689
gas/testsuite/gas/or1k/allinsn.d
Normal file
689
gas/testsuite/gas/or1k/allinsn.d
Normal file
@ -0,0 +1,689 @@
|
|||||||
|
#as:
|
||||||
|
#objdump: -dr
|
||||||
|
#name: allinsn
|
||||||
|
|
||||||
|
.*: +file format .*
|
||||||
|
|
||||||
|
|
||||||
|
Disassembly of section \.text:
|
||||||
|
|
||||||
|
00000000 <localtext>:
|
||||||
|
0: 15 00 00 00 l\.nop 0x0
|
||||||
|
|
||||||
|
00000004 <globaltext>:
|
||||||
|
4: 15 00 00 00 l\.nop 0x0
|
||||||
|
|
||||||
|
00000008 <l_j>:
|
||||||
|
8: 03 ff ff ff l\.j 4 <globaltext>
|
||||||
|
c: 00 00 00 01 l\.j 10 <l_j\+0x8>
|
||||||
|
10: 00 00 00 00 l\.j 10 <l_j\+0x8>
|
||||||
|
14: 03 ff ff fb l\.j 0 <localtext>
|
||||||
|
\.\.\.
|
||||||
|
18: R_OR1K_INSN_REL_26 \.data
|
||||||
|
1c: R_OR1K_INSN_REL_26 globaltext
|
||||||
|
20: R_OR1K_INSN_REL_26 globaldata
|
||||||
|
24: 03 ff ff f9 l\.j 8 <l_j>
|
||||||
|
28: 00 00 00 01 l\.j 2c <l_jal>
|
||||||
|
|
||||||
|
0000002c <l_jal>:
|
||||||
|
2c: 07 ff ff ff l\.jal 28 <l_j\+0x20>
|
||||||
|
30: 04 00 00 01 l\.jal 34 <l_jal\+0x8>
|
||||||
|
34: 04 00 00 00 l\.jal 34 <l_jal\+0x8>
|
||||||
|
38: 07 ff ff f2 l\.jal 0 <localtext>
|
||||||
|
3c: 04 00 00 00 l\.jal 3c <l_jal\+0x10>
|
||||||
|
3c: R_OR1K_INSN_REL_26 \.data
|
||||||
|
40: 04 00 00 00 l\.jal 40 <l_jal\+0x14>
|
||||||
|
40: R_OR1K_INSN_REL_26 globaltext
|
||||||
|
44: 04 00 00 00 l\.jal 44 <l_jal\+0x18>
|
||||||
|
44: R_OR1K_INSN_REL_26 globaldata
|
||||||
|
48: 07 ff ff f0 l\.jal 8 <l_j>
|
||||||
|
4c: 07 ff ff f8 l\.jal 2c <l_jal>
|
||||||
|
|
||||||
|
00000050 <l_jr>:
|
||||||
|
50: 44 00 00 00 l\.jr r0
|
||||||
|
54: 44 00 f8 00 l\.jr r31
|
||||||
|
58: 44 00 80 00 l\.jr r16
|
||||||
|
5c: 44 00 78 00 l\.jr r15
|
||||||
|
60: 44 00 08 00 l\.jr r1
|
||||||
|
64: 44 00 d8 00 l\.jr r27
|
||||||
|
68: 44 00 70 00 l\.jr r14
|
||||||
|
6c: 44 00 b0 00 l\.jr r22
|
||||||
|
|
||||||
|
00000070 <l_jalr>:
|
||||||
|
70: 48 00 00 00 l\.jalr r0
|
||||||
|
74: 48 00 f8 00 l\.jalr r31
|
||||||
|
78: 48 00 80 00 l\.jalr r16
|
||||||
|
7c: 48 00 78 00 l\.jalr r15
|
||||||
|
80: 48 00 08 00 l\.jalr r1
|
||||||
|
84: 48 00 d8 00 l\.jalr r27
|
||||||
|
88: 48 00 70 00 l\.jalr r14
|
||||||
|
8c: 48 00 b0 00 l\.jalr r22
|
||||||
|
|
||||||
|
00000090 <l_bnf>:
|
||||||
|
90: 0f ff ff ff l\.bnf 8c <l_jalr\+0x1c>
|
||||||
|
94: 0c 00 00 01 l\.bnf 98 <l_bnf\+0x8>
|
||||||
|
98: 0c 00 00 00 l\.bnf 98 <l_bnf\+0x8>
|
||||||
|
9c: 0f ff ff d9 l\.bnf 0 <localtext>
|
||||||
|
a0: 0c 00 00 00 l\.bnf a0 <l_bnf\+0x10>
|
||||||
|
a0: R_OR1K_INSN_REL_26 \.data
|
||||||
|
a4: 0c 00 00 00 l\.bnf a4 <l_bnf\+0x14>
|
||||||
|
a4: R_OR1K_INSN_REL_26 globaltext
|
||||||
|
a8: 0c 00 00 00 l\.bnf a8 <l_bnf\+0x18>
|
||||||
|
a8: R_OR1K_INSN_REL_26 globaldata
|
||||||
|
ac: 0f ff ff d7 l\.bnf 8 <l_j>
|
||||||
|
b0: 0f ff ff df l\.bnf 2c <l_jal>
|
||||||
|
|
||||||
|
000000b4 <l_bf>:
|
||||||
|
b4: 13 ff ff ff l\.bf b0 <l_bnf\+0x20>
|
||||||
|
b8: 10 00 00 01 l\.bf bc <l_bf\+0x8>
|
||||||
|
bc: 10 00 00 00 l\.bf bc <l_bf\+0x8>
|
||||||
|
c0: 13 ff ff d0 l\.bf 0 <localtext>
|
||||||
|
c4: 10 00 00 00 l\.bf c4 <l_bf\+0x10>
|
||||||
|
c4: R_OR1K_INSN_REL_26 \.data
|
||||||
|
c8: 10 00 00 00 l\.bf c8 <l_bf\+0x14>
|
||||||
|
c8: R_OR1K_INSN_REL_26 globaltext
|
||||||
|
cc: 10 00 00 00 l\.bf cc <l_bf\+0x18>
|
||||||
|
cc: R_OR1K_INSN_REL_26 globaldata
|
||||||
|
d0: 13 ff ff ce l\.bf 8 <l_j>
|
||||||
|
d4: 13 ff ff d6 l\.bf 2c <l_jal>
|
||||||
|
|
||||||
|
000000d8 <l_trap>:
|
||||||
|
d8: 21 00 00 00 l\.trap 0x0
|
||||||
|
dc: 21 00 ff ff l\.trap 0xffff
|
||||||
|
e0: 21 00 80 00 l\.trap 0x8000
|
||||||
|
e4: 21 00 7f ff l\.trap 0x7fff
|
||||||
|
e8: 21 00 00 01 l\.trap 0x1
|
||||||
|
ec: 21 00 d1 4f l\.trap 0xd14f
|
||||||
|
f0: 21 00 7f 7c l\.trap 0x7f7c
|
||||||
|
f4: 21 00 d2 4a l\.trap 0xd24a
|
||||||
|
|
||||||
|
000000f8 <l_sys>:
|
||||||
|
f8: 20 00 00 00 l\.sys 0x0
|
||||||
|
fc: 20 00 ff ff l\.sys 0xffff
|
||||||
|
100: 20 00 80 00 l\.sys 0x8000
|
||||||
|
104: 20 00 7f ff l\.sys 0x7fff
|
||||||
|
108: 20 00 00 01 l\.sys 0x1
|
||||||
|
10c: 20 00 d2 85 l\.sys 0xd285
|
||||||
|
110: 20 00 e3 15 l\.sys 0xe315
|
||||||
|
114: 20 00 80 fa l\.sys 0x80fa
|
||||||
|
|
||||||
|
00000118 <l_rfe>:
|
||||||
|
118: 24 00 00 00 l\.rfe
|
||||||
|
|
||||||
|
0000011c <l_nop>:
|
||||||
|
11c: 15 00 00 00 l\.nop 0x0
|
||||||
|
|
||||||
|
00000120 <l_movhi>:
|
||||||
|
120: 18 00 00 00 l\.movhi r0,0x0
|
||||||
|
124: 1b e0 ff ff l\.movhi r31,0xffff
|
||||||
|
128: 1a 00 80 00 l\.movhi r16,0x8000
|
||||||
|
12c: 19 e0 7f ff l\.movhi r15,0x7fff
|
||||||
|
130: 18 20 00 01 l\.movhi r1,0x1
|
||||||
|
134: 1b 80 81 ce l\.movhi r28,0x81ce
|
||||||
|
138: 1a e0 e8 ac l\.movhi r23,0xe8ac
|
||||||
|
13c: 1a 60 d8 c0 l\.movhi r19,0xd8c0
|
||||||
|
|
||||||
|
00000140 <l_mfspr>:
|
||||||
|
140: b4 00 00 00 l\.mfspr r0,r0,0x0
|
||||||
|
144: b7 ff ff ff l\.mfspr r31,r31,0xffff
|
||||||
|
148: b6 10 80 00 l\.mfspr r16,r16,0x8000
|
||||||
|
14c: b5 ef 7f ff l\.mfspr r15,r15,0x7fff
|
||||||
|
150: b4 21 00 01 l\.mfspr r1,r1,0x1
|
||||||
|
154: b6 fd d4 98 l\.mfspr r23,r29,0xd498
|
||||||
|
158: b6 74 11 81 l\.mfspr r19,r20,0x1181
|
||||||
|
15c: b7 42 f7 d6 l\.mfspr r26,r2,0xf7d6
|
||||||
|
|
||||||
|
00000160 <l_mtspr>:
|
||||||
|
160: c0 00 00 00 l\.mtspr r0,r0,0x0
|
||||||
|
164: c3 ff ff ff l\.mtspr r31,r31,0xffff
|
||||||
|
168: c2 10 80 00 l\.mtspr r16,r16,0x8000
|
||||||
|
16c: c1 ef 7f ff l\.mtspr r15,r15,0x7fff
|
||||||
|
170: c0 01 08 01 l\.mtspr r1,r1,0x1
|
||||||
|
174: c0 fe 33 77 l\.mtspr r30,r6,0x3b77
|
||||||
|
178: c2 a9 3c cc l\.mtspr r9,r7,0xaccc
|
||||||
|
17c: c3 f9 3d 7b l\.mtspr r25,r7,0xfd7b
|
||||||
|
|
||||||
|
00000180 <l_lwz>:
|
||||||
|
180: 84 00 00 00 l\.lwz r0,0\(r0\)
|
||||||
|
184: 87 ff ff ff l\.lwz r31,-1\(r31\)
|
||||||
|
188: 86 10 80 00 l\.lwz r16,-32768\(r16\)
|
||||||
|
18c: 85 ef 7f ff l\.lwz r15,32767\(r15\)
|
||||||
|
190: 84 21 00 01 l\.lwz r1,1\(r1\)
|
||||||
|
194: 85 f9 0b 75 l\.lwz r15,2933\(r25\)
|
||||||
|
198: 86 35 fc e1 l\.lwz r17,-799\(r21\)
|
||||||
|
19c: 84 12 bb 45 l\.lwz r0,-17595\(r18\)
|
||||||
|
|
||||||
|
000001a0 <l_lws>:
|
||||||
|
1a0: 88 00 00 00 l\.lws r0,0\(r0\)
|
||||||
|
1a4: 8b ff ff ff l\.lws r31,-1\(r31\)
|
||||||
|
1a8: 8a 10 80 00 l\.lws r16,-32768\(r16\)
|
||||||
|
1ac: 89 ef 7f ff l\.lws r15,32767\(r15\)
|
||||||
|
1b0: 88 21 00 01 l\.lws r1,1\(r1\)
|
||||||
|
1b4: 88 35 bb 3a l\.lws r1,-17606\(r21\)
|
||||||
|
1b8: 89 df 69 0b l\.lws r14,26891\(r31\)
|
||||||
|
1bc: 89 00 6b a0 l\.lws r8,27552\(r0\)
|
||||||
|
|
||||||
|
000001c0 <l_lbz>:
|
||||||
|
1c0: 8c 00 00 00 l\.lbz r0,0\(r0\)
|
||||||
|
1c4: 8f ff ff ff l\.lbz r31,-1\(r31\)
|
||||||
|
1c8: 8e 10 80 00 l\.lbz r16,-32768\(r16\)
|
||||||
|
1cc: 8d ef 7f ff l\.lbz r15,32767\(r15\)
|
||||||
|
1d0: 8c 21 00 01 l\.lbz r1,1\(r1\)
|
||||||
|
1d4: 8e 74 64 23 l\.lbz r19,25635\(r20\)
|
||||||
|
1d8: 8d e9 f2 a8 l\.lbz r15,-3416\(r9\)
|
||||||
|
1dc: 8c 61 45 54 l\.lbz r3,17748\(r1\)
|
||||||
|
|
||||||
|
000001e0 <l_lbs>:
|
||||||
|
1e0: 90 00 00 00 l\.lbs r0,0\(r0\)
|
||||||
|
1e4: 93 ff ff ff l\.lbs r31,-1\(r31\)
|
||||||
|
1e8: 92 10 80 00 l\.lbs r16,-32768\(r16\)
|
||||||
|
1ec: 91 ef 7f ff l\.lbs r15,32767\(r15\)
|
||||||
|
1f0: 90 21 00 01 l\.lbs r1,1\(r1\)
|
||||||
|
1f4: 93 48 44 c6 l\.lbs r26,17606\(r8\)
|
||||||
|
1f8: 92 d0 86 a0 l\.lbs r22,-31072\(r16\)
|
||||||
|
1fc: 90 c9 44 20 l\.lbs r6,17440\(r9\)
|
||||||
|
|
||||||
|
00000200 <l_lhz>:
|
||||||
|
200: 94 00 00 00 l\.lhz r0,0\(r0\)
|
||||||
|
204: 97 ff ff ff l\.lhz r31,-1\(r31\)
|
||||||
|
208: 96 10 80 00 l\.lhz r16,-32768\(r16\)
|
||||||
|
20c: 95 ef 7f ff l\.lhz r15,32767\(r15\)
|
||||||
|
210: 94 21 00 01 l\.lhz r1,1\(r1\)
|
||||||
|
214: 94 a4 e9 dd l\.lhz r5,-5667\(r4\)
|
||||||
|
218: 97 04 16 d8 l\.lhz r24,5848\(r4\)
|
||||||
|
21c: 95 47 7b bb l\.lhz r10,31675\(r7\)
|
||||||
|
|
||||||
|
00000220 <l_lhs>:
|
||||||
|
220: 98 00 00 00 l\.lhs r0,0\(r0\)
|
||||||
|
224: 9b ff ff ff l\.lhs r31,-1\(r31\)
|
||||||
|
228: 9a 10 80 00 l\.lhs r16,-32768\(r16\)
|
||||||
|
22c: 99 ef 7f ff l\.lhs r15,32767\(r15\)
|
||||||
|
230: 98 21 00 01 l\.lhs r1,1\(r1\)
|
||||||
|
234: 98 cb ff 72 l\.lhs r6,-142\(r11\)
|
||||||
|
238: 9a 9d eb 46 l\.lhs r20,-5306\(r29\)
|
||||||
|
23c: 99 f5 10 52 l\.lhs r15,4178\(r21\)
|
||||||
|
|
||||||
|
00000240 <l_sw>:
|
||||||
|
240: d4 00 00 00 l\.sw 0\(r0\),r0
|
||||||
|
244: d7 ff ff ff l\.sw -1\(r31\),r31
|
||||||
|
248: d6 10 80 00 l\.sw -32768\(r16\),r16
|
||||||
|
24c: d5 ef 7f ff l\.sw 32767\(r15\),r15
|
||||||
|
250: d4 01 08 01 l\.sw 1\(r1\),r1
|
||||||
|
254: d7 91 50 e1 l\.sw -7967\(r17\),r10
|
||||||
|
258: d4 1e 57 20 l\.sw 1824\(r30\),r10
|
||||||
|
25c: d5 ef 23 4e l\.sw 31566\(r15\),r4
|
||||||
|
|
||||||
|
00000260 <l_sb>:
|
||||||
|
260: d8 00 00 00 l\.sb 0\(r0\),r0
|
||||||
|
264: db ff ff ff l\.sb -1\(r31\),r31
|
||||||
|
268: da 10 80 00 l\.sb -32768\(r16\),r16
|
||||||
|
26c: d9 ef 7f ff l\.sb 32767\(r15\),r15
|
||||||
|
270: d8 01 08 01 l\.sb 1\(r1\),r1
|
||||||
|
274: d9 4a 06 b8 l\.sb 22200\(r10\),r0
|
||||||
|
278: d8 90 df 0b l\.sb 9995\(r16\),r27
|
||||||
|
27c: da 4e f9 9c l\.sb -28260\(r14\),r31
|
||||||
|
|
||||||
|
00000280 <l_sh>:
|
||||||
|
280: dc 00 00 00 l\.sh 0\(r0\),r0
|
||||||
|
284: df ff ff ff l\.sh -1\(r31\),r31
|
||||||
|
288: de 10 80 00 l\.sh -32768\(r16\),r16
|
||||||
|
28c: dd ef 7f ff l\.sh 32767\(r15\),r15
|
||||||
|
290: dc 01 08 01 l\.sh 1\(r1\),r1
|
||||||
|
294: dc b5 c9 bd l\.sh 10685\(r21\),r25
|
||||||
|
298: df 3c 2c f6 l\.sh -13066\(r28\),r5
|
||||||
|
29c: de 49 ef 50 l\.sh -26800\(r9\),r29
|
||||||
|
|
||||||
|
000002a0 <l_sll>:
|
||||||
|
2a0: e0 00 00 08 l\.sll r0,r0,r0
|
||||||
|
2a4: e3 ff f8 08 l\.sll r31,r31,r31
|
||||||
|
2a8: e2 10 80 08 l\.sll r16,r16,r16
|
||||||
|
2ac: e1 ef 78 08 l\.sll r15,r15,r15
|
||||||
|
2b0: e0 21 08 08 l\.sll r1,r1,r1
|
||||||
|
2b4: e3 f0 40 08 l\.sll r31,r16,r8
|
||||||
|
2b8: e3 f1 b0 08 l\.sll r31,r17,r22
|
||||||
|
2bc: e1 ee 28 08 l\.sll r15,r14,r5
|
||||||
|
|
||||||
|
000002c0 <l_slli>:
|
||||||
|
2c0: b8 00 00 00 l\.slli r0,r0,0x0
|
||||||
|
2c4: bb ff 00 3f l\.slli r31,r31,0x3f
|
||||||
|
2c8: ba 10 00 20 l\.slli r16,r16,0x20
|
||||||
|
2cc: b9 ef 00 1f l\.slli r15,r15,0x1f
|
||||||
|
2d0: b8 21 00 01 l\.slli r1,r1,0x1
|
||||||
|
2d4: b9 6e 00 31 l\.slli r11,r14,0x31
|
||||||
|
2d8: b8 fb 00 17 l\.slli r7,r27,0x17
|
||||||
|
2dc: bb d0 00 0b l\.slli r30,r16,0xb
|
||||||
|
|
||||||
|
000002e0 <l_srl>:
|
||||||
|
2e0: e0 00 00 48 l\.srl r0,r0,r0
|
||||||
|
2e4: e3 ff f8 48 l\.srl r31,r31,r31
|
||||||
|
2e8: e2 10 80 48 l\.srl r16,r16,r16
|
||||||
|
2ec: e1 ef 78 48 l\.srl r15,r15,r15
|
||||||
|
2f0: e0 21 08 48 l\.srl r1,r1,r1
|
||||||
|
2f4: e1 f9 68 48 l\.srl r15,r25,r13
|
||||||
|
2f8: e2 60 88 48 l\.srl r19,r0,r17
|
||||||
|
2fc: e1 a0 b8 48 l\.srl r13,r0,r23
|
||||||
|
|
||||||
|
00000300 <l_srli>:
|
||||||
|
300: b8 00 00 40 l\.srli r0,r0,0x0
|
||||||
|
304: bb ff 00 7f l\.srli r31,r31,0x3f
|
||||||
|
308: ba 10 00 60 l\.srli r16,r16,0x20
|
||||||
|
30c: b9 ef 00 5f l\.srli r15,r15,0x1f
|
||||||
|
310: b8 21 00 41 l\.srli r1,r1,0x1
|
||||||
|
314: b9 fe 00 4d l\.srli r15,r30,0xd
|
||||||
|
318: b9 a3 00 7f l\.srli r13,r3,0x3f
|
||||||
|
31c: b8 52 00 5e l\.srli r2,r18,0x1e
|
||||||
|
|
||||||
|
00000320 <l_sra>:
|
||||||
|
320: e0 00 00 88 l\.sra r0,r0,r0
|
||||||
|
324: e3 ff f8 88 l\.sra r31,r31,r31
|
||||||
|
328: e2 10 80 88 l\.sra r16,r16,r16
|
||||||
|
32c: e1 ef 78 88 l\.sra r15,r15,r15
|
||||||
|
330: e0 21 08 88 l\.sra r1,r1,r1
|
||||||
|
334: e0 7a 00 88 l\.sra r3,r26,r0
|
||||||
|
338: e3 b2 d8 88 l\.sra r29,r18,r27
|
||||||
|
33c: e3 7d 18 88 l\.sra r27,r29,r3
|
||||||
|
|
||||||
|
00000340 <l_srai>:
|
||||||
|
340: b8 00 00 80 l\.srai r0,r0,0x0
|
||||||
|
344: bb ff 00 bf l\.srai r31,r31,0x3f
|
||||||
|
348: ba 10 00 a0 l\.srai r16,r16,0x20
|
||||||
|
34c: b9 ef 00 9f l\.srai r15,r15,0x1f
|
||||||
|
350: b8 21 00 81 l\.srai r1,r1,0x1
|
||||||
|
354: b9 4b 00 9c l\.srai r10,r11,0x1c
|
||||||
|
358: ba ef 00 b0 l\.srai r23,r15,0x30
|
||||||
|
35c: ba 0f 00 a6 l\.srai r16,r15,0x26
|
||||||
|
|
||||||
|
00000360 <l_ror>:
|
||||||
|
360: e0 00 00 c8 l\.ror r0,r0,r0
|
||||||
|
364: e3 ff f8 c8 l\.ror r31,r31,r31
|
||||||
|
368: e2 10 80 c8 l\.ror r16,r16,r16
|
||||||
|
36c: e1 ef 78 c8 l\.ror r15,r15,r15
|
||||||
|
370: e0 21 08 c8 l\.ror r1,r1,r1
|
||||||
|
374: e3 ac 28 c8 l\.ror r29,r12,r5
|
||||||
|
378: e2 46 20 c8 l\.ror r18,r6,r4
|
||||||
|
37c: e0 50 88 c8 l\.ror r2,r16,r17
|
||||||
|
|
||||||
|
00000380 <l_rori>:
|
||||||
|
380: b8 00 00 c0 l\.rori r0,r0,0x0
|
||||||
|
384: bb ff 00 ff l\.rori r31,r31,0x3f
|
||||||
|
388: ba 10 00 e0 l\.rori r16,r16,0x20
|
||||||
|
38c: b9 ef 00 df l\.rori r15,r15,0x1f
|
||||||
|
390: b8 21 00 c1 l\.rori r1,r1,0x1
|
||||||
|
394: ba 20 00 d7 l\.rori r17,r0,0x17
|
||||||
|
398: ba 1f 00 ea l\.rori r16,r31,0x2a
|
||||||
|
39c: b9 b5 00 cc l\.rori r13,r21,0xc
|
||||||
|
|
||||||
|
000003a0 <l_add>:
|
||||||
|
3a0: e0 00 00 00 l\.add r0,r0,r0
|
||||||
|
3a4: e3 ff f8 00 l\.add r31,r31,r31
|
||||||
|
3a8: e2 10 80 00 l\.add r16,r16,r16
|
||||||
|
3ac: e1 ef 78 00 l\.add r15,r15,r15
|
||||||
|
3b0: e0 21 08 00 l\.add r1,r1,r1
|
||||||
|
3b4: e3 a7 20 00 l\.add r29,r7,r4
|
||||||
|
3b8: e3 aa 90 00 l\.add r29,r10,r18
|
||||||
|
3bc: e2 56 b8 00 l\.add r18,r22,r23
|
||||||
|
|
||||||
|
000003c0 <l_sub>:
|
||||||
|
3c0: e0 00 00 02 l\.sub r0,r0,r0
|
||||||
|
3c4: e3 ff f8 02 l\.sub r31,r31,r31
|
||||||
|
3c8: e2 10 80 02 l\.sub r16,r16,r16
|
||||||
|
3cc: e1 ef 78 02 l\.sub r15,r15,r15
|
||||||
|
3d0: e0 21 08 02 l\.sub r1,r1,r1
|
||||||
|
3d4: e2 fa 70 02 l\.sub r23,r26,r14
|
||||||
|
3d8: e1 58 78 02 l\.sub r10,r24,r15
|
||||||
|
3dc: e1 64 90 02 l\.sub r11,r4,r18
|
||||||
|
|
||||||
|
000003e0 <l_and>:
|
||||||
|
3e0: e0 00 00 03 l\.and r0,r0,r0
|
||||||
|
3e4: e3 ff f8 03 l\.and r31,r31,r31
|
||||||
|
3e8: e2 10 80 03 l\.and r16,r16,r16
|
||||||
|
3ec: e1 ef 78 03 l\.and r15,r15,r15
|
||||||
|
3f0: e0 21 08 03 l\.and r1,r1,r1
|
||||||
|
3f4: e0 1f c8 03 l\.and r0,r31,r25
|
||||||
|
3f8: e3 c7 98 03 l\.and r30,r7,r19
|
||||||
|
3fc: e2 62 d0 03 l\.and r19,r2,r26
|
||||||
|
|
||||||
|
00000400 <l_or>:
|
||||||
|
400: e0 00 00 04 l\.or r0,r0,r0
|
||||||
|
404: e3 ff f8 04 l\.or r31,r31,r31
|
||||||
|
408: e2 10 80 04 l\.or r16,r16,r16
|
||||||
|
40c: e1 ef 78 04 l\.or r15,r15,r15
|
||||||
|
410: e0 21 08 04 l\.or r1,r1,r1
|
||||||
|
414: e2 2a 10 04 l\.or r17,r10,r2
|
||||||
|
418: e0 f3 e8 04 l\.or r7,r19,r29
|
||||||
|
41c: e0 71 88 04 l\.or r3,r17,r17
|
||||||
|
|
||||||
|
00000420 <l_xor>:
|
||||||
|
420: e0 00 00 05 l\.xor r0,r0,r0
|
||||||
|
424: e3 ff f8 05 l\.xor r31,r31,r31
|
||||||
|
428: e2 10 80 05 l\.xor r16,r16,r16
|
||||||
|
42c: e1 ef 78 05 l\.xor r15,r15,r15
|
||||||
|
430: e0 21 08 05 l\.xor r1,r1,r1
|
||||||
|
434: e3 e5 88 05 l\.xor r31,r5,r17
|
||||||
|
438: e2 c4 28 05 l\.xor r22,r4,r5
|
||||||
|
43c: e3 d4 d0 05 l\.xor r30,r20,r26
|
||||||
|
|
||||||
|
00000440 <l_addc>:
|
||||||
|
440: e0 00 00 01 l\.addc r0,r0,r0
|
||||||
|
444: e3 ff f8 01 l\.addc r31,r31,r31
|
||||||
|
448: e2 10 80 01 l\.addc r16,r16,r16
|
||||||
|
44c: e1 ef 78 01 l\.addc r15,r15,r15
|
||||||
|
450: e0 21 08 01 l\.addc r1,r1,r1
|
||||||
|
454: e1 1a c0 01 l\.addc r8,r26,r24
|
||||||
|
458: e2 46 20 01 l\.addc r18,r6,r4
|
||||||
|
45c: e3 a0 90 01 l\.addc r29,r0,r18
|
||||||
|
|
||||||
|
00000460 <l_mul>:
|
||||||
|
460: e0 00 03 06 l\.mul r0,r0,r0
|
||||||
|
464: e3 ff fb 06 l\.mul r31,r31,r31
|
||||||
|
468: e2 10 83 06 l\.mul r16,r16,r16
|
||||||
|
46c: e1 ef 7b 06 l\.mul r15,r15,r15
|
||||||
|
470: e0 21 0b 06 l\.mul r1,r1,r1
|
||||||
|
474: e1 19 6b 06 l\.mul r8,r25,r13
|
||||||
|
478: e1 15 eb 06 l\.mul r8,r21,r29
|
||||||
|
47c: e3 63 8b 06 l\.mul r27,r3,r17
|
||||||
|
|
||||||
|
00000480 <l_mulu>:
|
||||||
|
480: e0 00 03 0b l\.mulu r0,r0,r0
|
||||||
|
484: e3 ff fb 0b l\.mulu r31,r31,r31
|
||||||
|
488: e2 10 83 0b l\.mulu r16,r16,r16
|
||||||
|
48c: e1 ef 7b 0b l\.mulu r15,r15,r15
|
||||||
|
490: e0 21 0b 0b l\.mulu r1,r1,r1
|
||||||
|
494: e3 4e 83 0b l\.mulu r26,r14,r16
|
||||||
|
498: e0 32 5b 0b l\.mulu r1,r18,r11
|
||||||
|
49c: e1 d2 8b 0b l\.mulu r14,r18,r17
|
||||||
|
|
||||||
|
000004a0 <l_div>:
|
||||||
|
4a0: e0 00 03 09 l\.div r0,r0,r0
|
||||||
|
4a4: e3 ff fb 09 l\.div r31,r31,r31
|
||||||
|
4a8: e2 10 83 09 l\.div r16,r16,r16
|
||||||
|
4ac: e1 ef 7b 09 l\.div r15,r15,r15
|
||||||
|
4b0: e0 21 0b 09 l\.div r1,r1,r1
|
||||||
|
4b4: e0 02 e3 09 l\.div r0,r2,r28
|
||||||
|
4b8: e3 47 fb 09 l\.div r26,r7,r31
|
||||||
|
4bc: e0 52 a3 09 l\.div r2,r18,r20
|
||||||
|
|
||||||
|
000004c0 <l_divu>:
|
||||||
|
4c0: e0 00 03 0a l\.divu r0,r0,r0
|
||||||
|
4c4: e3 ff fb 0a l\.divu r31,r31,r31
|
||||||
|
4c8: e2 10 83 0a l\.divu r16,r16,r16
|
||||||
|
4cc: e1 ef 7b 0a l\.divu r15,r15,r15
|
||||||
|
4d0: e0 21 0b 0a l\.divu r1,r1,r1
|
||||||
|
4d4: e0 a4 cb 0a l\.divu r5,r4,r25
|
||||||
|
4d8: e1 0b eb 0a l\.divu r8,r11,r29
|
||||||
|
4dc: e1 73 13 0a l\.divu r11,r19,r2
|
||||||
|
|
||||||
|
000004e0 <l_addi>:
|
||||||
|
4e0: 9c 00 00 00 l\.addi r0,r0,0
|
||||||
|
4e4: 9f ff ff ff l\.addi r31,r31,-1
|
||||||
|
4e8: 9e 10 80 00 l\.addi r16,r16,-32768
|
||||||
|
4ec: 9d ef 7f ff l\.addi r15,r15,32767
|
||||||
|
4f0: 9c 21 00 01 l\.addi r1,r1,1
|
||||||
|
4f4: 9d c0 1b 6c l\.addi r14,r0,7020
|
||||||
|
4f8: 9d ae 37 33 l\.addi r13,r14,14131
|
||||||
|
4fc: 9d d0 97 3b l\.addi r14,r16,-26821
|
||||||
|
|
||||||
|
00000500 <l_andi>:
|
||||||
|
500: a4 00 00 00 l\.andi r0,r0,0x0
|
||||||
|
504: a7 ff ff ff l\.andi r31,r31,0xffff
|
||||||
|
508: a6 10 80 00 l\.andi r16,r16,0x8000
|
||||||
|
50c: a5 ef 7f ff l\.andi r15,r15,0x7fff
|
||||||
|
510: a4 21 00 01 l\.andi r1,r1,0x1
|
||||||
|
514: a7 75 2e 97 l\.andi r27,r21,0x2e97
|
||||||
|
518: a6 b7 2f 1b l\.andi r21,r23,0x2f1b
|
||||||
|
51c: a7 de 83 c4 l\.andi r30,r30,0x83c4
|
||||||
|
|
||||||
|
00000520 <l_ori>:
|
||||||
|
520: a8 00 00 00 l\.ori r0,r0,0x0
|
||||||
|
524: ab ff ff ff l\.ori r31,r31,0xffff
|
||||||
|
528: aa 10 80 00 l\.ori r16,r16,0x8000
|
||||||
|
52c: a9 ef 7f ff l\.ori r15,r15,0x7fff
|
||||||
|
530: a8 21 00 01 l\.ori r1,r1,0x1
|
||||||
|
534: aa db d8 81 l\.ori r22,r27,0xd881
|
||||||
|
538: aa 3f 00 80 l\.ori r17,r31,0x80
|
||||||
|
53c: a9 b4 cf 6d l\.ori r13,r20,0xcf6d
|
||||||
|
|
||||||
|
00000540 <l_xori>:
|
||||||
|
540: ac 00 00 00 l\.xori r0,r0,0
|
||||||
|
544: af ff ff ff l\.xori r31,r31,-1
|
||||||
|
548: ae 10 80 00 l\.xori r16,r16,-32768
|
||||||
|
54c: ad ef 7f ff l\.xori r15,r15,32767
|
||||||
|
550: ac 21 00 01 l\.xori r1,r1,1
|
||||||
|
554: ae 50 ff ff l\.xori r18,r16,-1
|
||||||
|
558: af 2d c0 35 l\.xori r25,r13,-16331
|
||||||
|
55c: ad 9d 80 29 l\.xori r12,r29,-32727
|
||||||
|
|
||||||
|
00000560 <l_muli>:
|
||||||
|
560: b0 00 00 00 l\.muli r0,r0,0
|
||||||
|
564: b3 ff ff ff l\.muli r31,r31,-1
|
||||||
|
568: b2 10 80 00 l\.muli r16,r16,-32768
|
||||||
|
56c: b1 ef 7f ff l\.muli r15,r15,32767
|
||||||
|
570: b0 21 00 01 l\.muli r1,r1,1
|
||||||
|
574: b3 67 ed 85 l\.muli r27,r7,-4731
|
||||||
|
578: b0 f4 ff ff l\.muli r7,r20,-1
|
||||||
|
57c: b3 15 5a b3 l\.muli r24,r21,23219
|
||||||
|
|
||||||
|
00000580 <l_addic>:
|
||||||
|
580: a0 00 00 00 l\.addic r0,r0,0
|
||||||
|
584: a3 ff ff ff l\.addic r31,r31,-1
|
||||||
|
588: a2 10 80 00 l\.addic r16,r16,-32768
|
||||||
|
58c: a1 ef 7f ff l\.addic r15,r15,32767
|
||||||
|
590: a0 21 00 01 l\.addic r1,r1,1
|
||||||
|
594: a0 d6 80 44 l\.addic r6,r22,-32700
|
||||||
|
598: a2 69 ff ff l\.addic r19,r9,-1
|
||||||
|
59c: a3 7c 1a eb l\.addic r27,r28,6891
|
||||||
|
|
||||||
|
000005a0 <l_sfgtu>:
|
||||||
|
5a0: e4 40 00 00 l\.sfgtu r0,r0
|
||||||
|
5a4: e4 5f f8 00 l\.sfgtu r31,r31
|
||||||
|
5a8: e4 50 80 00 l\.sfgtu r16,r16
|
||||||
|
5ac: e4 4f 78 00 l\.sfgtu r15,r15
|
||||||
|
5b0: e4 41 08 00 l\.sfgtu r1,r1
|
||||||
|
5b4: e4 48 20 00 l\.sfgtu r8,r4
|
||||||
|
5b8: e4 51 a8 00 l\.sfgtu r17,r21
|
||||||
|
5bc: e4 46 28 00 l\.sfgtu r6,r5
|
||||||
|
|
||||||
|
000005c0 <l_sfgeu>:
|
||||||
|
5c0: e4 60 00 00 l\.sfgeu r0,r0
|
||||||
|
5c4: e4 7f f8 00 l\.sfgeu r31,r31
|
||||||
|
5c8: e4 70 80 00 l\.sfgeu r16,r16
|
||||||
|
5cc: e4 6f 78 00 l\.sfgeu r15,r15
|
||||||
|
5d0: e4 61 08 00 l\.sfgeu r1,r1
|
||||||
|
5d4: e4 6e 60 00 l\.sfgeu r14,r12
|
||||||
|
5d8: e4 76 38 00 l\.sfgeu r22,r7
|
||||||
|
5dc: e4 6d 08 00 l\.sfgeu r13,r1
|
||||||
|
|
||||||
|
000005e0 <l_sfltu>:
|
||||||
|
5e0: e4 80 00 00 l\.sfltu r0,r0
|
||||||
|
5e4: e4 9f f8 00 l\.sfltu r31,r31
|
||||||
|
5e8: e4 90 80 00 l\.sfltu r16,r16
|
||||||
|
5ec: e4 8f 78 00 l\.sfltu r15,r15
|
||||||
|
5f0: e4 81 08 00 l\.sfltu r1,r1
|
||||||
|
5f4: e4 81 68 00 l\.sfltu r1,r13
|
||||||
|
5f8: e4 96 f0 00 l\.sfltu r22,r30
|
||||||
|
5fc: e4 94 30 00 l\.sfltu r20,r6
|
||||||
|
|
||||||
|
00000600 <l_sfleu>:
|
||||||
|
600: e4 a0 00 00 l\.sfleu r0,r0
|
||||||
|
604: e4 bf f8 00 l\.sfleu r31,r31
|
||||||
|
608: e4 b0 80 00 l\.sfleu r16,r16
|
||||||
|
60c: e4 af 78 00 l\.sfleu r15,r15
|
||||||
|
610: e4 a1 08 00 l\.sfleu r1,r1
|
||||||
|
614: e4 b3 40 00 l\.sfleu r19,r8
|
||||||
|
618: e4 bb 78 00 l\.sfleu r27,r15
|
||||||
|
61c: e4 bb 18 00 l\.sfleu r27,r3
|
||||||
|
|
||||||
|
00000620 <l_sfgts>:
|
||||||
|
620: e5 40 00 00 l\.sfgts r0,r0
|
||||||
|
624: e5 5f f8 00 l\.sfgts r31,r31
|
||||||
|
628: e5 50 80 00 l\.sfgts r16,r16
|
||||||
|
62c: e5 4f 78 00 l\.sfgts r15,r15
|
||||||
|
630: e5 41 08 00 l\.sfgts r1,r1
|
||||||
|
634: e5 45 28 00 l\.sfgts r5,r5
|
||||||
|
638: e5 5f 28 00 l\.sfgts r31,r5
|
||||||
|
63c: e5 5e 90 00 l\.sfgts r30,r18
|
||||||
|
|
||||||
|
00000640 <l_sfges>:
|
||||||
|
640: e5 60 00 00 l\.sfges r0,r0
|
||||||
|
644: e5 7f f8 00 l\.sfges r31,r31
|
||||||
|
648: e5 70 80 00 l\.sfges r16,r16
|
||||||
|
64c: e5 6f 78 00 l\.sfges r15,r15
|
||||||
|
650: e5 61 08 00 l\.sfges r1,r1
|
||||||
|
654: e5 71 90 00 l\.sfges r17,r18
|
||||||
|
658: e5 60 48 00 l\.sfges r0,r9
|
||||||
|
65c: e5 76 c8 00 l\.sfges r22,r25
|
||||||
|
|
||||||
|
00000660 <l_sflts>:
|
||||||
|
660: e5 80 00 00 l\.sflts r0,r0
|
||||||
|
664: e5 9f f8 00 l\.sflts r31,r31
|
||||||
|
668: e5 90 80 00 l\.sflts r16,r16
|
||||||
|
66c: e5 8f 78 00 l\.sflts r15,r15
|
||||||
|
670: e5 81 08 00 l\.sflts r1,r1
|
||||||
|
674: e5 99 c0 00 l\.sflts r25,r24
|
||||||
|
678: e5 97 68 00 l\.sflts r23,r13
|
||||||
|
67c: e5 8f 40 00 l\.sflts r15,r8
|
||||||
|
|
||||||
|
00000680 <l_sfles>:
|
||||||
|
680: e5 a0 00 00 l\.sfles r0,r0
|
||||||
|
684: e5 bf f8 00 l\.sfles r31,r31
|
||||||
|
688: e5 b0 80 00 l\.sfles r16,r16
|
||||||
|
68c: e5 af 78 00 l\.sfles r15,r15
|
||||||
|
690: e5 a1 08 00 l\.sfles r1,r1
|
||||||
|
694: e5 b1 68 00 l\.sfles r17,r13
|
||||||
|
698: e5 be c8 00 l\.sfles r30,r25
|
||||||
|
69c: e5 a0 60 00 l\.sfles r0,r12
|
||||||
|
|
||||||
|
000006a0 <l_sfgtui>:
|
||||||
|
6a0: bc 40 00 00 l\.sfgtui r0,0
|
||||||
|
6a4: bc 5f ff ff l\.sfgtui r31,-1
|
||||||
|
6a8: bc 50 80 00 l\.sfgtui r16,-32768
|
||||||
|
6ac: bc 4f 7f ff l\.sfgtui r15,32767
|
||||||
|
6b0: bc 41 00 01 l\.sfgtui r1,1
|
||||||
|
6b4: bc 45 4b 21 l\.sfgtui r5,19233
|
||||||
|
6b8: bc 57 91 22 l\.sfgtui r23,-28382
|
||||||
|
6bc: bc 51 25 dd l\.sfgtui r17,9693
|
||||||
|
|
||||||
|
000006c0 <l_sfgeui>:
|
||||||
|
6c0: bc 60 00 00 l\.sfgeui r0,0
|
||||||
|
6c4: bc 7f ff ff l\.sfgeui r31,-1
|
||||||
|
6c8: bc 70 80 00 l\.sfgeui r16,-32768
|
||||||
|
6cc: bc 6f 7f ff l\.sfgeui r15,32767
|
||||||
|
6d0: bc 61 00 01 l\.sfgeui r1,1
|
||||||
|
6d4: bc 71 ec b6 l\.sfgeui r17,-4938
|
||||||
|
6d8: bc 6f 40 13 l\.sfgeui r15,16403
|
||||||
|
6dc: bc 66 f1 a4 l\.sfgeui r6,-3676
|
||||||
|
|
||||||
|
000006e0 <l_sfltui>:
|
||||||
|
6e0: bc 80 00 00 l\.sfltui r0,0
|
||||||
|
6e4: bc 9f ff ff l\.sfltui r31,-1
|
||||||
|
6e8: bc 90 80 00 l\.sfltui r16,-32768
|
||||||
|
6ec: bc 8f 7f ff l\.sfltui r15,32767
|
||||||
|
6f0: bc 81 00 01 l\.sfltui r1,1
|
||||||
|
6f4: bc 83 cc af l\.sfltui r3,-13137
|
||||||
|
6f8: bc 98 4c fd l\.sfltui r24,19709
|
||||||
|
6fc: bc 8a 03 3e l\.sfltui r10,830
|
||||||
|
|
||||||
|
00000700 <l_sfleui>:
|
||||||
|
700: bc a0 00 00 l\.sfleui r0,0
|
||||||
|
704: bc bf ff ff l\.sfleui r31,-1
|
||||||
|
708: bc b0 80 00 l\.sfleui r16,-32768
|
||||||
|
70c: bc af 7f ff l\.sfleui r15,32767
|
||||||
|
710: bc a1 00 01 l\.sfleui r1,1
|
||||||
|
714: bc b7 9b 66 l\.sfleui r23,-25754
|
||||||
|
718: bc b1 b6 d7 l\.sfleui r17,-18729
|
||||||
|
71c: bc a9 a8 81 l\.sfleui r9,-22399
|
||||||
|
|
||||||
|
00000720 <l_sfgtsi>:
|
||||||
|
720: bd 40 00 00 l\.sfgtsi r0,0
|
||||||
|
724: bd 5f ff ff l\.sfgtsi r31,-1
|
||||||
|
728: bd 50 80 00 l\.sfgtsi r16,-32768
|
||||||
|
72c: bd 4f 7f ff l\.sfgtsi r15,32767
|
||||||
|
730: bd 41 00 01 l\.sfgtsi r1,1
|
||||||
|
734: bd 4d b6 82 l\.sfgtsi r13,-18814
|
||||||
|
738: bd 4d d6 5f l\.sfgtsi r13,-10657
|
||||||
|
73c: bd 5c 97 d5 l\.sfgtsi r28,-26667
|
||||||
|
|
||||||
|
00000740 <l_sfgesi>:
|
||||||
|
740: bd 60 00 00 l\.sfgesi r0,0
|
||||||
|
744: bd 7f ff ff l\.sfgesi r31,-1
|
||||||
|
748: bd 70 80 00 l\.sfgesi r16,-32768
|
||||||
|
74c: bd 6f 7f ff l\.sfgesi r15,32767
|
||||||
|
750: bd 61 00 01 l\.sfgesi r1,1
|
||||||
|
754: bd 6c 09 48 l\.sfgesi r12,2376
|
||||||
|
758: bd 69 7d 3b l\.sfgesi r9,32059
|
||||||
|
75c: bd 6d 50 d8 l\.sfgesi r13,20696
|
||||||
|
|
||||||
|
00000760 <l_sfltsi>:
|
||||||
|
760: bd 80 00 00 l\.sfltsi r0,0
|
||||||
|
764: bd 9f ff ff l\.sfltsi r31,-1
|
||||||
|
768: bd 90 80 00 l\.sfltsi r16,-32768
|
||||||
|
76c: bd 8f 7f ff l\.sfltsi r15,32767
|
||||||
|
770: bd 81 00 01 l\.sfltsi r1,1
|
||||||
|
774: bd 9e 0b cd l\.sfltsi r30,3021
|
||||||
|
778: bd 85 93 5b l\.sfltsi r5,-27813
|
||||||
|
77c: bd 9c dd 90 l\.sfltsi r28,-8816
|
||||||
|
|
||||||
|
00000780 <l_sflesi>:
|
||||||
|
780: bd a0 00 00 l\.sflesi r0,0
|
||||||
|
784: bd bf ff ff l\.sflesi r31,-1
|
||||||
|
788: bd b0 80 00 l\.sflesi r16,-32768
|
||||||
|
78c: bd af 7f ff l\.sflesi r15,32767
|
||||||
|
790: bd a1 00 01 l\.sflesi r1,1
|
||||||
|
794: bd b2 2c 4a l\.sflesi r18,11338
|
||||||
|
798: bd bd 49 b9 l\.sflesi r29,18873
|
||||||
|
79c: bd bc 65 c2 l\.sflesi r28,26050
|
||||||
|
|
||||||
|
000007a0 <l_sfeq>:
|
||||||
|
7a0: e4 00 00 00 l\.sfeq r0,r0
|
||||||
|
7a4: e4 1f f8 00 l\.sfeq r31,r31
|
||||||
|
7a8: e4 10 80 00 l\.sfeq r16,r16
|
||||||
|
7ac: e4 0f 78 00 l\.sfeq r15,r15
|
||||||
|
7b0: e4 01 08 00 l\.sfeq r1,r1
|
||||||
|
7b4: e4 1c d0 00 l\.sfeq r28,r26
|
||||||
|
7b8: e4 0d 30 00 l\.sfeq r13,r6
|
||||||
|
7bc: e4 1a 48 00 l\.sfeq r26,r9
|
||||||
|
|
||||||
|
000007c0 <l_sfeqi>:
|
||||||
|
7c0: bc 00 00 00 l\.sfeqi r0,0
|
||||||
|
7c4: bc 1f ff ff l\.sfeqi r31,-1
|
||||||
|
7c8: bc 10 80 00 l\.sfeqi r16,-32768
|
||||||
|
7cc: bc 0f 7f ff l\.sfeqi r15,32767
|
||||||
|
7d0: bc 01 00 01 l\.sfeqi r1,1
|
||||||
|
7d4: bc 0a 65 1f l\.sfeqi r10,25887
|
||||||
|
7d8: bc 15 4d b6 l\.sfeqi r21,19894
|
||||||
|
7dc: bc 12 cb 95 l\.sfeqi r18,-13419
|
||||||
|
|
||||||
|
000007e0 <l_sfne>:
|
||||||
|
7e0: e4 20 00 00 l\.sfne r0,r0
|
||||||
|
7e4: e4 3f f8 00 l\.sfne r31,r31
|
||||||
|
7e8: e4 30 80 00 l\.sfne r16,r16
|
||||||
|
7ec: e4 2f 78 00 l\.sfne r15,r15
|
||||||
|
7f0: e4 21 08 00 l\.sfne r1,r1
|
||||||
|
7f4: e4 32 d8 00 l\.sfne r18,r27
|
||||||
|
7f8: e4 26 90 00 l\.sfne r6,r18
|
||||||
|
7fc: e4 20 f0 00 l\.sfne r0,r30
|
||||||
|
|
||||||
|
00000800 <l_sfnei>:
|
||||||
|
800: bc 20 00 00 l\.sfnei r0,0
|
||||||
|
804: bc 3f ff ff l\.sfnei r31,-1
|
||||||
|
808: bc 30 80 00 l\.sfnei r16,-32768
|
||||||
|
80c: bc 2f 7f ff l\.sfnei r15,32767
|
||||||
|
810: bc 21 00 01 l\.sfnei r1,1
|
||||||
|
814: bc 28 2c 92 l\.sfnei r8,11410
|
||||||
|
818: bc 26 b4 d9 l\.sfnei r6,-19239
|
||||||
|
81c: bc 34 a7 01 l\.sfnei r20,-22783
|
||||||
|
|
||||||
|
00000820 <l_lo>:
|
||||||
|
820: 9c 21 be ef l\.addi r1,r1,-16657
|
||||||
|
|
||||||
|
00000824 <l_hi>:
|
||||||
|
824: 18 20 de ad l\.movhi r1,0xdead
|
||||||
|
|
||||||
|
00000828 <l_mac>:
|
||||||
|
828: c4 01 10 01 l.mac r1,r2
|
||||||
|
|
||||||
|
0000082c <l_maci>:
|
||||||
|
82c: 4c 01 00 00 l\.maci r1,0
|
||||||
|
830: 4c 02 ff ff l\.maci r2,-1
|
||||||
|
834: 4c 02 7f ff l\.maci r2,32767
|
||||||
|
838: 4c 02 80 00 l\.maci r2,-32768
|
5
gas/testsuite/gas/or1k/allinsn.exp
Normal file
5
gas/testsuite/gas/or1k/allinsn.exp
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
# OR1K assembler testsuite. -*- Tcl -*-
|
||||||
|
|
||||||
|
if [istarget or1k*-*-*] {
|
||||||
|
run_dump_tests [lsort [glob -nocomplain $srcdir/$subdir/*.d]]
|
||||||
|
}
|
677
gas/testsuite/gas/or1k/allinsn.s
Normal file
677
gas/testsuite/gas/or1k/allinsn.s
Normal file
@ -0,0 +1,677 @@
|
|||||||
|
.data
|
||||||
|
localdata:
|
||||||
|
.word 42
|
||||||
|
.text
|
||||||
|
localtext:
|
||||||
|
l.nop
|
||||||
|
.data
|
||||||
|
.global globaldata
|
||||||
|
globaldata:
|
||||||
|
.word 43
|
||||||
|
.text
|
||||||
|
.global globaltext
|
||||||
|
globaltext:
|
||||||
|
l.nop
|
||||||
|
|
||||||
|
l_j:
|
||||||
|
l.j -4
|
||||||
|
l.j 4
|
||||||
|
l.j 0
|
||||||
|
l.j localtext
|
||||||
|
l.j localdata
|
||||||
|
l.j globaltext
|
||||||
|
l.j globaldata
|
||||||
|
l.j l_j
|
||||||
|
l.j l_jal
|
||||||
|
.text
|
||||||
|
l_jal:
|
||||||
|
l.jal -4
|
||||||
|
l.jal 4
|
||||||
|
l.jal 0
|
||||||
|
l.jal localtext
|
||||||
|
l.jal localdata
|
||||||
|
l.jal globaltext
|
||||||
|
l.jal globaldata
|
||||||
|
l.jal l_j
|
||||||
|
l.jal l_jal
|
||||||
|
.text
|
||||||
|
l_jr:
|
||||||
|
l.jr r0
|
||||||
|
l.jr r31
|
||||||
|
l.jr r16
|
||||||
|
l.jr r15
|
||||||
|
l.jr r1
|
||||||
|
l.jr r27
|
||||||
|
l.jr r14
|
||||||
|
l.jr r22
|
||||||
|
.text
|
||||||
|
l_jalr:
|
||||||
|
l.jalr r0
|
||||||
|
l.jalr r31
|
||||||
|
l.jalr r16
|
||||||
|
l.jalr r15
|
||||||
|
l.jalr r1
|
||||||
|
l.jalr r27
|
||||||
|
l.jalr r14
|
||||||
|
l.jalr r22
|
||||||
|
.text
|
||||||
|
l_bnf:
|
||||||
|
l.bnf -4
|
||||||
|
l.bnf 4
|
||||||
|
l.bnf 0
|
||||||
|
l.bnf localtext
|
||||||
|
l.bnf localdata
|
||||||
|
l.bnf globaltext
|
||||||
|
l.bnf globaldata
|
||||||
|
l.bnf l_j
|
||||||
|
l.bnf l_jal
|
||||||
|
.text
|
||||||
|
l_bf:
|
||||||
|
l.bf -4
|
||||||
|
l.bf 4
|
||||||
|
l.bf 0
|
||||||
|
l.bf localtext
|
||||||
|
l.bf localdata
|
||||||
|
l.bf globaltext
|
||||||
|
l.bf globaldata
|
||||||
|
l.bf l_j
|
||||||
|
l.bf l_jal
|
||||||
|
.text
|
||||||
|
l_trap:
|
||||||
|
l.trap 0
|
||||||
|
l.trap 65535
|
||||||
|
l.trap 32768
|
||||||
|
l.trap 32767
|
||||||
|
l.trap 1
|
||||||
|
l.trap 53583
|
||||||
|
l.trap 32636
|
||||||
|
l.trap 53834
|
||||||
|
.text
|
||||||
|
l_sys:
|
||||||
|
l.sys 0
|
||||||
|
l.sys 65535
|
||||||
|
l.sys 32768
|
||||||
|
l.sys 32767
|
||||||
|
l.sys 1
|
||||||
|
l.sys 53893
|
||||||
|
l.sys 58133
|
||||||
|
l.sys 33018
|
||||||
|
.text
|
||||||
|
l_rfe:
|
||||||
|
l.rfe
|
||||||
|
.text
|
||||||
|
l_nop:
|
||||||
|
l.nop
|
||||||
|
.text
|
||||||
|
l_movhi:
|
||||||
|
l.movhi r0,0
|
||||||
|
l.movhi r31,-1
|
||||||
|
l.movhi r16,-32768
|
||||||
|
l.movhi r15,32767
|
||||||
|
l.movhi r1,1
|
||||||
|
l.movhi r28,-32306
|
||||||
|
l.movhi r23,-5972
|
||||||
|
l.movhi r19,-10048
|
||||||
|
.text
|
||||||
|
l_mfspr:
|
||||||
|
l.mfspr r0,r0,0
|
||||||
|
l.mfspr r31,r31,65535
|
||||||
|
l.mfspr r16,r16,32768
|
||||||
|
l.mfspr r15,r15,32767
|
||||||
|
l.mfspr r1,r1,1
|
||||||
|
l.mfspr r23,r29,54424
|
||||||
|
l.mfspr r19,r20,4481
|
||||||
|
l.mfspr r26,r2,63446
|
||||||
|
.text
|
||||||
|
l_mtspr:
|
||||||
|
l.mtspr r0,r0,0
|
||||||
|
l.mtspr r31,r31,-1
|
||||||
|
l.mtspr r16,r16,-32768
|
||||||
|
l.mtspr r15,r15,32767
|
||||||
|
l.mtspr r1,r1,1
|
||||||
|
l.mtspr r30,r6,15223
|
||||||
|
l.mtspr r9,r7,-21300
|
||||||
|
l.mtspr r25,r7,-645
|
||||||
|
.text
|
||||||
|
l_lwz:
|
||||||
|
l.lwz r0,0(r0)
|
||||||
|
l.lwz r31,-1(r31)
|
||||||
|
l.lwz r16,-32768(r16)
|
||||||
|
l.lwz r15,32767(r15)
|
||||||
|
l.lwz r1,1(r1)
|
||||||
|
l.lwz r15,2933(r25)
|
||||||
|
l.lwz r17,-799(r21)
|
||||||
|
l.lwz r0,-17595(r18)
|
||||||
|
.text
|
||||||
|
l_lws:
|
||||||
|
l.lws r0,0(r0)
|
||||||
|
l.lws r31,-1(r31)
|
||||||
|
l.lws r16,-32768(r16)
|
||||||
|
l.lws r15,32767(r15)
|
||||||
|
l.lws r1,1(r1)
|
||||||
|
l.lws r1,-17606(r21)
|
||||||
|
l.lws r14,26891(r31)
|
||||||
|
l.lws r8,27552(r0)
|
||||||
|
.text
|
||||||
|
l_lbz:
|
||||||
|
l.lbz r0,0(r0)
|
||||||
|
l.lbz r31,-1(r31)
|
||||||
|
l.lbz r16,-32768(r16)
|
||||||
|
l.lbz r15,32767(r15)
|
||||||
|
l.lbz r1,1(r1)
|
||||||
|
l.lbz r19,25635(r20)
|
||||||
|
l.lbz r15,-3416(r9)
|
||||||
|
l.lbz r3,17748(r1)
|
||||||
|
.text
|
||||||
|
l_lbs:
|
||||||
|
l.lbs r0,0(r0)
|
||||||
|
l.lbs r31,-1(r31)
|
||||||
|
l.lbs r16,-32768(r16)
|
||||||
|
l.lbs r15,32767(r15)
|
||||||
|
l.lbs r1,1(r1)
|
||||||
|
l.lbs r26,17606(r8)
|
||||||
|
l.lbs r22,-31072(r16)
|
||||||
|
l.lbs r6,17440(r9)
|
||||||
|
.text
|
||||||
|
l_lhz:
|
||||||
|
l.lhz r0,0(r0)
|
||||||
|
l.lhz r31,-1(r31)
|
||||||
|
l.lhz r16,-32768(r16)
|
||||||
|
l.lhz r15,32767(r15)
|
||||||
|
l.lhz r1,1(r1)
|
||||||
|
l.lhz r5,-5667(r4)
|
||||||
|
l.lhz r24,5848(r4)
|
||||||
|
l.lhz r10,31675(r7)
|
||||||
|
.text
|
||||||
|
l_lhs:
|
||||||
|
l.lhs r0,0(r0)
|
||||||
|
l.lhs r31,-1(r31)
|
||||||
|
l.lhs r16,-32768(r16)
|
||||||
|
l.lhs r15,32767(r15)
|
||||||
|
l.lhs r1,1(r1)
|
||||||
|
l.lhs r6,-142(r11)
|
||||||
|
l.lhs r20,-5306(r29)
|
||||||
|
l.lhs r15,4178(r21)
|
||||||
|
.text
|
||||||
|
l_sw:
|
||||||
|
l.sw 0(r0),r0
|
||||||
|
l.sw -1(r31),r31
|
||||||
|
l.sw -32768(r16),r16
|
||||||
|
l.sw 32767(r15),r15
|
||||||
|
l.sw 1(r1),r1
|
||||||
|
l.sw -7967(r17),r10
|
||||||
|
l.sw 1824(r30),r10
|
||||||
|
l.sw 31566(r15),r4
|
||||||
|
.text
|
||||||
|
l_sb:
|
||||||
|
l.sb 0(r0),r0
|
||||||
|
l.sb -1(r31),r31
|
||||||
|
l.sb -32768(r16),r16
|
||||||
|
l.sb 32767(r15),r15
|
||||||
|
l.sb 1(r1),r1
|
||||||
|
l.sb 22200(r10),r0
|
||||||
|
l.sb 9995(r16),r27
|
||||||
|
l.sb -28260(r14),r31
|
||||||
|
.text
|
||||||
|
l_sh:
|
||||||
|
l.sh 0(r0),r0
|
||||||
|
l.sh -1(r31),r31
|
||||||
|
l.sh -32768(r16),r16
|
||||||
|
l.sh 32767(r15),r15
|
||||||
|
l.sh 1(r1),r1
|
||||||
|
l.sh 10685(r21),r25
|
||||||
|
l.sh -13066(r28),r5
|
||||||
|
l.sh -26800(r9),r29
|
||||||
|
.text
|
||||||
|
l_sll:
|
||||||
|
l.sll r0,r0,r0
|
||||||
|
l.sll r31,r31,r31
|
||||||
|
l.sll r16,r16,r16
|
||||||
|
l.sll r15,r15,r15
|
||||||
|
l.sll r1,r1,r1
|
||||||
|
l.sll r31,r16,r8
|
||||||
|
l.sll r31,r17,r22
|
||||||
|
l.sll r15,r14,r5
|
||||||
|
.text
|
||||||
|
l_slli:
|
||||||
|
l.slli r0,r0,0
|
||||||
|
l.slli r31,r31,63
|
||||||
|
l.slli r16,r16,32
|
||||||
|
l.slli r15,r15,31
|
||||||
|
l.slli r1,r1,1
|
||||||
|
l.slli r11,r14,49
|
||||||
|
l.slli r7,r27,23
|
||||||
|
l.slli r30,r16,11
|
||||||
|
.text
|
||||||
|
l_srl:
|
||||||
|
l.srl r0,r0,r0
|
||||||
|
l.srl r31,r31,r31
|
||||||
|
l.srl r16,r16,r16
|
||||||
|
l.srl r15,r15,r15
|
||||||
|
l.srl r1,r1,r1
|
||||||
|
l.srl r15,r25,r13
|
||||||
|
l.srl r19,r0,r17
|
||||||
|
l.srl r13,r0,r23
|
||||||
|
.text
|
||||||
|
l_srli:
|
||||||
|
l.srli r0,r0,0
|
||||||
|
l.srli r31,r31,63
|
||||||
|
l.srli r16,r16,32
|
||||||
|
l.srli r15,r15,31
|
||||||
|
l.srli r1,r1,1
|
||||||
|
l.srli r15,r30,13
|
||||||
|
l.srli r13,r3,63
|
||||||
|
l.srli r2,r18,30
|
||||||
|
.text
|
||||||
|
l_sra:
|
||||||
|
l.sra r0,r0,r0
|
||||||
|
l.sra r31,r31,r31
|
||||||
|
l.sra r16,r16,r16
|
||||||
|
l.sra r15,r15,r15
|
||||||
|
l.sra r1,r1,r1
|
||||||
|
l.sra r3,r26,r0
|
||||||
|
l.sra r29,r18,r27
|
||||||
|
l.sra r27,r29,r3
|
||||||
|
.text
|
||||||
|
l_srai:
|
||||||
|
l.srai r0,r0,0
|
||||||
|
l.srai r31,r31,63
|
||||||
|
l.srai r16,r16,32
|
||||||
|
l.srai r15,r15,31
|
||||||
|
l.srai r1,r1,1
|
||||||
|
l.srai r10,r11,28
|
||||||
|
l.srai r23,r15,48
|
||||||
|
l.srai r16,r15,38
|
||||||
|
.text
|
||||||
|
l_ror:
|
||||||
|
l.ror r0,r0,r0
|
||||||
|
l.ror r31,r31,r31
|
||||||
|
l.ror r16,r16,r16
|
||||||
|
l.ror r15,r15,r15
|
||||||
|
l.ror r1,r1,r1
|
||||||
|
l.ror r29,r12,r5
|
||||||
|
l.ror r18,r6,r4
|
||||||
|
l.ror r2,r16,r17
|
||||||
|
.text
|
||||||
|
l_rori:
|
||||||
|
l.rori r0,r0,0
|
||||||
|
l.rori r31,r31,63
|
||||||
|
l.rori r16,r16,32
|
||||||
|
l.rori r15,r15,31
|
||||||
|
l.rori r1,r1,1
|
||||||
|
l.rori r17,r0,23
|
||||||
|
l.rori r16,r31,42
|
||||||
|
l.rori r13,r21,12
|
||||||
|
.text
|
||||||
|
l_add:
|
||||||
|
l.add r0,r0,r0
|
||||||
|
l.add r31,r31,r31
|
||||||
|
l.add r16,r16,r16
|
||||||
|
l.add r15,r15,r15
|
||||||
|
l.add r1,r1,r1
|
||||||
|
l.add r29,r7,r4
|
||||||
|
l.add r29,r10,r18
|
||||||
|
l.add r18,r22,r23
|
||||||
|
.text
|
||||||
|
l_sub:
|
||||||
|
l.sub r0,r0,r0
|
||||||
|
l.sub r31,r31,r31
|
||||||
|
l.sub r16,r16,r16
|
||||||
|
l.sub r15,r15,r15
|
||||||
|
l.sub r1,r1,r1
|
||||||
|
l.sub r23,r26,r14
|
||||||
|
l.sub r10,r24,r15
|
||||||
|
l.sub r11,r4,r18
|
||||||
|
.text
|
||||||
|
l_and:
|
||||||
|
l.and r0,r0,r0
|
||||||
|
l.and r31,r31,r31
|
||||||
|
l.and r16,r16,r16
|
||||||
|
l.and r15,r15,r15
|
||||||
|
l.and r1,r1,r1
|
||||||
|
l.and r0,r31,r25
|
||||||
|
l.and r30,r7,r19
|
||||||
|
l.and r19,r2,r26
|
||||||
|
.text
|
||||||
|
l_or:
|
||||||
|
l.or r0,r0,r0
|
||||||
|
l.or r31,r31,r31
|
||||||
|
l.or r16,r16,r16
|
||||||
|
l.or r15,r15,r15
|
||||||
|
l.or r1,r1,r1
|
||||||
|
l.or r17,r10,r2
|
||||||
|
l.or r7,r19,r29
|
||||||
|
l.or r3,r17,r17
|
||||||
|
.text
|
||||||
|
l_xor:
|
||||||
|
l.xor r0,r0,r0
|
||||||
|
l.xor r31,r31,r31
|
||||||
|
l.xor r16,r16,r16
|
||||||
|
l.xor r15,r15,r15
|
||||||
|
l.xor r1,r1,r1
|
||||||
|
l.xor r31,r5,r17
|
||||||
|
l.xor r22,r4,r5
|
||||||
|
l.xor r30,r20,r26
|
||||||
|
.text
|
||||||
|
l_addc:
|
||||||
|
l.addc r0,r0,r0
|
||||||
|
l.addc r31,r31,r31
|
||||||
|
l.addc r16,r16,r16
|
||||||
|
l.addc r15,r15,r15
|
||||||
|
l.addc r1,r1,r1
|
||||||
|
l.addc r8,r26,r24
|
||||||
|
l.addc r18,r6,r4
|
||||||
|
l.addc r29,r0,r18
|
||||||
|
.text
|
||||||
|
l_mul:
|
||||||
|
l.mul r0,r0,r0
|
||||||
|
l.mul r31,r31,r31
|
||||||
|
l.mul r16,r16,r16
|
||||||
|
l.mul r15,r15,r15
|
||||||
|
l.mul r1,r1,r1
|
||||||
|
l.mul r8,r25,r13
|
||||||
|
l.mul r8,r21,r29
|
||||||
|
l.mul r27,r3,r17
|
||||||
|
.text
|
||||||
|
l_mulu:
|
||||||
|
l.mulu r0,r0,r0
|
||||||
|
l.mulu r31,r31,r31
|
||||||
|
l.mulu r16,r16,r16
|
||||||
|
l.mulu r15,r15,r15
|
||||||
|
l.mulu r1,r1,r1
|
||||||
|
l.mulu r26,r14,r16
|
||||||
|
l.mulu r1,r18,r11
|
||||||
|
l.mulu r14,r18,r17
|
||||||
|
.text
|
||||||
|
l_div:
|
||||||
|
l.div r0,r0,r0
|
||||||
|
l.div r31,r31,r31
|
||||||
|
l.div r16,r16,r16
|
||||||
|
l.div r15,r15,r15
|
||||||
|
l.div r1,r1,r1
|
||||||
|
l.div r0,r2,r28
|
||||||
|
l.div r26,r7,r31
|
||||||
|
l.div r2,r18,r20
|
||||||
|
.text
|
||||||
|
l_divu:
|
||||||
|
l.divu r0,r0,r0
|
||||||
|
l.divu r31,r31,r31
|
||||||
|
l.divu r16,r16,r16
|
||||||
|
l.divu r15,r15,r15
|
||||||
|
l.divu r1,r1,r1
|
||||||
|
l.divu r5,r4,r25
|
||||||
|
l.divu r8,r11,r29
|
||||||
|
l.divu r11,r19,r2
|
||||||
|
.text
|
||||||
|
l_addi:
|
||||||
|
l.addi r0,r0,0
|
||||||
|
l.addi r31,r31,-1
|
||||||
|
l.addi r16,r16,-32768
|
||||||
|
l.addi r15,r15,32767
|
||||||
|
l.addi r1,r1,1
|
||||||
|
l.addi r14,r0,7020
|
||||||
|
l.addi r13,r14,14131
|
||||||
|
l.addi r14,r16,-26821
|
||||||
|
.text
|
||||||
|
l_andi:
|
||||||
|
l.andi r0,r0,0
|
||||||
|
l.andi r31,r31,-1
|
||||||
|
l.andi r16,r16,-32768
|
||||||
|
l.andi r15,r15,32767
|
||||||
|
l.andi r1,r1,1
|
||||||
|
l.andi r27,r21,11927
|
||||||
|
l.andi r21,r23,12059
|
||||||
|
l.andi r30,r30,-31804
|
||||||
|
.text
|
||||||
|
l_ori:
|
||||||
|
l.ori r0,r0,0
|
||||||
|
l.ori r31,r31,-1
|
||||||
|
l.ori r16,r16,-32768
|
||||||
|
l.ori r15,r15,32767
|
||||||
|
l.ori r1,r1,1
|
||||||
|
l.ori r22,r27,-10111
|
||||||
|
l.ori r17,r31,128
|
||||||
|
l.ori r13,r20,-12435
|
||||||
|
.text
|
||||||
|
l_xori:
|
||||||
|
l.xori r0,r0,0
|
||||||
|
l.xori r31,r31,-1
|
||||||
|
l.xori r16,r16,-32768
|
||||||
|
l.xori r15,r15,32767
|
||||||
|
l.xori r1,r1,1
|
||||||
|
l.xori r18,r16,65535
|
||||||
|
l.xori r25,r13,-16331
|
||||||
|
l.xori r12,r29,-32727
|
||||||
|
.text
|
||||||
|
l_muli:
|
||||||
|
l.muli r0,r0,0
|
||||||
|
l.muli r31,r31,-1
|
||||||
|
l.muli r16,r16,-32768
|
||||||
|
l.muli r15,r15,32767
|
||||||
|
l.muli r1,r1,1
|
||||||
|
l.muli r27,r7,-4731
|
||||||
|
l.muli r7,r20,65535
|
||||||
|
l.muli r24,r21,23219
|
||||||
|
.text
|
||||||
|
l_addic:
|
||||||
|
l.addic r0,r0,0
|
||||||
|
l.addic r31,r31,-1
|
||||||
|
l.addic r16,r16,-32768
|
||||||
|
l.addic r15,r15,32767
|
||||||
|
l.addic r1,r1,1
|
||||||
|
l.addic r6,r22,-32700
|
||||||
|
l.addic r19,r9,65535
|
||||||
|
l.addic r27,r28,6891
|
||||||
|
.text
|
||||||
|
l_sfgtu:
|
||||||
|
l.sfgtu r0,r0
|
||||||
|
l.sfgtu r31,r31
|
||||||
|
l.sfgtu r16,r16
|
||||||
|
l.sfgtu r15,r15
|
||||||
|
l.sfgtu r1,r1
|
||||||
|
l.sfgtu r8,r4
|
||||||
|
l.sfgtu r17,r21
|
||||||
|
l.sfgtu r6,r5
|
||||||
|
.text
|
||||||
|
l_sfgeu:
|
||||||
|
l.sfgeu r0,r0
|
||||||
|
l.sfgeu r31,r31
|
||||||
|
l.sfgeu r16,r16
|
||||||
|
l.sfgeu r15,r15
|
||||||
|
l.sfgeu r1,r1
|
||||||
|
l.sfgeu r14,r12
|
||||||
|
l.sfgeu r22,r7
|
||||||
|
l.sfgeu r13,r1
|
||||||
|
.text
|
||||||
|
l_sfltu:
|
||||||
|
l.sfltu r0,r0
|
||||||
|
l.sfltu r31,r31
|
||||||
|
l.sfltu r16,r16
|
||||||
|
l.sfltu r15,r15
|
||||||
|
l.sfltu r1,r1
|
||||||
|
l.sfltu r1,r13
|
||||||
|
l.sfltu r22,r30
|
||||||
|
l.sfltu r20,r6
|
||||||
|
.text
|
||||||
|
l_sfleu:
|
||||||
|
l.sfleu r0,r0
|
||||||
|
l.sfleu r31,r31
|
||||||
|
l.sfleu r16,r16
|
||||||
|
l.sfleu r15,r15
|
||||||
|
l.sfleu r1,r1
|
||||||
|
l.sfleu r19,r8
|
||||||
|
l.sfleu r27,r15
|
||||||
|
l.sfleu r27,r3
|
||||||
|
.text
|
||||||
|
l_sfgts:
|
||||||
|
l.sfgts r0,r0
|
||||||
|
l.sfgts r31,r31
|
||||||
|
l.sfgts r16,r16
|
||||||
|
l.sfgts r15,r15
|
||||||
|
l.sfgts r1,r1
|
||||||
|
l.sfgts r5,r5
|
||||||
|
l.sfgts r31,r5
|
||||||
|
l.sfgts r30,r18
|
||||||
|
.text
|
||||||
|
l_sfges:
|
||||||
|
l.sfges r0,r0
|
||||||
|
l.sfges r31,r31
|
||||||
|
l.sfges r16,r16
|
||||||
|
l.sfges r15,r15
|
||||||
|
l.sfges r1,r1
|
||||||
|
l.sfges r17,r18
|
||||||
|
l.sfges r0,r9
|
||||||
|
l.sfges r22,r25
|
||||||
|
.text
|
||||||
|
l_sflts:
|
||||||
|
l.sflts r0,r0
|
||||||
|
l.sflts r31,r31
|
||||||
|
l.sflts r16,r16
|
||||||
|
l.sflts r15,r15
|
||||||
|
l.sflts r1,r1
|
||||||
|
l.sflts r25,r24
|
||||||
|
l.sflts r23,r13
|
||||||
|
l.sflts r15,r8
|
||||||
|
.text
|
||||||
|
l_sfles:
|
||||||
|
l.sfles r0,r0
|
||||||
|
l.sfles r31,r31
|
||||||
|
l.sfles r16,r16
|
||||||
|
l.sfles r15,r15
|
||||||
|
l.sfles r1,r1
|
||||||
|
l.sfles r17,r13
|
||||||
|
l.sfles r30,r25
|
||||||
|
l.sfles r0,r12
|
||||||
|
.text
|
||||||
|
l_sfgtui:
|
||||||
|
l.sfgtui r0,0
|
||||||
|
l.sfgtui r31,65535
|
||||||
|
l.sfgtui r16,32768
|
||||||
|
l.sfgtui r15,32767
|
||||||
|
l.sfgtui r1,1
|
||||||
|
l.sfgtui r5,19233
|
||||||
|
l.sfgtui r23,37154
|
||||||
|
l.sfgtui r17,9693
|
||||||
|
.text
|
||||||
|
l_sfgeui:
|
||||||
|
l.sfgeui r0,0
|
||||||
|
l.sfgeui r31,65535
|
||||||
|
l.sfgeui r16,32768
|
||||||
|
l.sfgeui r15,32767
|
||||||
|
l.sfgeui r1,1
|
||||||
|
l.sfgeui r17,60598
|
||||||
|
l.sfgeui r15,16403
|
||||||
|
l.sfgeui r6,61860
|
||||||
|
.text
|
||||||
|
l_sfltui:
|
||||||
|
l.sfltui r0,0
|
||||||
|
l.sfltui r31,65535
|
||||||
|
l.sfltui r16,32768
|
||||||
|
l.sfltui r15,32767
|
||||||
|
l.sfltui r1,1
|
||||||
|
l.sfltui r3,52399
|
||||||
|
l.sfltui r24,19709
|
||||||
|
l.sfltui r10,830
|
||||||
|
.text
|
||||||
|
l_sfleui:
|
||||||
|
l.sfleui r0,0
|
||||||
|
l.sfleui r31,65535
|
||||||
|
l.sfleui r16,32768
|
||||||
|
l.sfleui r15,32767
|
||||||
|
l.sfleui r1,1
|
||||||
|
l.sfleui r23,39782
|
||||||
|
l.sfleui r17,46807
|
||||||
|
l.sfleui r9,43137
|
||||||
|
.text
|
||||||
|
l_sfgtsi:
|
||||||
|
l.sfgtsi r0,0
|
||||||
|
l.sfgtsi r31,-1
|
||||||
|
l.sfgtsi r16,-32768
|
||||||
|
l.sfgtsi r15,32767
|
||||||
|
l.sfgtsi r1,1
|
||||||
|
l.sfgtsi r13,-18814
|
||||||
|
l.sfgtsi r13,-10657
|
||||||
|
l.sfgtsi r28,-26667
|
||||||
|
.text
|
||||||
|
l_sfgesi:
|
||||||
|
l.sfgesi r0,0
|
||||||
|
l.sfgesi r31,-1
|
||||||
|
l.sfgesi r16,-32768
|
||||||
|
l.sfgesi r15,32767
|
||||||
|
l.sfgesi r1,1
|
||||||
|
l.sfgesi r12,2376
|
||||||
|
l.sfgesi r9,32059
|
||||||
|
l.sfgesi r13,20696
|
||||||
|
.text
|
||||||
|
l_sfltsi:
|
||||||
|
l.sfltsi r0,0
|
||||||
|
l.sfltsi r31,-1
|
||||||
|
l.sfltsi r16,-32768
|
||||||
|
l.sfltsi r15,32767
|
||||||
|
l.sfltsi r1,1
|
||||||
|
l.sfltsi r30,3021
|
||||||
|
l.sfltsi r5,-27813
|
||||||
|
l.sfltsi r28,-8816
|
||||||
|
.text
|
||||||
|
l_sflesi:
|
||||||
|
l.sflesi r0,0
|
||||||
|
l.sflesi r31,-1
|
||||||
|
l.sflesi r16,-32768
|
||||||
|
l.sflesi r15,32767
|
||||||
|
l.sflesi r1,1
|
||||||
|
l.sflesi r18,11338
|
||||||
|
l.sflesi r29,18873
|
||||||
|
l.sflesi r28,26050
|
||||||
|
.text
|
||||||
|
l_sfeq:
|
||||||
|
l.sfeq r0,r0
|
||||||
|
l.sfeq r31,r31
|
||||||
|
l.sfeq r16,r16
|
||||||
|
l.sfeq r15,r15
|
||||||
|
l.sfeq r1,r1
|
||||||
|
l.sfeq r28,r26
|
||||||
|
l.sfeq r13,r6
|
||||||
|
l.sfeq r26,r9
|
||||||
|
.text
|
||||||
|
l_sfeqi:
|
||||||
|
l.sfeqi r0,0
|
||||||
|
l.sfeqi r31,-1
|
||||||
|
l.sfeqi r16,-32768
|
||||||
|
l.sfeqi r15,32767
|
||||||
|
l.sfeqi r1,1
|
||||||
|
l.sfeqi r10,25887
|
||||||
|
l.sfeqi r21,19894
|
||||||
|
l.sfeqi r18,-13419
|
||||||
|
.text
|
||||||
|
l_sfne:
|
||||||
|
l.sfne r0,r0
|
||||||
|
l.sfne r31,r31
|
||||||
|
l.sfne r16,r16
|
||||||
|
l.sfne r15,r15
|
||||||
|
l.sfne r1,r1
|
||||||
|
l.sfne r18,r27
|
||||||
|
l.sfne r6,r18
|
||||||
|
l.sfne r0,r30
|
||||||
|
.text
|
||||||
|
l_sfnei:
|
||||||
|
l.sfnei r0,0
|
||||||
|
l.sfnei r31,-1
|
||||||
|
l.sfnei r16,-32768
|
||||||
|
l.sfnei r15,32767
|
||||||
|
l.sfnei r1,1
|
||||||
|
l.sfnei r8,11410
|
||||||
|
l.sfnei r6,-19239
|
||||||
|
l.sfnei r20,-22783
|
||||||
|
|
||||||
|
l_lo:
|
||||||
|
l.addi r1, r1, lo(0xdeadbeef)
|
||||||
|
l_hi:
|
||||||
|
l.movhi r1, hi(0xdeadbeef)
|
||||||
|
|
||||||
|
l_mac:
|
||||||
|
l.mac r1,r2
|
||||||
|
l_maci:
|
||||||
|
l.maci r1,0
|
||||||
|
l.maci r2,-1
|
||||||
|
l.maci r2,32767
|
||||||
|
l.maci r2,-32768
|
@ -1,3 +1,7 @@
|
|||||||
|
2014-04-22 Christian Svensson <blue@cmd.nu>
|
||||||
|
|
||||||
|
* dis-asm.h: Remove openrisc and or32 support. Add support for or1k.
|
||||||
|
|
||||||
2014-04-10 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com>
|
2014-04-10 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com>
|
||||||
|
|
||||||
* elf/avr.h: Add new DIFF relocs.
|
* elf/avr.h: Add new DIFF relocs.
|
||||||
|
@ -1,3 +1,7 @@
|
|||||||
|
2014-04-22 Christian Svensson <blue@cmd.nu>
|
||||||
|
|
||||||
|
* or32.h: Delete.
|
||||||
|
|
||||||
2014-04-08 Jon TURNEY <jon.turney@dronecode.org.uk>
|
2014-04-08 Jon TURNEY <jon.turney@dronecode.org.uk>
|
||||||
|
|
||||||
* pe.h (external_IMAGE_DEBUG_DIRECTORY, _CV_INFO_PDB70)
|
* pe.h (external_IMAGE_DEBUG_DIRECTORY, _CV_INFO_PDB70)
|
||||||
|
@ -1,288 +0,0 @@
|
|||||||
/* COFF specification for OpenRISC 1000.
|
|
||||||
Copyright (C) 1993-2014 Free Software Foundation, Inc.
|
|
||||||
Contributed by David Wood @ New York University.
|
|
||||||
Modified by Johan Rydberg, <johan.rydberg@netinsight.se>
|
|
||||||
|
|
||||||
This file is part of BFD, the Binary File Descriptor library.
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
|
||||||
MA 02110-1301, USA. */
|
|
||||||
|
|
||||||
#ifndef OR32
|
|
||||||
# define OR32
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* File Header and related definitions. */
|
|
||||||
struct external_filehdr
|
|
||||||
{
|
|
||||||
char f_magic[2]; /* magic number */
|
|
||||||
char f_nscns[2]; /* number of sections */
|
|
||||||
char f_timdat[4]; /* time & date stamp */
|
|
||||||
char f_symptr[4]; /* file pointer to symtab */
|
|
||||||
char f_nsyms[4]; /* number of symtab entries */
|
|
||||||
char f_opthdr[2]; /* sizeof(optional hdr) */
|
|
||||||
char f_flags[2]; /* flags */
|
|
||||||
};
|
|
||||||
|
|
||||||
#define FILHDR struct external_filehdr
|
|
||||||
#define FILHSZ 20
|
|
||||||
|
|
||||||
/* Magic numbers for OpenRISC 1000. As it is know we use the
|
|
||||||
numbers for Am29000.
|
|
||||||
|
|
||||||
(AT&T will assign the "real" magic number). */
|
|
||||||
#define SIPFBOMAGIC 0572 /* Am29000 (Byte 0 is MSB). */
|
|
||||||
#define SIPRBOMAGIC 0573 /* Am29000 (Byte 0 is LSB). */
|
|
||||||
|
|
||||||
#define OR32_MAGIC_BIG SIPFBOMAGIC
|
|
||||||
#define OR32_MAGIC_LITTLE SIPRBOMAGIC
|
|
||||||
#define OR32BADMAG(x) (((x).f_magic!=OR32_MAGIC_BIG) && \
|
|
||||||
((x).f_magic!=OR32_MAGIC_LITTLE))
|
|
||||||
|
|
||||||
#define OMAGIC OR32_MAGIC_BIG
|
|
||||||
|
|
||||||
/* Optional (a.out) header. */
|
|
||||||
typedef struct external_aouthdr
|
|
||||||
{
|
|
||||||
char magic[2]; /* type of file */
|
|
||||||
char vstamp[2]; /* version stamp */
|
|
||||||
char tsize[4]; /* text size in bytes, padded to FW bdry */
|
|
||||||
char dsize[4]; /* initialized data " " */
|
|
||||||
char bsize[4]; /* uninitialized data " " */
|
|
||||||
char entry[4]; /* entry pt. */
|
|
||||||
char text_start[4]; /* base of text used for this file */
|
|
||||||
char data_start[4]; /* base of data used for this file */
|
|
||||||
} AOUTHDR;
|
|
||||||
|
|
||||||
#define AOUTSZ 28
|
|
||||||
#define AOUTHDRSZ 28
|
|
||||||
|
|
||||||
/* aouthdr magic numbers. */
|
|
||||||
#define NMAGIC 0410 /* separate i/d executable. */
|
|
||||||
#define SHMAGIC 0406 /* NYU/Ultra3 shared data executable
|
|
||||||
(writable text). */
|
|
||||||
|
|
||||||
#define _ETEXT "_etext"
|
|
||||||
|
|
||||||
/* Section header and related definitions. */
|
|
||||||
struct external_scnhdr
|
|
||||||
{
|
|
||||||
char s_name[8]; /* section name */
|
|
||||||
char s_paddr[4]; /* physical address, aliased s_nlib */
|
|
||||||
char s_vaddr[4]; /* virtual address */
|
|
||||||
char s_size[4]; /* section size */
|
|
||||||
char s_scnptr[4]; /* file ptr to raw data for section */
|
|
||||||
char s_relptr[4]; /* file ptr to relocation */
|
|
||||||
char s_lnnoptr[4]; /* file ptr to line numbers */
|
|
||||||
char s_nreloc[2]; /* number of relocation entries */
|
|
||||||
char s_nlnno[2]; /* number of line number entries */
|
|
||||||
char s_flags[4]; /* flags */
|
|
||||||
};
|
|
||||||
|
|
||||||
#define SCNHDR struct external_scnhdr
|
|
||||||
#define SCNHSZ 40
|
|
||||||
|
|
||||||
/* Names of "special" sections: */
|
|
||||||
#define _TEXT ".text"
|
|
||||||
#define _DATA ".data"
|
|
||||||
#define _BSS ".bss"
|
|
||||||
#define _LIT ".lit"
|
|
||||||
|
|
||||||
/* Section types - with additional section type for global
|
|
||||||
registers which will be relocatable for the OpenRISC 1000.
|
|
||||||
|
|
||||||
In instances where it is necessary for a linker to produce an
|
|
||||||
output file which contains text or data not based at virtual
|
|
||||||
address 0, e.g. for a ROM, then the linker should accept
|
|
||||||
address base information as command input and use PAD sections
|
|
||||||
to skip over unused addresses. */
|
|
||||||
#define STYP_BSSREG 0x1200 /* Global register area (like STYP_INFO) */
|
|
||||||
#define STYP_ENVIR 0x2200 /* Environment (like STYP_INFO) */
|
|
||||||
#define STYP_ABS 0x4000 /* Absolute (allocated, not reloc, loaded) */
|
|
||||||
|
|
||||||
/* Relocation information declaration and related definitions: */
|
|
||||||
struct external_reloc
|
|
||||||
{
|
|
||||||
char r_vaddr[4]; /* (virtual) address of reference */
|
|
||||||
char r_symndx[4]; /* index into symbol table */
|
|
||||||
char r_type[2]; /* relocation type */
|
|
||||||
};
|
|
||||||
|
|
||||||
#define RELOC struct external_reloc
|
|
||||||
#define RELSZ 10 /* sizeof (RELOC) */
|
|
||||||
|
|
||||||
/* Relocation types for the OpenRISC 1000: */
|
|
||||||
|
|
||||||
#define R_ABS 0 /* reference is absolute */
|
|
||||||
#define R_IREL 030 /* instruction relative (jmp/call) */
|
|
||||||
#define R_IABS 031 /* instruction absolute (jmp/call) */
|
|
||||||
#define R_ILOHALF 032 /* instruction low half (const) */
|
|
||||||
#define R_IHIHALF 033 /* instruction high half (consth) part 1 */
|
|
||||||
#define R_IHCONST 034 /* instruction high half (consth) part 2 */
|
|
||||||
/* constant offset of R_IHIHALF relocation */
|
|
||||||
#define R_BYTE 035 /* relocatable byte value */
|
|
||||||
#define R_HWORD 036 /* relocatable halfword value */
|
|
||||||
#define R_WORD 037 /* relocatable word value */
|
|
||||||
|
|
||||||
#define R_IGLBLRC 040 /* instruction global register RC */
|
|
||||||
#define R_IGLBLRA 041 /* instruction global register RA */
|
|
||||||
#define R_IGLBLRB 042 /* instruction global register RB */
|
|
||||||
|
|
||||||
/*
|
|
||||||
NOTE:
|
|
||||||
All the "I" forms refer to 29000 instruction formats. The linker is
|
|
||||||
expected to know how the numeric information is split and/or aligned
|
|
||||||
within the instruction word(s). R_BYTE works for instructions, too.
|
|
||||||
|
|
||||||
If the parameter to a CONSTH instruction is a relocatable type, two
|
|
||||||
relocation records are written. The first has an r_type of R_IHIHALF
|
|
||||||
(33 octal) and a normal r_vaddr and r_symndx. The second relocation
|
|
||||||
record has an r_type of R_IHCONST (34 octal), a normal r_vaddr (which
|
|
||||||
is redundant), and an r_symndx containing the 32-bit constant offset
|
|
||||||
to the relocation instead of the actual symbol table index. This
|
|
||||||
second record is always written, even if the constant offset is zero.
|
|
||||||
The constant fields of the instruction are set to zero. */
|
|
||||||
|
|
||||||
/* Line number entry declaration and related definitions: */
|
|
||||||
struct external_lineno
|
|
||||||
{
|
|
||||||
union
|
|
||||||
{
|
|
||||||
char l_symndx[4]; /* function name symbol index, iff l_lnno == 0*/
|
|
||||||
char l_paddr[4]; /* (physical) address of line number */
|
|
||||||
}
|
|
||||||
l_addr;
|
|
||||||
|
|
||||||
char l_lnno[2]; /* line number */
|
|
||||||
};
|
|
||||||
|
|
||||||
#define LINENO struct external_lineno
|
|
||||||
#define LINESZ 6 /* sizeof (LINENO) */
|
|
||||||
|
|
||||||
/* Symbol entry declaration and related definitions: */
|
|
||||||
#define E_SYMNMLEN 8 /* Number of characters in a symbol name */
|
|
||||||
|
|
||||||
struct external_syment
|
|
||||||
{
|
|
||||||
union
|
|
||||||
{
|
|
||||||
char e_name[E_SYMNMLEN];
|
|
||||||
struct
|
|
||||||
{
|
|
||||||
char e_zeroes[4];
|
|
||||||
char e_offset[4];
|
|
||||||
}
|
|
||||||
e;
|
|
||||||
}
|
|
||||||
e;
|
|
||||||
|
|
||||||
char e_value[4];
|
|
||||||
char e_scnum[2];
|
|
||||||
char e_type[2];
|
|
||||||
char e_sclass[1];
|
|
||||||
char e_numaux[1];
|
|
||||||
};
|
|
||||||
|
|
||||||
#define SYMENT struct external_syment
|
|
||||||
#define SYMESZ 18
|
|
||||||
|
|
||||||
/* Storage class definitions - new classes for global registers: */
|
|
||||||
#define C_GLBLREG 19 /* global register */
|
|
||||||
#define C_EXTREG 20 /* external global register */
|
|
||||||
#define C_DEFREG 21 /* ext. def. of global register */
|
|
||||||
|
|
||||||
/* Derived symbol mask/shifts: */
|
|
||||||
#define N_BTMASK (0xf)
|
|
||||||
#define N_BTSHFT (4)
|
|
||||||
#define N_TMASK (0x30)
|
|
||||||
#define N_TSHIFT (2)
|
|
||||||
|
|
||||||
/* Auxiliary symbol table entry declaration and related
|
|
||||||
definitions. */
|
|
||||||
#define E_FILNMLEN 14 /* # characters in a file name */
|
|
||||||
#define E_DIMNUM 4 /* # array dimensions in auxiliary entry */
|
|
||||||
|
|
||||||
union external_auxent
|
|
||||||
{
|
|
||||||
struct
|
|
||||||
{
|
|
||||||
char x_tagndx[4]; /* str, un, or enum tag indx */
|
|
||||||
union
|
|
||||||
{
|
|
||||||
struct
|
|
||||||
{
|
|
||||||
char x_lnno[2]; /* declaration line number */
|
|
||||||
char x_size[2]; /* str/union/array size */
|
|
||||||
}
|
|
||||||
x_lnsz;
|
|
||||||
|
|
||||||
char x_fsize[4]; /* size of function */
|
|
||||||
}
|
|
||||||
x_misc;
|
|
||||||
|
|
||||||
union
|
|
||||||
{
|
|
||||||
struct /* if ISFCN, tag, or .bb */
|
|
||||||
{
|
|
||||||
char x_lnnoptr[4]; /* ptr to fcn line # */
|
|
||||||
char x_endndx[4]; /* entry ndx past block end */
|
|
||||||
}
|
|
||||||
x_fcn;
|
|
||||||
|
|
||||||
struct /* if ISARY, up to 4 dimen. */
|
|
||||||
{
|
|
||||||
char x_dimen[E_DIMNUM][2];
|
|
||||||
}
|
|
||||||
x_ary;
|
|
||||||
}
|
|
||||||
x_fcnary;
|
|
||||||
|
|
||||||
char x_tvndx[2]; /* tv index */
|
|
||||||
}
|
|
||||||
x_sym;
|
|
||||||
|
|
||||||
union
|
|
||||||
{
|
|
||||||
char x_fname[E_FILNMLEN];
|
|
||||||
|
|
||||||
struct
|
|
||||||
{
|
|
||||||
char x_zeroes[4];
|
|
||||||
char x_offset[4];
|
|
||||||
}
|
|
||||||
x_n;
|
|
||||||
}
|
|
||||||
x_file;
|
|
||||||
|
|
||||||
struct
|
|
||||||
{
|
|
||||||
char x_scnlen[4]; /* section length */
|
|
||||||
char x_nreloc[2]; /* # relocation entries */
|
|
||||||
char x_nlinno[2]; /* # line numbers */
|
|
||||||
}
|
|
||||||
x_scn;
|
|
||||||
|
|
||||||
struct
|
|
||||||
{
|
|
||||||
char x_tvfill[4]; /* tv fill value */
|
|
||||||
char x_tvlen[2]; /* length of .tv */
|
|
||||||
char x_tvran[2][2]; /* tv range */
|
|
||||||
}
|
|
||||||
x_tv; /* info about .tv section
|
|
||||||
(in auxent of symbol .tv)) */
|
|
||||||
};
|
|
||||||
|
|
||||||
#define AUXENT union external_auxent
|
|
||||||
#define AUXESZ 18
|
|
@ -226,7 +226,6 @@ extern int print_insn_bfin (bfd_vma, disassemble_info *);
|
|||||||
extern int print_insn_big_arm (bfd_vma, disassemble_info *);
|
extern int print_insn_big_arm (bfd_vma, disassemble_info *);
|
||||||
extern int print_insn_big_mips (bfd_vma, disassemble_info *);
|
extern int print_insn_big_mips (bfd_vma, disassemble_info *);
|
||||||
extern int print_insn_big_nios2 (bfd_vma, disassemble_info *);
|
extern int print_insn_big_nios2 (bfd_vma, disassemble_info *);
|
||||||
extern int print_insn_big_or32 (bfd_vma, disassemble_info *);
|
|
||||||
extern int print_insn_big_powerpc (bfd_vma, disassemble_info *);
|
extern int print_insn_big_powerpc (bfd_vma, disassemble_info *);
|
||||||
extern int print_insn_big_score (bfd_vma, disassemble_info *);
|
extern int print_insn_big_score (bfd_vma, disassemble_info *);
|
||||||
extern int print_insn_cr16 (bfd_vma, disassemble_info *);
|
extern int print_insn_cr16 (bfd_vma, disassemble_info *);
|
||||||
@ -254,7 +253,6 @@ extern int print_insn_iq2000 (bfd_vma, disassemble_info *);
|
|||||||
extern int print_insn_little_arm (bfd_vma, disassemble_info *);
|
extern int print_insn_little_arm (bfd_vma, disassemble_info *);
|
||||||
extern int print_insn_little_mips (bfd_vma, disassemble_info *);
|
extern int print_insn_little_mips (bfd_vma, disassemble_info *);
|
||||||
extern int print_insn_little_nios2 (bfd_vma, disassemble_info *);
|
extern int print_insn_little_nios2 (bfd_vma, disassemble_info *);
|
||||||
extern int print_insn_little_or32 (bfd_vma, disassemble_info *);
|
|
||||||
extern int print_insn_little_powerpc (bfd_vma, disassemble_info *);
|
extern int print_insn_little_powerpc (bfd_vma, disassemble_info *);
|
||||||
extern int print_insn_little_score (bfd_vma, disassemble_info *);
|
extern int print_insn_little_score (bfd_vma, disassemble_info *);
|
||||||
extern int print_insn_lm32 (bfd_vma, disassemble_info *);
|
extern int print_insn_lm32 (bfd_vma, disassemble_info *);
|
||||||
@ -278,7 +276,7 @@ extern int print_insn_msp430 (bfd_vma, disassemble_info *);
|
|||||||
extern int print_insn_mt (bfd_vma, disassemble_info *);
|
extern int print_insn_mt (bfd_vma, disassemble_info *);
|
||||||
extern int print_insn_nds32 (bfd_vma, disassemble_info *);
|
extern int print_insn_nds32 (bfd_vma, disassemble_info *);
|
||||||
extern int print_insn_ns32k (bfd_vma, disassemble_info *);
|
extern int print_insn_ns32k (bfd_vma, disassemble_info *);
|
||||||
extern int print_insn_openrisc (bfd_vma, disassemble_info *);
|
extern int print_insn_or1k (bfd_vma, disassemble_info *);
|
||||||
extern int print_insn_pdp11 (bfd_vma, disassemble_info *);
|
extern int print_insn_pdp11 (bfd_vma, disassemble_info *);
|
||||||
extern int print_insn_pj (bfd_vma, disassemble_info *);
|
extern int print_insn_pj (bfd_vma, disassemble_info *);
|
||||||
extern int print_insn_rs6000 (bfd_vma, disassemble_info *);
|
extern int print_insn_rs6000 (bfd_vma, disassemble_info *);
|
||||||
|
@ -1,3 +1,10 @@
|
|||||||
|
2014-04-22 Christian Svensson <blue@cmd.nu>
|
||||||
|
|
||||||
|
* common.h: Remove openrisc and or32 support. Add support for or1k.
|
||||||
|
* or1k.h: New file.
|
||||||
|
* openrisc.h: Delete.
|
||||||
|
* or32.h: Delete.
|
||||||
|
|
||||||
2014-03-05 Alan Modra <amodra@gmail.com>
|
2014-03-05 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
Update copyright years.
|
Update copyright years.
|
||||||
|
@ -192,7 +192,7 @@
|
|||||||
#define EM_MN10300 89 /* Matsushita MN10300 */
|
#define EM_MN10300 89 /* Matsushita MN10300 */
|
||||||
#define EM_MN10200 90 /* Matsushita MN10200 */
|
#define EM_MN10200 90 /* Matsushita MN10200 */
|
||||||
#define EM_PJ 91 /* picoJava */
|
#define EM_PJ 91 /* picoJava */
|
||||||
#define EM_OPENRISC 92 /* OpenRISC 32-bit embedded processor */
|
#define EM_OR1K 92 /* OpenRISC 1000 32-bit embedded processor */
|
||||||
#define EM_ARC_A5 93 /* ARC Cores Tangent-A5 */
|
#define EM_ARC_A5 93 /* ARC Cores Tangent-A5 */
|
||||||
#define EM_XTENSA 94 /* Tensilica Xtensa Architecture */
|
#define EM_XTENSA 94 /* Tensilica Xtensa Architecture */
|
||||||
#define EM_VIDEOCORE 95 /* Alphamosaic VideoCore processor */
|
#define EM_VIDEOCORE 95 /* Alphamosaic VideoCore processor */
|
||||||
@ -339,9 +339,6 @@
|
|||||||
/* FR30 magic number - no EABI available. */
|
/* FR30 magic number - no EABI available. */
|
||||||
#define EM_CYGNUS_FR30 0x3330
|
#define EM_CYGNUS_FR30 0x3330
|
||||||
|
|
||||||
/* OpenRISC magic number. Written in the absense of an ABI. */
|
|
||||||
#define EM_OPENRISC_OLD 0x3426
|
|
||||||
|
|
||||||
/* DLX magic number. Written in the absense of an ABI. */
|
/* DLX magic number. Written in the absense of an ABI. */
|
||||||
#define EM_DLX 0x5aa5
|
#define EM_DLX 0x5aa5
|
||||||
|
|
||||||
@ -360,9 +357,6 @@
|
|||||||
/* Ubicom IP2xxx; Written in the absense of an ABI. */
|
/* Ubicom IP2xxx; Written in the absense of an ABI. */
|
||||||
#define EM_IP2K_OLD 0x8217
|
#define EM_IP2K_OLD 0x8217
|
||||||
|
|
||||||
/* (Deprecated) Temporary number for the OpenRISC processor. */
|
|
||||||
#define EM_OR32 0x8472
|
|
||||||
|
|
||||||
/* Cygnus PowerPC ELF backend. Written in the absence of an ABI. */
|
/* Cygnus PowerPC ELF backend. Written in the absence of an ABI. */
|
||||||
#define EM_CYGNUS_POWERPC 0x9025
|
#define EM_CYGNUS_POWERPC 0x9025
|
||||||
|
|
||||||
@ -408,6 +402,9 @@
|
|||||||
|
|
||||||
#define EM_ADAPTEVA_EPIPHANY 0x1223 /* Adapteva's Epiphany architecture. */
|
#define EM_ADAPTEVA_EPIPHANY 0x1223 /* Adapteva's Epiphany architecture. */
|
||||||
|
|
||||||
|
/* Old constant that might be in use by some software. */
|
||||||
|
#define EM_OPENRISC EM_OR1K
|
||||||
|
|
||||||
/* See the above comment before you add a new EM_* value here. */
|
/* See the above comment before you add a new EM_* value here. */
|
||||||
|
|
||||||
/* Values for e_version. */
|
/* Values for e_version. */
|
||||||
|
@ -1,39 +0,0 @@
|
|||||||
/* OpenRISC ELF support for BFD.
|
|
||||||
Copyright (C) 2001-2014 Free Software Foundation, Inc.
|
|
||||||
|
|
||||||
This file is part of BFD, the Binary File Descriptor library.
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software Foundation,
|
|
||||||
Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
|
|
||||||
|
|
||||||
#ifndef _ELF_OPENRISC_H
|
|
||||||
#define _ELF_OPENRISC_H
|
|
||||||
|
|
||||||
#include "elf/reloc-macros.h"
|
|
||||||
|
|
||||||
/* Relocations. */
|
|
||||||
START_RELOC_NUMBERS (elf_openrisc_reloc_type)
|
|
||||||
RELOC_NUMBER (R_OPENRISC_NONE, 0)
|
|
||||||
RELOC_NUMBER (R_OPENRISC_INSN_REL_26, 1)
|
|
||||||
RELOC_NUMBER (R_OPENRISC_INSN_ABS_26, 2)
|
|
||||||
RELOC_NUMBER (R_OPENRISC_LO_16_IN_INSN, 3)
|
|
||||||
RELOC_NUMBER (R_OPENRISC_HI_16_IN_INSN, 4)
|
|
||||||
RELOC_NUMBER (R_OPENRISC_8, 5)
|
|
||||||
RELOC_NUMBER (R_OPENRISC_16, 6)
|
|
||||||
RELOC_NUMBER (R_OPENRISC_32, 7)
|
|
||||||
RELOC_NUMBER (R_OPENRISC_GNU_VTINHERIT, 8)
|
|
||||||
RELOC_NUMBER (R_OPENRISC_GNU_VTENTRY, 9)
|
|
||||||
END_RELOC_NUMBERS (R_OPENRISC_max)
|
|
||||||
|
|
||||||
#endif /* _ELF_OPENRISC_H */
|
|
65
include/elf/or1k.h
Normal file
65
include/elf/or1k.h
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
/* Or1k ELF support for BFD.
|
||||||
|
Copyright 2001-2014 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of BFD, the Binary File Descriptor library.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, see <http://www.gnu.org/licenses/> */
|
||||||
|
|
||||||
|
#ifndef _ELF_OR1K_H
|
||||||
|
#define _ELF_OR1K_H
|
||||||
|
|
||||||
|
#include "elf/reloc-macros.h"
|
||||||
|
|
||||||
|
/* Relocations. */
|
||||||
|
START_RELOC_NUMBERS (elf_or1k_reloc_type)
|
||||||
|
RELOC_NUMBER (R_OR1K_NONE, 0)
|
||||||
|
RELOC_NUMBER (R_OR1K_32, 1)
|
||||||
|
RELOC_NUMBER (R_OR1K_16, 2)
|
||||||
|
RELOC_NUMBER (R_OR1K_8, 3)
|
||||||
|
RELOC_NUMBER (R_OR1K_LO_16_IN_INSN, 4)
|
||||||
|
RELOC_NUMBER (R_OR1K_HI_16_IN_INSN, 5)
|
||||||
|
RELOC_NUMBER (R_OR1K_INSN_REL_26, 6)
|
||||||
|
RELOC_NUMBER (R_OR1K_GNU_VTENTRY, 7)
|
||||||
|
RELOC_NUMBER (R_OR1K_GNU_VTINHERIT, 8)
|
||||||
|
RELOC_NUMBER (R_OR1K_32_PCREL, 9)
|
||||||
|
RELOC_NUMBER (R_OR1K_16_PCREL, 10)
|
||||||
|
RELOC_NUMBER (R_OR1K_8_PCREL, 11)
|
||||||
|
RELOC_NUMBER (R_OR1K_GOTPC_HI16, 12)
|
||||||
|
RELOC_NUMBER (R_OR1K_GOTPC_LO16, 13)
|
||||||
|
RELOC_NUMBER (R_OR1K_GOT16, 14)
|
||||||
|
RELOC_NUMBER (R_OR1K_PLT26, 15)
|
||||||
|
RELOC_NUMBER (R_OR1K_GOTOFF_HI16, 16)
|
||||||
|
RELOC_NUMBER (R_OR1K_GOTOFF_LO16, 17)
|
||||||
|
RELOC_NUMBER (R_OR1K_COPY, 18)
|
||||||
|
RELOC_NUMBER (R_OR1K_GLOB_DAT, 19)
|
||||||
|
RELOC_NUMBER (R_OR1K_JMP_SLOT, 20)
|
||||||
|
RELOC_NUMBER (R_OR1K_RELATIVE, 21)
|
||||||
|
RELOC_NUMBER (R_OR1K_TLS_GD_HI16, 22)
|
||||||
|
RELOC_NUMBER (R_OR1K_TLS_GD_LO16, 23)
|
||||||
|
RELOC_NUMBER (R_OR1K_TLS_LDM_HI16, 24)
|
||||||
|
RELOC_NUMBER (R_OR1K_TLS_LDM_LO16, 25)
|
||||||
|
RELOC_NUMBER (R_OR1K_TLS_LDO_HI16, 26)
|
||||||
|
RELOC_NUMBER (R_OR1K_TLS_LDO_LO16, 27)
|
||||||
|
RELOC_NUMBER (R_OR1K_TLS_IE_HI16, 28)
|
||||||
|
RELOC_NUMBER (R_OR1K_TLS_IE_LO16, 29)
|
||||||
|
RELOC_NUMBER (R_OR1K_TLS_LE_HI16, 30)
|
||||||
|
RELOC_NUMBER (R_OR1K_TLS_LE_LO16, 31)
|
||||||
|
RELOC_NUMBER (R_OR1K_TLS_TPOFF, 32)
|
||||||
|
RELOC_NUMBER (R_OR1K_TLS_DTPOFF, 33)
|
||||||
|
RELOC_NUMBER (R_OR1K_TLS_DTPMOD, 34)
|
||||||
|
END_RELOC_NUMBERS (R_OR1K_max)
|
||||||
|
|
||||||
|
#define EF_OR1K_NODELAY (1UL << 0)
|
||||||
|
|
||||||
|
#endif /* _ELF_OR1K_H */
|
@ -1,56 +0,0 @@
|
|||||||
/* OR1K ELF support for BFD. Derived from ppc.h.
|
|
||||||
Copyright (C) 2002-2014 Free Software Foundation, Inc.
|
|
||||||
Contributed by Ivan Guzvinec <ivang@opencores.org>
|
|
||||||
|
|
||||||
This file is part of BFD, the Binary File Descriptor library.
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
|
||||||
MA 02110-1301, USA. */
|
|
||||||
|
|
||||||
#ifndef _ELF_OR1K_H
|
|
||||||
#define _ELF_OR1K_H
|
|
||||||
|
|
||||||
#include "elf/reloc-macros.h"
|
|
||||||
|
|
||||||
/* Relocations. */
|
|
||||||
START_RELOC_NUMBERS (elf_or32_reloc_type)
|
|
||||||
RELOC_NUMBER (R_OR32_NONE, 0)
|
|
||||||
RELOC_NUMBER (R_OR32_32, 1)
|
|
||||||
RELOC_NUMBER (R_OR32_16, 2)
|
|
||||||
RELOC_NUMBER (R_OR32_8, 3)
|
|
||||||
RELOC_NUMBER (R_OR32_CONST, 4)
|
|
||||||
RELOC_NUMBER (R_OR32_CONSTH, 5)
|
|
||||||
RELOC_NUMBER (R_OR32_JUMPTARG, 6)
|
|
||||||
RELOC_NUMBER (R_OR32_GNU_VTENTRY, 7)
|
|
||||||
RELOC_NUMBER (R_OR32_GNU_VTINHERIT, 8)
|
|
||||||
END_RELOC_NUMBERS (R_OR32_max)
|
|
||||||
|
|
||||||
/* Four bit OR32 machine type field. */
|
|
||||||
#define EF_OR32_MACH 0x0000000f
|
|
||||||
|
|
||||||
/* Various CPU types. */
|
|
||||||
#define E_OR32_MACH_BASE 0x00000000
|
|
||||||
#define E_OR32_MACH_UNUSED1 0x00000001
|
|
||||||
#define E_OR32_MACH_UNUSED2 0x00000002
|
|
||||||
#define E_OR32_MACH_UNUSED4 0x00000003
|
|
||||||
|
|
||||||
/* Processor specific section headers, sh_type field */
|
|
||||||
#define SHT_ORDERED SHT_HIPROC /* Link editor is to sort the \
|
|
||||||
entries in this section \
|
|
||||||
based on the address \
|
|
||||||
specified in the associated \
|
|
||||||
symbol table entry. */
|
|
||||||
|
|
||||||
#endif /* _ELF_OR1K_H */
|
|
@ -1,3 +1,7 @@
|
|||||||
|
2014-04-22 Christian Svensson <blue@cmd.nu>
|
||||||
|
|
||||||
|
* or32.h: Delete.
|
||||||
|
|
||||||
2014-03-05 Alan Modra <amodra@gmail.com>
|
2014-03-05 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
Update copyright years.
|
Update copyright years.
|
||||||
|
@ -1,181 +0,0 @@
|
|||||||
/* Table of opcodes for the OpenRISC 1000 ISA.
|
|
||||||
Copyright (C) 2002-2014 Free Software Foundation, Inc.
|
|
||||||
Contributed by Damjan Lampret (lampret@opencores.org).
|
|
||||||
|
|
||||||
This file is part of or1k_gen_isa, or1ksim, GDB and GAS.
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
|
||||||
MA 02110-1301, USA. */
|
|
||||||
|
|
||||||
/* We treat all letters the same in encode/decode routines so
|
|
||||||
we need to assign some characteristics to them like signess etc. */
|
|
||||||
|
|
||||||
#ifndef OR32_H_ISA
|
|
||||||
#define OR32_H_ISA
|
|
||||||
|
|
||||||
#define NUM_UNSIGNED (0)
|
|
||||||
#define NUM_SIGNED (1)
|
|
||||||
|
|
||||||
#define MAX_GPRS 32
|
|
||||||
#define PAGE_SIZE 4096
|
|
||||||
#undef __HALF_WORD_INSN__
|
|
||||||
|
|
||||||
#define OPERAND_DELIM (',')
|
|
||||||
|
|
||||||
#define OR32_IF_DELAY (1)
|
|
||||||
#define OR32_W_FLAG (2)
|
|
||||||
#define OR32_R_FLAG (4)
|
|
||||||
|
|
||||||
struct or32_letter
|
|
||||||
{
|
|
||||||
char letter;
|
|
||||||
int sign;
|
|
||||||
/* int reloc; relocation per letter ?? */
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Main instruction specification array. */
|
|
||||||
struct or32_opcode
|
|
||||||
{
|
|
||||||
/* Name of the instruction. */
|
|
||||||
char *name;
|
|
||||||
|
|
||||||
/* A string of characters which describe the operands.
|
|
||||||
Valid characters are:
|
|
||||||
,() Itself. Characters appears in the assembly code.
|
|
||||||
rA Register operand.
|
|
||||||
rB Register operand.
|
|
||||||
rD Register operand.
|
|
||||||
I An immediate operand, range -32768 to 32767.
|
|
||||||
J An immediate operand, range . (unused)
|
|
||||||
K An immediate operand, range 0 to 65535.
|
|
||||||
L An immediate operand, range 0 to 63.
|
|
||||||
M An immediate operand, range . (unused)
|
|
||||||
N An immediate operand, range -33554432 to 33554431.
|
|
||||||
O An immediate operand, range . (unused). */
|
|
||||||
char *args;
|
|
||||||
|
|
||||||
/* Opcode and operand encoding. */
|
|
||||||
char *encoding;
|
|
||||||
void (*exec) (void);
|
|
||||||
unsigned int flags;
|
|
||||||
};
|
|
||||||
|
|
||||||
#define OPTYPE_LAST (0x80000000)
|
|
||||||
#define OPTYPE_OP (0x40000000)
|
|
||||||
#define OPTYPE_REG (0x20000000)
|
|
||||||
#define OPTYPE_SIG (0x10000000)
|
|
||||||
#define OPTYPE_DIS (0x08000000)
|
|
||||||
#define OPTYPE_DST (0x04000000)
|
|
||||||
#define OPTYPE_SBIT (0x00001F00)
|
|
||||||
#define OPTYPE_SHR (0x0000001F)
|
|
||||||
#define OPTYPE_SBIT_SHR (8)
|
|
||||||
|
|
||||||
/* MM: Data how to decode operands. */
|
|
||||||
extern struct insn_op_struct
|
|
||||||
{
|
|
||||||
unsigned long type;
|
|
||||||
unsigned long data;
|
|
||||||
} **op_start;
|
|
||||||
|
|
||||||
#ifdef HAS_EXECUTION
|
|
||||||
extern void l_invalid (void);
|
|
||||||
extern void l_sfne (void);
|
|
||||||
extern void l_bf (void);
|
|
||||||
extern void l_add (void);
|
|
||||||
extern void l_sw (void);
|
|
||||||
extern void l_sb (void);
|
|
||||||
extern void l_sh (void);
|
|
||||||
extern void l_lwz (void);
|
|
||||||
extern void l_lbs (void);
|
|
||||||
extern void l_lbz (void);
|
|
||||||
extern void l_lhs (void);
|
|
||||||
extern void l_lhz (void);
|
|
||||||
extern void l_movhi (void);
|
|
||||||
extern void l_and (void);
|
|
||||||
extern void l_or (void);
|
|
||||||
extern void l_xor (void);
|
|
||||||
extern void l_sub (void);
|
|
||||||
extern void l_mul (void);
|
|
||||||
extern void l_div (void);
|
|
||||||
extern void l_divu (void);
|
|
||||||
extern void l_sll (void);
|
|
||||||
extern void l_sra (void);
|
|
||||||
extern void l_srl (void);
|
|
||||||
extern void l_j (void);
|
|
||||||
extern void l_jal (void);
|
|
||||||
extern void l_jalr (void);
|
|
||||||
extern void l_jr (void);
|
|
||||||
extern void l_rfe (void);
|
|
||||||
extern void l_nop (void);
|
|
||||||
extern void l_bnf (void);
|
|
||||||
extern void l_sfeq (void);
|
|
||||||
extern void l_sfgts (void);
|
|
||||||
extern void l_sfges (void);
|
|
||||||
extern void l_sflts (void);
|
|
||||||
extern void l_sfles (void);
|
|
||||||
extern void l_sfgtu (void);
|
|
||||||
extern void l_sfgeu (void);
|
|
||||||
extern void l_sfltu (void);
|
|
||||||
extern void l_sfleu (void);
|
|
||||||
extern void l_mtspr (void);
|
|
||||||
extern void l_mfspr (void);
|
|
||||||
extern void l_sys (void);
|
|
||||||
extern void l_trap (void); /* CZ 21/06/01. */
|
|
||||||
extern void l_macrc (void);
|
|
||||||
extern void l_mac (void);
|
|
||||||
extern void l_msb (void);
|
|
||||||
extern void l_invalid (void);
|
|
||||||
extern void l_cust1 (void);
|
|
||||||
extern void l_cust2 (void);
|
|
||||||
extern void l_cust3 (void);
|
|
||||||
extern void l_cust4 (void);
|
|
||||||
#endif
|
|
||||||
extern void l_none (void);
|
|
||||||
|
|
||||||
extern const struct or32_letter or32_letters[];
|
|
||||||
|
|
||||||
extern const struct or32_opcode or32_opcodes[];
|
|
||||||
|
|
||||||
extern const unsigned int or32_num_opcodes;
|
|
||||||
|
|
||||||
/* Calculates instruction length in bytes. Always 4 for OR32. */
|
|
||||||
extern int insn_len (int);
|
|
||||||
|
|
||||||
/* Is individual insn's operand signed or unsigned? */
|
|
||||||
extern int letter_signed (char);
|
|
||||||
|
|
||||||
/* Number of letters in the individual lettered operand. */
|
|
||||||
extern int letter_range (char);
|
|
||||||
|
|
||||||
/* MM: Returns index of given instruction name. */
|
|
||||||
extern int insn_index (char *);
|
|
||||||
|
|
||||||
/* MM: Returns instruction name from index. */
|
|
||||||
extern const char *insn_name (int);
|
|
||||||
|
|
||||||
/* MM: Constructs new FSM, based on or32_opcodes. */
|
|
||||||
extern void build_automata (void);
|
|
||||||
|
|
||||||
/* MM: Destructs FSM. */
|
|
||||||
extern void destruct_automata (void);
|
|
||||||
|
|
||||||
/* MM: Decodes instruction using FSM. Call build_automata first. */
|
|
||||||
extern int insn_decode (unsigned int);
|
|
||||||
|
|
||||||
/* Disassemble one instruction from insn to disassemble.
|
|
||||||
Return the size of the instruction. */
|
|
||||||
int disassemble_insn (unsigned long);
|
|
||||||
|
|
||||||
#endif
|
|
12
ld/ChangeLog
12
ld/ChangeLog
@ -1,3 +1,15 @@
|
|||||||
|
2014-04-22 Christian Svensson <blue@cmd.nu>
|
||||||
|
|
||||||
|
* Makefile.am: Remove openrisc and or32 support. Add support for or1k.
|
||||||
|
* configure.tgt: Likewise.
|
||||||
|
* emulparams/elf32or1k.sh: New file.
|
||||||
|
* emulparams/elf32or1k_linux.sh: New file.
|
||||||
|
* emulparams/elf32openrisc.sh: Delete.
|
||||||
|
* emulparams/or32.sh: Delete.
|
||||||
|
* emulparams/or32elf.sh: Delete.
|
||||||
|
* scripttempl/or32.sc: Delete.
|
||||||
|
* Makefile.in: Regenerate.
|
||||||
|
|
||||||
2014-04-21 Richard Henderson <rth@redhat.com>
|
2014-04-21 Richard Henderson <rth@redhat.com>
|
||||||
|
|
||||||
* emultempl/alphaelf.em (alpha_after_parse): Enable 2 relax passes.
|
* emultempl/alphaelf.em (alpha_after_parse): Enable 2 relax passes.
|
||||||
|
@ -245,7 +245,8 @@ ALL_EMULATION_SOURCES = \
|
|||||||
eelf32microblaze.c \
|
eelf32microblaze.c \
|
||||||
eelf32moxie.c \
|
eelf32moxie.c \
|
||||||
eelf32mt.c \
|
eelf32mt.c \
|
||||||
eelf32openrisc.c \
|
eelf32or1k.c \
|
||||||
|
eelf32or1k_linux.c \
|
||||||
eelf32ppc.c \
|
eelf32ppc.c \
|
||||||
eelf32ppc_fbsd.c \
|
eelf32ppc_fbsd.c \
|
||||||
eelf32ppclinux.c \
|
eelf32ppclinux.c \
|
||||||
@ -348,8 +349,6 @@ ALL_EMULATION_SOURCES = \
|
|||||||
ends32belf_linux.c \
|
ends32belf_linux.c \
|
||||||
enews.c \
|
enews.c \
|
||||||
ens32knbsd.c \
|
ens32knbsd.c \
|
||||||
eor32.c \
|
|
||||||
eor32elf.c \
|
|
||||||
epc532macha.c \
|
epc532macha.c \
|
||||||
epdp11.c \
|
epdp11.c \
|
||||||
epjelf.c \
|
epjelf.c \
|
||||||
@ -1134,9 +1133,12 @@ eelf32moxie.c: $(srcdir)/emulparams/elf32moxie.sh \
|
|||||||
eelf32mt.c: $(srcdir)/emulparams/elf32mt.sh \
|
eelf32mt.c: $(srcdir)/emulparams/elf32mt.sh \
|
||||||
$(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
$(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
||||||
${GENSCRIPTS} elf32mt "$(tdir_mt)"
|
${GENSCRIPTS} elf32mt "$(tdir_mt)"
|
||||||
eelf32openrisc.c: $(srcdir)/emulparams/elf32openrisc.sh \
|
eelf32or1k.c: $(srcdir)/emulparams/elf32or1k.sh \
|
||||||
$(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
$(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
||||||
${GENSCRIPTS} elf32openrisc "$(tdir_openrisc)"
|
${GENSCRIPTS} elf32or1k "$(tdir_elf32or1k)"
|
||||||
|
eelf32or1k_linux.c: $(srcdir)/emulparams/elf32or1k_linux.sh \
|
||||||
|
$(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
||||||
|
${GENSCRIPTS} elf32or1k_linux "$(tdir_elf32or1k_linux)"
|
||||||
eelf32ppc.c: $(srcdir)/emulparams/elf32ppc.sh \
|
eelf32ppc.c: $(srcdir)/emulparams/elf32ppc.sh \
|
||||||
$(srcdir)/emulparams/elf32ppccommon.sh $(srcdir)/emultempl/ppc32elf.em \
|
$(srcdir)/emulparams/elf32ppccommon.sh $(srcdir)/emultempl/ppc32elf.em \
|
||||||
ldemul-list.h \
|
ldemul-list.h \
|
||||||
@ -1542,12 +1544,6 @@ eaarch64linux32b.c: $(srcdir)/emulparams/aarch64linux32b.sh $(srcdir)/emulparams
|
|||||||
$(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
|
$(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
|
||||||
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
||||||
${GENSCRIPTS} aarch64linux32b "$(tdir_aarch64linux32b)"
|
${GENSCRIPTS} aarch64linux32b "$(tdir_aarch64linux32b)"
|
||||||
eor32.c: $(srcdir)/emulparams/or32.sh \
|
|
||||||
$(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/or32.sc ${GEN_DEPENDS}
|
|
||||||
${GENSCRIPTS} or32 "$(tdir_or32)"
|
|
||||||
eor32elf.c: $(srcdir)/emulparams/or32elf.sh \
|
|
||||||
$(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
|
||||||
${GENSCRIPTS} or32elf "$(tdir_or32elf)"
|
|
||||||
epc532macha.c: $(srcdir)/emulparams/pc532macha.sh \
|
epc532macha.c: $(srcdir)/emulparams/pc532macha.sh \
|
||||||
$(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
|
$(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
|
||||||
${GENSCRIPTS} pc532macha "$(tdir_pc532macha)"
|
${GENSCRIPTS} pc532macha "$(tdir_pc532macha)"
|
||||||
|
@ -552,7 +552,8 @@ ALL_EMULATION_SOURCES = \
|
|||||||
eelf32microblaze.c \
|
eelf32microblaze.c \
|
||||||
eelf32moxie.c \
|
eelf32moxie.c \
|
||||||
eelf32mt.c \
|
eelf32mt.c \
|
||||||
eelf32openrisc.c \
|
eelf32or1k.c \
|
||||||
|
eelf32or1k_linux.c \
|
||||||
eelf32ppc.c \
|
eelf32ppc.c \
|
||||||
eelf32ppc_fbsd.c \
|
eelf32ppc_fbsd.c \
|
||||||
eelf32ppclinux.c \
|
eelf32ppclinux.c \
|
||||||
@ -655,8 +656,6 @@ ALL_EMULATION_SOURCES = \
|
|||||||
ends32belf_linux.c \
|
ends32belf_linux.c \
|
||||||
enews.c \
|
enews.c \
|
||||||
ens32knbsd.c \
|
ens32knbsd.c \
|
||||||
eor32.c \
|
|
||||||
eor32elf.c \
|
|
||||||
epc532macha.c \
|
epc532macha.c \
|
||||||
epdp11.c \
|
epdp11.c \
|
||||||
epjelf.c \
|
epjelf.c \
|
||||||
@ -1164,7 +1163,8 @@ distclean-compile:
|
|||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32mipswindiss.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32mipswindiss.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32moxie.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32moxie.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32mt.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32mt.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32openrisc.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32or1k.Po@am__quote@
|
||||||
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32or1k_linux.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32ppc.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32ppc.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32ppc_fbsd.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32ppc_fbsd.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32ppclinux.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32ppclinux.Po@am__quote@
|
||||||
@ -1301,8 +1301,6 @@ distclean-compile:
|
|||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ends32elf_linux.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ends32elf_linux.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/enews.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/enews.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ens32knbsd.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ens32knbsd.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eor32.Po@am__quote@
|
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eor32elf.Po@am__quote@
|
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/epc532macha.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/epc532macha.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/epdp11.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/epdp11.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/epjelf.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/epjelf.Po@am__quote@
|
||||||
@ -2569,9 +2567,12 @@ eelf32moxie.c: $(srcdir)/emulparams/elf32moxie.sh \
|
|||||||
eelf32mt.c: $(srcdir)/emulparams/elf32mt.sh \
|
eelf32mt.c: $(srcdir)/emulparams/elf32mt.sh \
|
||||||
$(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
$(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
||||||
${GENSCRIPTS} elf32mt "$(tdir_mt)"
|
${GENSCRIPTS} elf32mt "$(tdir_mt)"
|
||||||
eelf32openrisc.c: $(srcdir)/emulparams/elf32openrisc.sh \
|
eelf32or1k.c: $(srcdir)/emulparams/elf32or1k.sh \
|
||||||
$(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
$(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
||||||
${GENSCRIPTS} elf32openrisc "$(tdir_openrisc)"
|
${GENSCRIPTS} elf32or1k "$(tdir_elf32or1k)"
|
||||||
|
eelf32or1k_linux.c: $(srcdir)/emulparams/elf32or1k_linux.sh \
|
||||||
|
$(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
||||||
|
${GENSCRIPTS} elf32or1k_linux "$(tdir_elf32or1k_linux)"
|
||||||
eelf32ppc.c: $(srcdir)/emulparams/elf32ppc.sh \
|
eelf32ppc.c: $(srcdir)/emulparams/elf32ppc.sh \
|
||||||
$(srcdir)/emulparams/elf32ppccommon.sh $(srcdir)/emultempl/ppc32elf.em \
|
$(srcdir)/emulparams/elf32ppccommon.sh $(srcdir)/emultempl/ppc32elf.em \
|
||||||
ldemul-list.h \
|
ldemul-list.h \
|
||||||
@ -2977,12 +2978,6 @@ eaarch64linux32b.c: $(srcdir)/emulparams/aarch64linux32b.sh $(srcdir)/emulparams
|
|||||||
$(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
|
$(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
|
||||||
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
||||||
${GENSCRIPTS} aarch64linux32b "$(tdir_aarch64linux32b)"
|
${GENSCRIPTS} aarch64linux32b "$(tdir_aarch64linux32b)"
|
||||||
eor32.c: $(srcdir)/emulparams/or32.sh \
|
|
||||||
$(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/or32.sc ${GEN_DEPENDS}
|
|
||||||
${GENSCRIPTS} or32 "$(tdir_or32)"
|
|
||||||
eor32elf.c: $(srcdir)/emulparams/or32elf.sh \
|
|
||||||
$(ELF_GEN_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
|
||||||
${GENSCRIPTS} or32elf "$(tdir_or32elf)"
|
|
||||||
epc532macha.c: $(srcdir)/emulparams/pc532macha.sh \
|
epc532macha.c: $(srcdir)/emulparams/pc532macha.sh \
|
||||||
$(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
|
$(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
|
||||||
${GENSCRIPTS} pc532macha "$(tdir_pc532macha)"
|
${GENSCRIPTS} pc532macha "$(tdir_pc532macha)"
|
||||||
|
2
ld/NEWS
2
ld/NEWS
@ -1,5 +1,7 @@
|
|||||||
-*- text -*-
|
-*- text -*-
|
||||||
|
|
||||||
|
* Replace support for openrisc and or32 with support for or1k.
|
||||||
|
|
||||||
* Add support for the --build-id command line option to COFF based targets.
|
* Add support for the --build-id command line option to COFF based targets.
|
||||||
|
|
||||||
* x86/x86_64 pe-coff now supports the --build-id option.
|
* x86/x86_64 pe-coff now supports the --build-id option.
|
||||||
|
@ -527,10 +527,9 @@ nios2*-*-*) targ_emul=nios2elf ;;
|
|||||||
ns32k-pc532-mach* | ns32k-pc532-ux*) targ_emul=pc532macha ;;
|
ns32k-pc532-mach* | ns32k-pc532-ux*) targ_emul=pc532macha ;;
|
||||||
ns32k-*-netbsd* | ns32k-pc532-lites*) targ_emul=ns32knbsd
|
ns32k-*-netbsd* | ns32k-pc532-lites*) targ_emul=ns32knbsd
|
||||||
;;
|
;;
|
||||||
openrisc-*-*) targ_emul=elf32openrisc ;;
|
or1k-*-elf | or1knd-*-elf) targ_emul=elf32or1k ;;
|
||||||
or32-*-coff) targ_emul=or32 ;;
|
or1k-*-linux* | or1knd-*-linux*) targ_emul=elf32or1k_linux ;;
|
||||||
or32-*-elf) targ_emul=or32elf ;;
|
or1k-*-rtems* | or1knd-*-rtems*) targ_emul=elf32or1k
|
||||||
or32-*-rtems*) targ_emul=or32elf
|
|
||||||
;;
|
;;
|
||||||
pdp11-*-*) targ_emul=pdp11
|
pdp11-*-*) targ_emul=pdp11
|
||||||
;;
|
;;
|
||||||
|
@ -1,11 +0,0 @@
|
|||||||
MACHINE=
|
|
||||||
SCRIPT_NAME=elf
|
|
||||||
OUTPUT_FORMAT="elf32-openrisc"
|
|
||||||
NO_RELA_RELOCS=yes
|
|
||||||
TEXT_START_ADDR=0x10000
|
|
||||||
ARCH=openrisc
|
|
||||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
|
||||||
ENTRY=_start
|
|
||||||
EMBEDDED=yes
|
|
||||||
NOP=0x15000000
|
|
||||||
|
|
14
ld/emulparams/elf32or1k.sh
Normal file
14
ld/emulparams/elf32or1k.sh
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
SCRIPT_NAME=elf
|
||||||
|
MACHINE=
|
||||||
|
TEMPLATE_NAME=elf32
|
||||||
|
OUTPUT_FORMAT="elf32-or1k"
|
||||||
|
NOP=0x15000000
|
||||||
|
TEXT_START_ADDR=0x0000
|
||||||
|
TARGET_PAGE_SIZE=0x2000
|
||||||
|
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||||
|
EMBEDDED=yes
|
||||||
|
ARCH=or1k
|
||||||
|
ELFSIZE=32
|
||||||
|
INITIAL_READONLY_SECTIONS=".vectors ${RELOCATING-0} : { KEEP (*(.vectors)) }"
|
||||||
|
NO_REL_RELOCS=yes
|
||||||
|
COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
|
5
ld/emulparams/elf32or1k_linux.sh
Normal file
5
ld/emulparams/elf32or1k_linux.sh
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
. ${srcdir}/emulparams/elf32or1k.sh
|
||||||
|
unset EMBEDDED
|
||||||
|
GENERATE_SHLIB_SCRIPT=yes
|
||||||
|
GENERATE_PIE_SCRIPT=yes
|
||||||
|
GENERATE_COMBRELOC_SCRIPT=yes
|
@ -1,5 +0,0 @@
|
|||||||
SCRIPT_NAME=or32
|
|
||||||
OUTPUT_FORMAT="coff-or32-big"
|
|
||||||
TEXT_START_ADDR=0x1000000
|
|
||||||
TARGET_PAGE_SIZE=0x1000000
|
|
||||||
ARCH=or32
|
|
@ -1,9 +0,0 @@
|
|||||||
SCRIPT_NAME=elf
|
|
||||||
TEMPLATE_NAME=generic
|
|
||||||
EXTRA_EM_FILE=genelf
|
|
||||||
OUTPUT_FORMAT="elf32-or32"
|
|
||||||
NO_RELA_RELOCS=yes
|
|
||||||
TEXT_START_ADDR=0x1000000
|
|
||||||
TARGET_PAGE_SIZE=0x1000000
|
|
||||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
|
||||||
ARCH=or32
|
|
@ -1,37 +0,0 @@
|
|||||||
cat <<EOF
|
|
||||||
OUTPUT_FORMAT("${OUTPUT_FORMAT}")
|
|
||||||
${LIB_SEARCH_DIRS}
|
|
||||||
|
|
||||||
SECTIONS
|
|
||||||
{
|
|
||||||
.text : {
|
|
||||||
*(.text)
|
|
||||||
${RELOCATING+ __etext = .};
|
|
||||||
${CONSTRUCTING+ __CTOR_LIST__ = .;}
|
|
||||||
${CONSTRUCTING+ LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2)}
|
|
||||||
${CONSTRUCTING+ *(.ctors)}
|
|
||||||
${CONSTRUCTING+ LONG(0)}
|
|
||||||
${CONSTRUCTING+ __CTOR_END__ = .;}
|
|
||||||
${CONSTRUCTING+ __DTOR_LIST__ = .;}
|
|
||||||
${CONSTRUCTING+ LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2)}
|
|
||||||
${CONSTRUCTING+ *(.dtors)}
|
|
||||||
${CONSTRUCTING+ LONG(0)}
|
|
||||||
${CONSTRUCTING+ __DTOR_END__ = .;}
|
|
||||||
*(.lit)
|
|
||||||
*(.shdata)
|
|
||||||
}
|
|
||||||
.shbss SIZEOF(.text) + ADDR(.text) : {
|
|
||||||
*(.shbss)
|
|
||||||
}
|
|
||||||
.data : {
|
|
||||||
*(.data)
|
|
||||||
${RELOCATING+ __edata = .};
|
|
||||||
}
|
|
||||||
.bss SIZEOF(.data) + ADDR(.data) :
|
|
||||||
{
|
|
||||||
*(.bss)
|
|
||||||
*(COMMON)
|
|
||||||
${RELOCATING+ __end = ALIGN(0x8)};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
EOF
|
|
@ -1,3 +1,33 @@
|
|||||||
|
2014-04-22 Christian Svensson <blue@cmd.nu>
|
||||||
|
|
||||||
|
* ld-discard/extern.d: Remove openrisc and or32 support. Add
|
||||||
|
support for or1k.
|
||||||
|
* ld-discard/start.d: Likewise.
|
||||||
|
* ld-discard/static.d: Likewise.
|
||||||
|
* ld-elf/group1.d: Likewise.
|
||||||
|
* ld-elf/group3b.d: Likewise.
|
||||||
|
* ld-elf/group8a.d: Likewise.
|
||||||
|
* ld-elf/group8b.d: Likewise.
|
||||||
|
* ld-elf/group9a.d: Likewise.
|
||||||
|
* ld-elf/group9b.d: Likewise.
|
||||||
|
* ld-elf/linkonce2.d: Likewise.
|
||||||
|
* ld-elf/merge.d: Likewise.
|
||||||
|
* ld-elf/merge2.d: Likewise.
|
||||||
|
* ld-elf/orphan-region.d: Likewise.
|
||||||
|
* ld-elf/orphan.d: Likewise.
|
||||||
|
* ld-elf/orphan3.d: Likewise.
|
||||||
|
* ld-elf/pr12851.d: Likewise.
|
||||||
|
* ld-elf/pr12975.d: Likewise.
|
||||||
|
* ld-elf/pr13177.d: Likewise.
|
||||||
|
* ld-elf/pr13195.d: Likewise.
|
||||||
|
* ld-elf/pr349.d: Likewise.
|
||||||
|
* ld-elf/sec64k.exp: Likewise.
|
||||||
|
* ld-elf/warn1.d: Likewise.
|
||||||
|
* ld-elf/warn2.d: Likewise.
|
||||||
|
* ld-elf/warn3.d: Likewise.
|
||||||
|
* ld-scripts/weak.exp: Likewise.
|
||||||
|
* lib/ld-lib.exp: Likewise.
|
||||||
|
|
||||||
2014-04-17 Kwok Cheung Yeung <kcy@codesourcery.com>
|
2014-04-17 Kwok Cheung Yeung <kcy@codesourcery.com>
|
||||||
|
|
||||||
* ld-mips-elf/elf-rel-xgot-n32.d: Update for new GOT layout.
|
* ld-mips-elf/elf-rel-xgot-n32.d: Update for new GOT layout.
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
#ld: -T discard.ld
|
#ld: -T discard.ld
|
||||||
#error: .*data.* referenced in section `\.text' of tmpdir/dump0.o: defined in discarded section `\.data\.exit' of tmpdir/dump0.o
|
#error: .*data.* referenced in section `\.text' of tmpdir/dump0.o: defined in discarded section `\.data\.exit' of tmpdir/dump0.o
|
||||||
#objdump: -p
|
#objdump: -p
|
||||||
#xfail: arc-*-* d30v-*-* dlx-*-* i960-*-* or32-*-* pj*-*-*
|
#xfail: arc-*-* d30v-*-* dlx-*-* i960-*-* pj*-*-*
|
||||||
#xfail: m68hc12-*-* m6812-*-*
|
#xfail: m68hc12-*-* m6812-*-*
|
||||||
#pass
|
#pass
|
||||||
# The expected warning used to start with "`data' referenced..." but
|
# The expected warning used to start with "`data' referenced..." but
|
||||||
|
@ -3,6 +3,6 @@
|
|||||||
#ld: -T discard.ld
|
#ld: -T discard.ld
|
||||||
#error: `data' referenced in section `\.text' of tmpdir/dump0.o: defined in discarded section `\.data\.exit' of tmpdir/dump1.o
|
#error: `data' referenced in section `\.text' of tmpdir/dump0.o: defined in discarded section `\.data\.exit' of tmpdir/dump1.o
|
||||||
#objdump: -p
|
#objdump: -p
|
||||||
#xfail: arc-*-* d30v-*-* dlx-*-* i960-*-* or32-*-* pj*-*-*
|
#xfail: arc-*-* d30v-*-* dlx-*-* i960-*-* pj*-*-*
|
||||||
#xfail: m68hc12-*-* m6812-*-*
|
#xfail: m68hc12-*-* m6812-*-*
|
||||||
#pass
|
#pass
|
||||||
|
@ -2,6 +2,6 @@
|
|||||||
#ld: -T discard.ld
|
#ld: -T discard.ld
|
||||||
#error: `(\.data\.exit|data)' referenced in section `\.text' of tmpdir/dump0.o: defined in discarded section `\.data\.exit' of tmpdir/dump0.o
|
#error: `(\.data\.exit|data)' referenced in section `\.text' of tmpdir/dump0.o: defined in discarded section `\.data\.exit' of tmpdir/dump0.o
|
||||||
#objdump: -p
|
#objdump: -p
|
||||||
#xfail: arc-*-* d30v-*-* dlx-*-* i960-*-* or32-*-* pj*-*-*
|
#xfail: arc-*-* d30v-*-* dlx-*-* i960-*-* pj*-*-*
|
||||||
#xfail: m68hc12-*-* m6812-*-*
|
#xfail: m68hc12-*-* m6812-*-*
|
||||||
#pass
|
#pass
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
#ld: -e _start --eh-frame-hdr
|
#ld: -e _start --eh-frame-hdr
|
||||||
#objdump: -hw
|
#objdump: -hw
|
||||||
#target: cfi
|
#target: cfi
|
||||||
#xfail: avr*-*-*
|
#xfail: avr*-*-* or1k-*-*
|
||||||
# avr doesn't support shared libraries.
|
# avr doesn't support shared libraries.
|
||||||
#...
|
#...
|
||||||
[0-9] .eh_frame_hdr 0*[12][048c] .*
|
[0-9] .eh_frame_hdr 0*[12][048c] .*
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
#source: group1b.s
|
#source: group1b.s
|
||||||
#ld: -T group.ld
|
#ld: -T group.ld
|
||||||
#readelf: -s
|
#readelf: -s
|
||||||
#xfail: arc-*-* d30v-*-* dlx-*-* i960-*-* or32-*-* pj*-*-*
|
#xfail: arc-*-* d30v-*-* dlx-*-* i960-*-* pj*-*-*
|
||||||
# generic linker targets don't comply with all symbol merging rules
|
# generic linker targets don't comply with all symbol merging rules
|
||||||
|
|
||||||
Symbol table '.symtab' contains .* entries:
|
Symbol table '.symtab' contains .* entries:
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
#source: group3a.s
|
#source: group3a.s
|
||||||
#ld: -T group.ld
|
#ld: -T group.ld
|
||||||
#readelf: -s
|
#readelf: -s
|
||||||
#xfail: arc-*-* d30v-*-* dlx-*-* i960-*-* or32-*-* pj*-*-*
|
#xfail: arc-*-* d30v-*-* dlx-*-* i960-*-* pj*-*-*
|
||||||
# generic linker targets don't comply with all symbol merging rules
|
# generic linker targets don't comply with all symbol merging rules
|
||||||
|
|
||||||
Symbol table '.symtab' contains .* entries:
|
Symbol table '.symtab' contains .* entries:
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#source: group8.s
|
#source: group8.s
|
||||||
#ld: -r --gc-sections --entry foo
|
#ld: -r --gc-sections --entry foo
|
||||||
#readelf: -g --wide
|
#readelf: -g --wide
|
||||||
#notarget: arc-*-* d30v-*-* dlx-*-* i960-*-* or32-*-* pj*-*-*
|
#notarget: arc-*-* d30v-*-* dlx-*-* i960-*-* pj*-*-*
|
||||||
#notarget: hppa64-*-* i370-*-* i860-*-* ia64-*-* mep-*-* mn10200-*-*
|
#notarget: hppa64-*-* i370-*-* i860-*-* ia64-*-* mep-*-* mn10200-*-*
|
||||||
#xfail: cr16-*-* crx-*-*
|
#xfail: cr16-*-* crx-*-*
|
||||||
# generic linker targets don't support --gc-sections, nor do a bunch of others
|
# generic linker targets don't support --gc-sections, nor do a bunch of others
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#source: group8.s
|
#source: group8.s
|
||||||
#ld: -r --gc-sections --entry bar
|
#ld: -r --gc-sections --entry bar
|
||||||
#readelf: -g --wide
|
#readelf: -g --wide
|
||||||
#notarget: arc-*-* d30v-*-* dlx-*-* i960-*-* or32-*-* pj*-*-*
|
#notarget: arc-*-* d30v-*-* dlx-*-* i960-*-* pj*-*-*
|
||||||
#notarget: hppa64-*-* i370-*-* i860-*-* ia64-*-* mep-*-* mn10200-*-*
|
#notarget: hppa64-*-* i370-*-* i860-*-* ia64-*-* mep-*-* mn10200-*-*
|
||||||
#xfail: cr16-*-* crx-*-*
|
#xfail: cr16-*-* crx-*-*
|
||||||
# generic linker targets don't support --gc-sections, nor do a bunch of others
|
# generic linker targets don't support --gc-sections, nor do a bunch of others
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#source: group9.s
|
#source: group9.s
|
||||||
#ld: -r --gc-sections --entry foo
|
#ld: -r --gc-sections --entry foo
|
||||||
#readelf: -g --wide
|
#readelf: -g --wide
|
||||||
#notarget: arc-*-* d30v-*-* dlx-*-* i960-*-* or32-*-* pj*-*-*
|
#notarget: arc-*-* d30v-*-* dlx-*-* i960-*-* pj*-*-*
|
||||||
#notarget: alpha-*-* hppa64-*-* i370-*-* i860-*-* ia64-*-* mep-*-* mn10200-*-*
|
#notarget: alpha-*-* hppa64-*-* i370-*-* i860-*-* ia64-*-* mep-*-* mn10200-*-*
|
||||||
#xfail: cr16-*-* crx-*-*
|
#xfail: cr16-*-* crx-*-*
|
||||||
# generic linker targets don't support --gc-sections, nor do a bunch of others
|
# generic linker targets don't support --gc-sections, nor do a bunch of others
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#source: group9.s
|
#source: group9.s
|
||||||
#ld: -r --gc-sections --entry bar
|
#ld: -r --gc-sections --entry bar
|
||||||
#readelf: -g --wide
|
#readelf: -g --wide
|
||||||
#notarget: arc-*-* d30v-*-* dlx-*-* i960-*-* or32-*-* pj*-*-*
|
#notarget: arc-*-* d30v-*-* dlx-*-* i960-*-* pj*-*-*
|
||||||
#notarget: alpha-*-* hppa64-*-* i370-*-* i860-*-* ia64-*-* mep-*-* mn10200-*-*
|
#notarget: alpha-*-* hppa64-*-* i370-*-* i860-*-* ia64-*-* mep-*-* mn10200-*-*
|
||||||
#xfail: cr16-*-* crx-*-*
|
#xfail: cr16-*-* crx-*-*
|
||||||
# generic linker targets don't support --gc-sections, nor do a bunch of others
|
# generic linker targets don't support --gc-sections, nor do a bunch of others
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
#source: linkonce1b.s
|
#source: linkonce1b.s
|
||||||
#ld: -emit-relocs
|
#ld: -emit-relocs
|
||||||
#objdump: -r
|
#objdump: -r
|
||||||
#notarget: arc-*-* d30v-*-* dlx-*-* i960-*-* or32-*-* pj*-*-*
|
#notarget: arc-*-* d30v-*-* dlx-*-* i960-*-* pj*-*-*
|
||||||
# generic elf targets don't emit relocs
|
# generic elf targets don't emit relocs
|
||||||
|
|
||||||
.*: file format .*
|
.*: file format .*
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user