mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-23 18:14:13 +08:00
2012-11-09 Nick Clifton <nickc@redhat.com>
* Makefile.am (ALL_MACHINES): Add cpu-v850-rh850.lo. (ALL_MACHINES_CFILES): Add cpu-v850-rh850.c. * archures.c (bfd_arch_info): Add bfd_v850_rh850_arch. * config.bfd: Likewise. * configure.in: Add bfd_elf32_v850_rh850_vec. * cpu-v850.c: Update printed description. * cpu-v850_rh850.c: New file. * elf32-v850.c (v850_elf_check_relocs): Add support for RH850 ABI relocs. (v850_elf_perform_relocation): Likewise. (v850_elf_final_link_relocate): Likewise. (v850_elf_relocate_section): Likewise. (v850_elf_relax_section): Likewise. (v800_elf_howto_table): New. (v850_elf_object_p): Add support for RH850 ABI values. (v850_elf_final_write_processing): Likewise. (v850_elf_merge_private_bfd_data): Likewise. (v850_elf_print_private_bfd_data): Likewise. (v800_elf_reloc_map): New. (v800_elf_reloc_type_lookup): New. (v800_elf_reloc_name_lookup): New. (v800_elf_info_to_howto): New. (bfd_elf32_v850_rh850_vec): New. (bfd_arch_v850_rh850): New. * targets.c (_bfd_targets): Add bfd_elf32_v850_rh850_vec. * Makefile.in: Regenerate. * bfd-in2.h: Regenerate. * configure: Regenerate. * readelf.c (get_machine_flags): Add support for E_FLAG_RX_ABI. (guess_is_rela): Add EM_V800. (dump_relocations): Likewise. (get_machine_name): Update EM_V800. (get_machine_flags): Add support for RH850 ABI flags. (is_32bit_abs_reloc): Add support for RH850 ABI reloc. * config/tc-v850.c (v850_target_arch): New. (v850_target_format): New. (set_machine): Use v850_target_arch. (md_begin): Likewise. (md_show_usage): Document new switches. (md_parse_option): Add -mgcc-abi, -mrh850-abi, -m8byte-align and -m4byte-align. * config/tc-v850.c (TARGET_ARCH) Use v850_target_arch. (TARGET_FORMAT): Use v850_target_format. * doc/c-v850.texi: Document new options. * v850.h: Add RH850 ABI values. * Makefile.am: (ALL_EMULATION_SOURCES): Add ev850_rh850.c. * Makefile.in: Regenerate. * configure.tgt (v850*-*-*): Make v850_rh850 the default emulation. Add vanilla v850 as an extra emulation. * emulparams/v850_rh850.sh: New file. * scripttempl/v850_rh850.sc: New file. * configure.in: Add bfd_v850_rh850_arch. * configure: Regenerate. * disassemble.c (disassembler): Likewise.
This commit is contained in:
parent
708e2187a3
commit
de863c7475
@ -1,5 +1,34 @@
|
||||
2012-11-09 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* Makefile.am (ALL_MACHINES): Add cpu-v850-rh850.lo.
|
||||
(ALL_MACHINES_CFILES): Add cpu-v850-rh850.c.
|
||||
* archures.c (bfd_arch_info): Add bfd_v850_rh850_arch.
|
||||
* config.bfd: Likewise.
|
||||
* configure.in: Add bfd_elf32_v850_rh850_vec.
|
||||
* cpu-v850.c: Update printed description.
|
||||
* cpu-v850_rh850.c: New file.
|
||||
* elf32-v850.c (v850_elf_check_relocs): Add support for RH850 ABI
|
||||
relocs.
|
||||
(v850_elf_perform_relocation): Likewise.
|
||||
(v850_elf_final_link_relocate): Likewise.
|
||||
(v850_elf_relocate_section): Likewise.
|
||||
(v850_elf_relax_section): Likewise.
|
||||
(v800_elf_howto_table): New.
|
||||
(v850_elf_object_p): Add support for RH850 ABI values.
|
||||
(v850_elf_final_write_processing): Likewise.
|
||||
(v850_elf_merge_private_bfd_data): Likewise.
|
||||
(v850_elf_print_private_bfd_data): Likewise.
|
||||
(v800_elf_reloc_map): New.
|
||||
(v800_elf_reloc_type_lookup): New.
|
||||
(v800_elf_reloc_name_lookup): New.
|
||||
(v800_elf_info_to_howto): New.
|
||||
(bfd_elf32_v850_rh850_vec): New.
|
||||
(bfd_arch_v850_rh850): New.
|
||||
* targets.c (_bfd_targets): Add bfd_elf32_v850_rh850_vec.
|
||||
* Makefile.in: Regenerate.
|
||||
* bfd-in2.h: Regenerate.
|
||||
* configure: Regenerate.
|
||||
|
||||
* elf32-rx.c (describe_flags): New function. Returns a buffer
|
||||
containing a description of the E_FLAG_RX_... values set.
|
||||
(rx_elf_merge_private_bfd_data): Use it.
|
||||
|
@ -141,6 +141,7 @@ ALL_MACHINES = \
|
||||
cpu-tilegx.lo \
|
||||
cpu-tilepro.lo \
|
||||
cpu-v850.lo \
|
||||
cpu-v850_rh850.lo \
|
||||
cpu-vax.lo \
|
||||
cpu-w65.lo \
|
||||
cpu-we32k.lo \
|
||||
@ -222,6 +223,7 @@ ALL_MACHINES_CFILES = \
|
||||
cpu-tilegx.c \
|
||||
cpu-tilepro.c \
|
||||
cpu-v850.c \
|
||||
cpu-v850_rh850.c \
|
||||
cpu-vax.c \
|
||||
cpu-w65.c \
|
||||
cpu-we32k.c \
|
||||
|
@ -441,6 +441,7 @@ ALL_MACHINES = \
|
||||
cpu-tilegx.lo \
|
||||
cpu-tilepro.lo \
|
||||
cpu-v850.lo \
|
||||
cpu-v850_rh850.lo \
|
||||
cpu-vax.lo \
|
||||
cpu-w65.lo \
|
||||
cpu-we32k.lo \
|
||||
@ -522,6 +523,7 @@ ALL_MACHINES_CFILES = \
|
||||
cpu-tilegx.c \
|
||||
cpu-tilepro.c \
|
||||
cpu-v850.c \
|
||||
cpu-v850_rh850.c \
|
||||
cpu-vax.c \
|
||||
cpu-w65.c \
|
||||
cpu-we32k.c \
|
||||
@ -1344,6 +1346,7 @@ distclean-compile:
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-tic80.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-tilegx.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-tilepro.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-v850_rh850.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-v850.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-vax.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-w65.Plo@am__quote@
|
||||
|
@ -323,6 +323,7 @@ DESCRIPTION
|
||||
. bfd_arch_tic6x, {* Texas Instruments TMS320C6X *}
|
||||
. bfd_arch_tic80, {* TI TMS320c80 (MVP) *}
|
||||
. bfd_arch_v850, {* NEC V850 *}
|
||||
. bfd_arch_v850_rh850,{* NEC V850 (using RH850 ABI) *}
|
||||
.#define bfd_mach_v850 1
|
||||
.#define bfd_mach_v850e 'E'
|
||||
.#define bfd_mach_v850e1 '1'
|
||||
@ -578,6 +579,7 @@ extern const bfd_arch_info_type bfd_tic80_arch;
|
||||
extern const bfd_arch_info_type bfd_tilegx_arch;
|
||||
extern const bfd_arch_info_type bfd_tilepro_arch;
|
||||
extern const bfd_arch_info_type bfd_v850_arch;
|
||||
extern const bfd_arch_info_type bfd_v850_rh850_arch;
|
||||
extern const bfd_arch_info_type bfd_vax_arch;
|
||||
extern const bfd_arch_info_type bfd_w65_arch;
|
||||
extern const bfd_arch_info_type bfd_we32k_arch;
|
||||
@ -661,6 +663,7 @@ static const bfd_arch_info_type * const bfd_archures_list[] =
|
||||
&bfd_tilegx_arch,
|
||||
&bfd_tilepro_arch,
|
||||
&bfd_v850_arch,
|
||||
&bfd_v850_rh850_arch,
|
||||
&bfd_vax_arch,
|
||||
&bfd_w65_arch,
|
||||
&bfd_we32k_arch,
|
||||
|
@ -2054,6 +2054,7 @@ enum bfd_architecture
|
||||
bfd_arch_tic6x, /* Texas Instruments TMS320C6X */
|
||||
bfd_arch_tic80, /* TI TMS320c80 (MVP) */
|
||||
bfd_arch_v850, /* NEC V850 */
|
||||
bfd_arch_v850_rh850,/* NEC V850 (using RH850 ABI) */
|
||||
#define bfd_mach_v850 1
|
||||
#define bfd_mach_v850e 'E'
|
||||
#define bfd_mach_v850e1 '1'
|
||||
|
@ -103,7 +103,7 @@ sparc*) targ_archs=bfd_sparc_arch ;;
|
||||
spu*) targ_archs=bfd_spu_arch ;;
|
||||
tilegx*) targ_archs=bfd_tilegx_arch ;;
|
||||
tilepro*) targ_archs=bfd_tilepro_arch ;;
|
||||
v850*) targ_archs=bfd_v850_arch ;;
|
||||
v850*) targ_archs="bfd_v850_arch bfd_v850_rh850_arch" ;;
|
||||
x86_64*) targ_archs=bfd_i386_arch ;;
|
||||
xtensa*) targ_archs=bfd_xtensa_arch ;;
|
||||
xgate) targ_archs=bfd_xgate_arch ;;
|
||||
@ -1569,6 +1569,7 @@ case "${targ}" in
|
||||
|
||||
v850*-*-*)
|
||||
targ_defvec=bfd_elf32_v850_vec
|
||||
targ_selvecs="bfd_elf32_v850_rh850_vec"
|
||||
;;
|
||||
|
||||
vax-*-netbsdelf*)
|
||||
|
1
bfd/configure
vendored
1
bfd/configure
vendored
@ -15349,6 +15349,7 @@ do
|
||||
tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo" ;;
|
||||
bfd_elf32_us_cris_vec) tb="$tb elf32-cris.lo elf32.lo $elf" ;;
|
||||
bfd_elf32_v850_vec) tb="$tb elf32-v850.lo elf32.lo $elf" ;;
|
||||
bfd_elf32_v850_rh850_vec) tb="$tb elf32-v850.lo elf32.lo $elf" ;;
|
||||
bfd_elf32_vax_vec) tb="$tb elf32-vax.lo elf32.lo $elf" ;;
|
||||
bfd_elf32_xstormy16_vec) tb="$tb elf32-xstormy16.lo elf32.lo $elf" ;;
|
||||
bfd_elf32_xc16x_vec) tb="$tb elf32-xc16x.lo elf32.lo $elf" ;;
|
||||
|
@ -830,6 +830,7 @@ do
|
||||
tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo" ;;
|
||||
bfd_elf32_us_cris_vec) tb="$tb elf32-cris.lo elf32.lo $elf" ;;
|
||||
bfd_elf32_v850_vec) tb="$tb elf32-v850.lo elf32.lo $elf" ;;
|
||||
bfd_elf32_v850_rh850_vec) tb="$tb elf32-v850.lo elf32.lo $elf" ;;
|
||||
bfd_elf32_vax_vec) tb="$tb elf32-vax.lo elf32.lo $elf" ;;
|
||||
bfd_elf32_xstormy16_vec) tb="$tb elf32-xstormy16.lo elf32.lo $elf" ;;
|
||||
bfd_elf32_xc16x_vec) tb="$tb elf32-xc16x.lo elf32.lo $elf" ;;
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* BFD support for the NEC V850 processor
|
||||
Copyright 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2005, 2007,
|
||||
2010 Free Software Foundation, Inc.
|
||||
2010, 2012 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of BFD, the Binary File Descriptor library.
|
||||
|
||||
@ -25,7 +25,7 @@
|
||||
#include "safe-ctype.h"
|
||||
|
||||
#define N(number, print, default, next) \
|
||||
{ 32, 32, 8, bfd_arch_v850, number, "v850", print, 2, default, \
|
||||
{ 32, 32, 8, bfd_arch_v850, number, "v850", print " (using old gcc ABI)", 2, default, \
|
||||
bfd_default_compatible, bfd_default_scan, bfd_arch_default_fill, next }
|
||||
|
||||
#define NEXT NULL
|
||||
|
39
bfd/cpu-v850_rh850.c
Normal file
39
bfd/cpu-v850_rh850.c
Normal file
@ -0,0 +1,39 @@
|
||||
/* BFD support for the NEC V850 processor with the RH850 ABI.
|
||||
Copyright 2012 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. */
|
||||
|
||||
#include "sysdep.h"
|
||||
#include "bfd.h"
|
||||
#include "libbfd.h"
|
||||
#include "safe-ctype.h"
|
||||
|
||||
#define R(number, print, default, next) \
|
||||
{ 32, 32, 8, bfd_arch_v850_rh850, number, "v850", print, 2, default, \
|
||||
bfd_default_compatible, bfd_default_scan, bfd_arch_default_fill, next }
|
||||
|
||||
static const bfd_arch_info_type arch_info_struct[] =
|
||||
{
|
||||
R (bfd_mach_v850e2v3, "v850e2v3", FALSE, & arch_info_struct[1]),
|
||||
R (bfd_mach_v850e2, "v850e2", FALSE, & arch_info_struct[2]),
|
||||
R (bfd_mach_v850e1, "v850e1", FALSE, & arch_info_struct[3]),
|
||||
R (bfd_mach_v850e, "v850e", FALSE, NULL)
|
||||
};
|
||||
|
||||
const bfd_arch_info_type bfd_v850_rh850_arch =
|
||||
R (bfd_mach_v850, "v850-rh850", TRUE, & arch_info_struct[0]);
|
516
bfd/elf32-v850.c
516
bfd/elf32-v850.c
@ -55,7 +55,7 @@ v850_elf_check_relocs (bfd *abfd,
|
||||
struct elf_link_hash_entry **sym_hashes;
|
||||
const Elf_Internal_Rela *rel;
|
||||
const Elf_Internal_Rela *rel_end;
|
||||
enum v850_reloc_type r_type;
|
||||
unsigned int r_type;
|
||||
int other = 0;
|
||||
const char *common = NULL;
|
||||
|
||||
@ -87,32 +87,10 @@ v850_elf_check_relocs (bfd *abfd,
|
||||
h = (struct elf_link_hash_entry *) h->root.u.i.link;
|
||||
}
|
||||
|
||||
r_type = (enum v850_reloc_type) ELF32_R_TYPE (rel->r_info);
|
||||
r_type = ELF32_R_TYPE (rel->r_info);
|
||||
switch (r_type)
|
||||
{
|
||||
default:
|
||||
case R_V850_NONE:
|
||||
case R_V850_9_PCREL:
|
||||
case R_V850_16_PCREL:
|
||||
case R_V850_17_PCREL:
|
||||
case R_V850_22_PCREL:
|
||||
case R_V850_32_PCREL:
|
||||
case R_V850_32_ABS:
|
||||
case R_V850_HI16:
|
||||
case R_V850_HI16_S:
|
||||
case R_V850_LO16:
|
||||
case R_V850_LO16_S1:
|
||||
case R_V850_LO16_SPLIT_OFFSET:
|
||||
case R_V850_23:
|
||||
case R_V850_ABS32:
|
||||
case R_V850_REL32:
|
||||
case R_V850_16:
|
||||
case R_V850_16_S1:
|
||||
case R_V850_16_SPLIT_OFFSET:
|
||||
case R_V850_8:
|
||||
case R_V850_CALLT_6_7_OFFSET:
|
||||
case R_V850_CALLT_15_16_OFFSET:
|
||||
case R_V850_CALLT_16_16_OFFSET:
|
||||
break;
|
||||
|
||||
/* This relocation describes the C++ object vtable hierarchy.
|
||||
@ -134,6 +112,9 @@ v850_elf_check_relocs (bfd *abfd,
|
||||
case R_V850_SDA_16_16_SPLIT_OFFSET:
|
||||
case R_V850_SDA_16_16_OFFSET:
|
||||
case R_V850_SDA_15_16_OFFSET:
|
||||
case R_V810_GPWLO_1:
|
||||
case R_V850_HWLO:
|
||||
case R_V850_HWLO_1:
|
||||
other = V850_OTHER_SDA;
|
||||
common = ".scommon";
|
||||
goto small_data_common;
|
||||
@ -510,13 +491,19 @@ v850_elf_perform_relocation (bfd *abfd,
|
||||
switch (r_type)
|
||||
{
|
||||
default:
|
||||
#ifdef DEBUG
|
||||
fprintf (stderr, "reloc number %d not recognised\n", r_type);
|
||||
#endif
|
||||
return bfd_reloc_notsupported;
|
||||
|
||||
case R_V850_REL32:
|
||||
case R_V850_ABS32:
|
||||
case R_V810_WORD:
|
||||
case R_V850_PC32:
|
||||
bfd_put_32 (abfd, addend, address);
|
||||
return bfd_reloc_ok;
|
||||
|
||||
case R_V850_WLO23:
|
||||
case R_V850_23:
|
||||
insn = bfd_get_32 (abfd, address);
|
||||
insn &= ~((0x7f << 4) | (0x7fff80 << (16-7)));
|
||||
@ -524,6 +511,7 @@ v850_elf_perform_relocation (bfd *abfd,
|
||||
bfd_put_32 (abfd, (bfd_vma) insn, address);
|
||||
return bfd_reloc_ok;
|
||||
|
||||
case R_V850_PCR22:
|
||||
case R_V850_22_PCREL:
|
||||
if (saddend > 0x1fffff || saddend < -0x200000)
|
||||
return bfd_reloc_overflow;
|
||||
@ -537,6 +525,7 @@ v850_elf_perform_relocation (bfd *abfd,
|
||||
bfd_put_32 (abfd, (bfd_vma) insn, address);
|
||||
return bfd_reloc_ok;
|
||||
|
||||
case R_V850_PC17:
|
||||
case R_V850_17_PCREL:
|
||||
if (saddend > 0xffff || saddend < -0x10000)
|
||||
return bfd_reloc_overflow;
|
||||
@ -549,6 +538,7 @@ v850_elf_perform_relocation (bfd *abfd,
|
||||
insn |= ((addend & 0xfffe) << 16) | ((addend & 0x10000) >> (16-4));
|
||||
break;
|
||||
|
||||
case R_V850_PC16U:
|
||||
case R_V850_16_PCREL:
|
||||
if ((saddend < -0xffff) || (saddend > 0))
|
||||
return bfd_reloc_overflow;
|
||||
@ -561,6 +551,7 @@ v850_elf_perform_relocation (bfd *abfd,
|
||||
insn |= (-addend & 0xfffe);
|
||||
break;
|
||||
|
||||
case R_V850_PC9:
|
||||
case R_V850_9_PCREL:
|
||||
if (saddend > 0xff || saddend < -0x100)
|
||||
return bfd_reloc_overflow;
|
||||
@ -573,12 +564,14 @@ v850_elf_perform_relocation (bfd *abfd,
|
||||
insn |= ((addend & 0x1f0) << 7) | ((addend & 0x0e) << 3);
|
||||
break;
|
||||
|
||||
case R_V810_WHI:
|
||||
case R_V850_HI16:
|
||||
addend += (bfd_get_16 (abfd, address) << 16);
|
||||
addend = (addend >> 16);
|
||||
insn = addend;
|
||||
break;
|
||||
|
||||
case R_V810_WHI1:
|
||||
case R_V850_HI16_S:
|
||||
/* Remember where this relocation took place. */
|
||||
remember_hi16s_reloc (abfd, addend, address);
|
||||
@ -593,12 +586,14 @@ v850_elf_perform_relocation (bfd *abfd,
|
||||
insn = addend;
|
||||
break;
|
||||
|
||||
case R_V810_WLO:
|
||||
case R_V850_LO16:
|
||||
insn = bfd_get_16 (abfd, address);
|
||||
if (! v850_elf_perform_lo16_relocation (abfd, &insn, addend))
|
||||
return bfd_reloc_overflow;
|
||||
break;
|
||||
|
||||
case R_V810_BYTE:
|
||||
case R_V850_8:
|
||||
addend += (char) bfd_get_8 (abfd, address);
|
||||
|
||||
@ -652,6 +647,7 @@ v850_elf_perform_relocation (bfd *abfd,
|
||||
break;
|
||||
|
||||
case R_V850_16:
|
||||
case R_V810_HWORD:
|
||||
case R_V850_SDA_16_16_OFFSET:
|
||||
case R_V850_ZDA_16_16_OFFSET:
|
||||
case R_V850_TDA_16_16_OFFSET:
|
||||
@ -668,6 +664,7 @@ v850_elf_perform_relocation (bfd *abfd,
|
||||
case R_V850_16_S1:
|
||||
case R_V850_SDA_15_16_OFFSET:
|
||||
case R_V850_ZDA_15_16_OFFSET:
|
||||
case R_V810_GPWLO_1:
|
||||
insn = bfd_get_16 (abfd, address);
|
||||
addend += (insn & 0xfffe);
|
||||
|
||||
@ -756,6 +753,9 @@ v850_elf_perform_relocation (bfd *abfd,
|
||||
insn |= addend;
|
||||
break;
|
||||
|
||||
case R_V810_WLO_1:
|
||||
case R_V850_HWLO:
|
||||
case R_V850_HWLO_1:
|
||||
case R_V850_LO16_S1:
|
||||
insn = bfd_get_16 (abfd, address);
|
||||
result = insn & 0xfffe;
|
||||
@ -768,6 +768,7 @@ v850_elf_perform_relocation (bfd *abfd,
|
||||
bfd_put_16 (abfd, insn, address);
|
||||
return bfd_reloc_ok;
|
||||
|
||||
case R_V850_BLO:
|
||||
case R_V850_LO16_SPLIT_OFFSET:
|
||||
insn = bfd_get_32 (abfd, address);
|
||||
result = ((insn & 0xfffe0000) >> 16) | ((insn & 0x20) >> 5);
|
||||
@ -886,7 +887,7 @@ v850_elf_ignore_reloc (bfd *abfd ATTRIBUTE_UNUSED,
|
||||
}
|
||||
/* Note: It is REQUIRED that the 'type' value of each entry
|
||||
in this array match the index of the entry in the array.
|
||||
SeeAlso: RELOC_NUBMER in include/elf/v850.h */
|
||||
SeeAlso: RELOC_NUBMER in include/elf/v850.h. */
|
||||
static reloc_howto_type v850_elf_howto_table[] =
|
||||
{
|
||||
/* This reloc does nothing. */
|
||||
@ -1742,6 +1743,109 @@ static const struct v850_elf_reloc_map v850_elf_reloc_map[] =
|
||||
{ BFD_RELOC_V850_CODE, R_V850_CODE },
|
||||
{ BFD_RELOC_V850_DATA, R_V850_DATA },
|
||||
};
|
||||
|
||||
#define V800_RELOC(name,sz,bit,shift,complain,pcrel,resolver) \
|
||||
HOWTO (name, shift, sz, bit, pcrel, 0, complain_overflow_ ## complain, \
|
||||
bfd_elf_ ## resolver ## _reloc, #name, FALSE, 0, ~0, FALSE)
|
||||
|
||||
#define V800_EMPTY(name) EMPTY_HOWTO (name - R_V810_NONE)
|
||||
|
||||
#define bfd_elf_v850_reloc v850_elf_reloc
|
||||
|
||||
/* Note: It is REQUIRED that the 'type' value (R_V810_...) of each entry
|
||||
in this array match the index of the entry in the array minus 0x30.
|
||||
See: bfd_elf_v850_relocate_section(), v800_elf_reloc_type_lookup()
|
||||
and v800_elf_info_to_howto(). */
|
||||
|
||||
static reloc_howto_type v800_elf_howto_table[] =
|
||||
{
|
||||
V800_RELOC (R_V810_NONE, 0, 0, 0, dont, FALSE, generic), /* Type = 0x30 */
|
||||
V800_RELOC (R_V810_BYTE, 0, 8, 0, dont, FALSE, generic),
|
||||
V800_RELOC (R_V810_HWORD, 1, 16, 0, dont, FALSE, generic),
|
||||
V800_RELOC (R_V810_WORD, 2, 32, 0, dont, FALSE, generic),
|
||||
V800_RELOC (R_V810_WLO, 1, 16, 0, dont, FALSE, generic),
|
||||
V800_RELOC (R_V810_WHI, 1, 16, 0, dont, FALSE, generic),
|
||||
V800_RELOC (R_V810_WHI1, 1, 16, 0, dont, FALSE, generic),
|
||||
V800_RELOC (R_V810_GPBYTE, 0, 8, 0, dont, FALSE, v850),
|
||||
V800_RELOC (R_V810_GPHWORD, 1, 16, 0, dont, FALSE, v850),
|
||||
V800_RELOC (R_V810_GPWORD, 2, 32, 0, dont, FALSE, v850),
|
||||
V800_RELOC (R_V810_GPWLO, 1, 16, 0, dont, FALSE, v850),
|
||||
V800_RELOC (R_V810_GPWHI, 1, 16, 0, dont, FALSE, v850),
|
||||
V800_RELOC (R_V810_GPWHI1, 1, 16, 0, dont, FALSE, v850),
|
||||
V800_RELOC (R_V850_HWLO, 1, 16, 0, dont, FALSE, generic),
|
||||
V800_EMPTY (R_V810_reserved1),
|
||||
V800_RELOC (R_V850_EP7BIT, 0, 7, 0, unsigned, FALSE, v850),
|
||||
V800_RELOC (R_V850_EPHBYTE, 0, 8, 1, unsigned, FALSE, v850),
|
||||
V800_RELOC (R_V850_EPWBYTE, 0, 8, 2, unsigned, FALSE, v850),
|
||||
V800_RELOC (R_V850_REGHWLO, 1, 16, 0, dont, FALSE, v850),
|
||||
V800_EMPTY (R_V810_reserved2),
|
||||
V800_RELOC (R_V850_GPHWLO, 1, 16, 0, dont, FALSE, v850),
|
||||
V800_EMPTY (R_V810_reserved3),
|
||||
V800_RELOC (R_V850_PCR22, 2, 22, 0, signed, TRUE, generic),
|
||||
V800_RELOC (R_V850_BLO, 2, 24, 0, dont, FALSE, v850),
|
||||
V800_RELOC (R_V850_EP4BIT, 0, 4, 0, unsigned, FALSE, v850),
|
||||
V800_RELOC (R_V850_EP5BIT, 0, 5, 0, unsigned, FALSE, v850),
|
||||
V800_RELOC (R_V850_REGBLO, 2, 24, 0, dont, FALSE, v850),
|
||||
V800_RELOC (R_V850_GPBLO, 2, 24, 0, dont, FALSE, v850),
|
||||
V800_RELOC (R_V810_WLO_1, 1, 16, 0, dont, FALSE, v850),
|
||||
V800_RELOC (R_V810_GPWLO_1, 1, 16, 0, signed, FALSE, v850),
|
||||
V800_RELOC (R_V850_BLO_1, 2, 16, 0, signed, FALSE, v850),
|
||||
V800_RELOC (R_V850_HWLO_1, 1, 16, 0, signed, FALSE, v850),
|
||||
V800_EMPTY (R_V810_reserved4),
|
||||
V800_RELOC (R_V850_GPBLO_1, 2, 16, 1, signed, FALSE, v850),
|
||||
V800_RELOC (R_V850_GPHWLO_1, 1, 16, 1, signed, FALSE, v850),
|
||||
V800_EMPTY (R_V810_reserved5),
|
||||
V800_RELOC (R_V850_EPBLO, 2, 16, 1, signed, FALSE, v850),
|
||||
V800_RELOC (R_V850_EPHWLO, 1, 16, 1, signed, FALSE, v850),
|
||||
V800_EMPTY (R_V810_reserved6),
|
||||
V800_RELOC (R_V850_EPWLO_N, 1, 16, 1, signed, FALSE, v850),
|
||||
V800_RELOC (R_V850_PC32, 2, 32, 1, signed, TRUE, v850),
|
||||
V800_RELOC (R_V850_W23BIT, 2, 23, 1, signed, FALSE, v850),
|
||||
V800_RELOC (R_V850_GPW23BIT, 2, 23, 1, signed, FALSE, v850),
|
||||
V800_RELOC (R_V850_EPW23BIT, 2, 23, 1, signed, FALSE, v850),
|
||||
V800_RELOC (R_V850_B23BIT, 2, 23, 1, signed, FALSE, v850),
|
||||
V800_RELOC (R_V850_GPB23BIT, 2, 23, 1, signed, FALSE, v850),
|
||||
V800_RELOC (R_V850_EPB23BIT, 2, 23, 1, signed, FALSE, v850),
|
||||
V800_RELOC (R_V850_PC16U, 1, 16, 1, unsigned, TRUE, generic),
|
||||
V800_RELOC (R_V850_PC17, 2, 17, 1, signed, TRUE, generic),
|
||||
V800_RELOC (R_V850_DW8, 2, 8, 2, signed, FALSE, v850),
|
||||
V800_RELOC (R_V850_GPDW8, 2, 8, 2, signed, FALSE, v850),
|
||||
V800_RELOC (R_V850_EPDW8, 2, 8, 2, signed, FALSE, v850),
|
||||
V800_RELOC (R_V850_PC9, 1, 9, 3, signed, TRUE, v850),
|
||||
V800_RELOC (R_V810_REGBYTE, 0, 8, 0, dont, FALSE, v850),
|
||||
V800_RELOC (R_V810_REGHWORD, 1, 16, 0, dont, FALSE, v850),
|
||||
V800_RELOC (R_V810_REGWORD, 2, 32, 0, dont, FALSE, v850),
|
||||
V800_RELOC (R_V810_REGWLO, 1, 16, 0, dont, FALSE, v850),
|
||||
V800_RELOC (R_V810_REGWHI, 1, 16, 0, dont, FALSE, v850),
|
||||
V800_RELOC (R_V810_REGWHI1, 1, 16, 0, dont, FALSE, v850),
|
||||
V800_RELOC (R_V850_REGW23BIT, 2, 23, 1, signed, FALSE, v850),
|
||||
V800_RELOC (R_V850_REGB23BIT, 2, 23, 1, signed, FALSE, v850),
|
||||
V800_RELOC (R_V850_REGDW8, 2, 8, 2, signed, FALSE, v850),
|
||||
V800_RELOC (R_V810_EPBYTE, 0, 8, 0, dont, FALSE, v850),
|
||||
V800_RELOC (R_V810_EPHWORD, 1, 16, 0, dont, FALSE, v850),
|
||||
V800_RELOC (R_V810_EPWORD, 2, 32, 0, dont, FALSE, v850),
|
||||
V800_RELOC (R_V850_WLO23, 2, 32, 1, dont, FALSE, v850),
|
||||
V800_RELOC (R_V850_WORD_E, 2, 32, 1, dont, FALSE, v850),
|
||||
V800_RELOC (R_V850_REGWORD_E, 2, 32, 1, dont, FALSE, v850),
|
||||
V800_RELOC (R_V850_WORD, 2, 32, 0, dont, FALSE, v850),
|
||||
V800_RELOC (R_V850_GPWORD, 2, 32, 0, dont, FALSE, v850),
|
||||
V800_RELOC (R_V850_REGWORD, 2, 32, 0, dont, FALSE, v850),
|
||||
V800_RELOC (R_V850_EPWORD, 2, 32, 0, dont, FALSE, v850),
|
||||
V800_RELOC (R_V810_TPBYTE, 0, 8, 0, dont, FALSE, v850),
|
||||
V800_RELOC (R_V810_TPHWORD, 1, 16, 0, dont, FALSE, v850),
|
||||
V800_RELOC (R_V810_TPWORD, 2, 32, 0, dont, FALSE, v850),
|
||||
V800_RELOC (R_V810_TPWLO, 1, 16, 0, dont, FALSE, v850),
|
||||
V800_RELOC (R_V810_TPWHI, 1, 16, 0, dont, FALSE, v850),
|
||||
V800_RELOC (R_V810_TPWHI1, 1, 16, 0, dont, FALSE, v850),
|
||||
V800_RELOC (R_V850_TPHWLO, 1, 16, 1, dont, FALSE, v850),
|
||||
V800_RELOC (R_V850_TPBLO, 2, 24, 0, dont, FALSE, v850),
|
||||
V800_RELOC (R_V810_TPWLO_1, 1, 16, 0, signed, FALSE, v850),
|
||||
V800_RELOC (R_V850_TPBLO_1, 2, 16, 0, signed, FALSE, v850),
|
||||
V800_RELOC (R_V850_TPHWLO_1, 1, 16, 0, signed, FALSE, v850),
|
||||
V800_RELOC (R_V850_TP23BIT, 2, 23, 0, signed, FALSE, v850),
|
||||
V800_RELOC (R_V850_TPW23BIT, 2, 23, 0, signed, FALSE, v850),
|
||||
V800_RELOC (R_V850_TPDW8, 2, 8, 0, signed, FALSE, v850)
|
||||
};
|
||||
|
||||
/* Map a bfd relocation into the appropriate howto structure. */
|
||||
|
||||
@ -1841,12 +1945,14 @@ v850_elf_final_link_relocate (reloc_howto_type *howto,
|
||||
/* Adjust the value according to the relocation. */
|
||||
switch (r_type)
|
||||
{
|
||||
case R_V850_PC9:
|
||||
case R_V850_9_PCREL:
|
||||
value -= (input_section->output_section->vma
|
||||
+ input_section->output_offset);
|
||||
value -= offset;
|
||||
break;
|
||||
|
||||
case R_V850_PC16U:
|
||||
case R_V850_16_PCREL:
|
||||
value -= (input_section->output_section->vma
|
||||
+ input_section->output_offset
|
||||
@ -1858,6 +1964,7 @@ v850_elf_final_link_relocate (reloc_howto_type *howto,
|
||||
|
||||
break;
|
||||
|
||||
case R_V850_PC17:
|
||||
case R_V850_17_PCREL:
|
||||
value -= (input_section->output_section->vma
|
||||
+ input_section->output_offset
|
||||
@ -1870,6 +1977,7 @@ v850_elf_final_link_relocate (reloc_howto_type *howto,
|
||||
value = SEXT17 (value);
|
||||
break;
|
||||
|
||||
case R_V850_PCR22:
|
||||
case R_V850_22_PCREL:
|
||||
value -= (input_section->output_section->vma
|
||||
+ input_section->output_offset
|
||||
@ -1883,6 +1991,7 @@ v850_elf_final_link_relocate (reloc_howto_type *howto,
|
||||
value = SEXT22 (value);
|
||||
break;
|
||||
|
||||
case R_V850_PC32:
|
||||
case R_V850_32_PCREL:
|
||||
value -= (input_section->output_section->vma
|
||||
+ input_section->output_offset
|
||||
@ -1899,6 +2008,15 @@ v850_elf_final_link_relocate (reloc_howto_type *howto,
|
||||
case R_V850_16:
|
||||
case R_V850_ABS32:
|
||||
case R_V850_8:
|
||||
case R_V810_BYTE:
|
||||
case R_V810_HWORD:
|
||||
case R_V810_WORD:
|
||||
case R_V810_WLO:
|
||||
case R_V810_WHI:
|
||||
case R_V810_WHI1:
|
||||
case R_V810_WLO_1:
|
||||
case R_V850_WLO23:
|
||||
case R_V850_BLO:
|
||||
break;
|
||||
|
||||
case R_V850_ZDA_15_16_OFFSET:
|
||||
@ -1913,6 +2031,7 @@ v850_elf_final_link_relocate (reloc_howto_type *howto,
|
||||
case R_V850_SDA_15_16_OFFSET:
|
||||
case R_V850_SDA_16_16_OFFSET:
|
||||
case R_V850_SDA_16_16_SPLIT_OFFSET:
|
||||
case R_V810_GPWLO_1:
|
||||
{
|
||||
unsigned long gp;
|
||||
struct bfd_link_hash_entry * h;
|
||||
@ -2002,6 +2121,7 @@ v850_elf_final_link_relocate (reloc_howto_type *howto,
|
||||
break;
|
||||
|
||||
case R_V850_NONE:
|
||||
case R_V810_NONE:
|
||||
case R_V850_GNU_VTINHERIT:
|
||||
case R_V850_GNU_VTENTRY:
|
||||
case R_V850_LONGCALL:
|
||||
@ -2010,6 +2130,9 @@ v850_elf_final_link_relocate (reloc_howto_type *howto,
|
||||
return bfd_reloc_ok;
|
||||
|
||||
default:
|
||||
#ifdef DEBUG
|
||||
fprintf (stderr, "reloc number %d not recognised\n", r_type);
|
||||
#endif
|
||||
return bfd_reloc_notsupported;
|
||||
}
|
||||
|
||||
@ -2046,7 +2169,7 @@ v850_elf_relocate_section (bfd *output_bfd,
|
||||
relend = relocs + input_section->reloc_count;
|
||||
for (; rel < relend; rel++)
|
||||
{
|
||||
int r_type;
|
||||
unsigned int r_type;
|
||||
reloc_howto_type *howto;
|
||||
unsigned long r_symndx;
|
||||
Elf_Internal_Sym *sym;
|
||||
@ -2062,7 +2185,13 @@ v850_elf_relocate_section (bfd *output_bfd,
|
||||
|| r_type == R_V850_GNU_VTINHERIT)
|
||||
continue;
|
||||
|
||||
howto = v850_elf_howto_table + r_type;
|
||||
if (bfd_get_arch (input_bfd) == bfd_arch_v850_rh850)
|
||||
howto = v800_elf_howto_table + (r_type - R_V810_NONE);
|
||||
else
|
||||
howto = v850_elf_howto_table + r_type;
|
||||
|
||||
BFD_ASSERT (r_type == howto->type);
|
||||
|
||||
h = NULL;
|
||||
sym = NULL;
|
||||
sec = NULL;
|
||||
@ -2199,31 +2328,40 @@ v850_elf_gc_mark_hook (asection *sec,
|
||||
return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
|
||||
}
|
||||
|
||||
/* Set the right machine number. */
|
||||
/* Set the right machine number and architecture. */
|
||||
|
||||
static bfd_boolean
|
||||
v850_elf_object_p (bfd *abfd)
|
||||
{
|
||||
switch (elf_elfheader (abfd)->e_flags & EF_V850_ARCH)
|
||||
enum bfd_architecture arch;
|
||||
unsigned long mach;
|
||||
|
||||
switch (elf_elfheader (abfd)->e_machine)
|
||||
{
|
||||
case EM_V800:
|
||||
arch = bfd_arch_v850_rh850;
|
||||
mach = bfd_mach_v850e2v3;
|
||||
break;
|
||||
|
||||
case EM_CYGNUS_V850:
|
||||
case EM_V850:
|
||||
arch = bfd_arch_v850;
|
||||
switch (elf_elfheader (abfd)->e_flags & EF_V850_ARCH)
|
||||
{
|
||||
default:
|
||||
case E_V850_ARCH: mach = bfd_mach_v850; break;
|
||||
case E_V850E_ARCH: mach = bfd_mach_v850e; break;
|
||||
case E_V850E1_ARCH: mach = bfd_mach_v850e1; break;
|
||||
case E_V850E2_ARCH: mach = bfd_mach_v850e2; break;
|
||||
case E_V850E2V3_ARCH: mach = bfd_mach_v850e2v3; break;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
case E_V850_ARCH:
|
||||
bfd_default_set_arch_mach (abfd, bfd_arch_v850, bfd_mach_v850);
|
||||
break;
|
||||
case E_V850E_ARCH:
|
||||
bfd_default_set_arch_mach (abfd, bfd_arch_v850, bfd_mach_v850e);
|
||||
break;
|
||||
case E_V850E1_ARCH:
|
||||
bfd_default_set_arch_mach (abfd, bfd_arch_v850, bfd_mach_v850e1);
|
||||
break;
|
||||
case E_V850E2_ARCH:
|
||||
bfd_default_set_arch_mach (abfd, bfd_arch_v850, bfd_mach_v850e2);
|
||||
break;
|
||||
case E_V850E2V3_ARCH:
|
||||
bfd_default_set_arch_mach (abfd, bfd_arch_v850, bfd_mach_v850e2v3);
|
||||
break;
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
|
||||
return bfd_default_set_arch_mach (abfd, arch, mach);
|
||||
}
|
||||
|
||||
/* Store the machine number in the flags field. */
|
||||
@ -2234,18 +2372,29 @@ v850_elf_final_write_processing (bfd *abfd,
|
||||
{
|
||||
unsigned long val;
|
||||
|
||||
switch (bfd_get_mach (abfd))
|
||||
switch (bfd_get_arch (abfd))
|
||||
{
|
||||
default:
|
||||
case bfd_mach_v850: val = E_V850_ARCH; break;
|
||||
case bfd_mach_v850e: val = E_V850E_ARCH; break;
|
||||
case bfd_mach_v850e1: val = E_V850E1_ARCH; break;
|
||||
case bfd_mach_v850e2: val = E_V850E2_ARCH; break;
|
||||
case bfd_mach_v850e2v3: val = E_V850E2V3_ARCH; break;
|
||||
}
|
||||
case bfd_arch_v850_rh850:
|
||||
val = EF_RH850_ABI;
|
||||
elf_elfheader (abfd)->e_flags |= val;
|
||||
break;
|
||||
|
||||
elf_elfheader (abfd)->e_flags &=~ EF_V850_ARCH;
|
||||
elf_elfheader (abfd)->e_flags |= val;
|
||||
case bfd_arch_v850:
|
||||
switch (bfd_get_mach (abfd))
|
||||
{
|
||||
default:
|
||||
case bfd_mach_v850: val = E_V850_ARCH; break;
|
||||
case bfd_mach_v850e: val = E_V850E_ARCH; break;
|
||||
case bfd_mach_v850e1: val = E_V850E1_ARCH; break;
|
||||
case bfd_mach_v850e2: val = E_V850E2_ARCH; break;
|
||||
case bfd_mach_v850e2v3: val = E_V850E2V3_ARCH; break;
|
||||
}
|
||||
elf_elfheader (abfd)->e_flags &=~ EF_V850_ARCH;
|
||||
elf_elfheader (abfd)->e_flags |= val;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* Function to keep V850 specific file flags. */
|
||||
@ -2302,17 +2451,36 @@ v850_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
|
||||
if (in_flags == out_flags)
|
||||
return TRUE;
|
||||
|
||||
if (bfd_get_arch (obfd) == bfd_arch_v850_rh850)
|
||||
{
|
||||
if ((in_flags & EF_V800_850E3) != (out_flags & EF_V800_850E3))
|
||||
{
|
||||
_bfd_error_handler (_("%B: Architecture mismatch with previous modules"),
|
||||
ibfd);
|
||||
elf_elfheader (obfd)->e_flags |= EF_V800_850E3;
|
||||
}
|
||||
|
||||
if ((in_flags & EF_RH850_DATA_ALIGN8) != (out_flags & EF_RH850_DATA_ALIGN8))
|
||||
{
|
||||
_bfd_error_handler (_("%B: Alignment mismatch with previous modules"),
|
||||
ibfd);
|
||||
elf_elfheader (obfd)->e_flags |= EF_RH850_DATA_ALIGN8;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if ((in_flags & EF_V850_ARCH) != (out_flags & EF_V850_ARCH)
|
||||
&& (in_flags & EF_V850_ARCH) != E_V850_ARCH)
|
||||
{
|
||||
|
||||
/* Allow v850e1 binaries to be linked with v850e binaries.
|
||||
Set the output binary to v850e. */
|
||||
if ((in_flags & EF_V850_ARCH) == E_V850E1_ARCH
|
||||
/* Allow earlier architecture binaries to be linked with later binaries.
|
||||
Set the output binary to the later architecture, except for v850e1,
|
||||
which we set to v850e. */
|
||||
if ( (in_flags & EF_V850_ARCH) == E_V850E1_ARCH
|
||||
&& (out_flags & EF_V850_ARCH) == E_V850E_ARCH)
|
||||
return TRUE;
|
||||
|
||||
if ((in_flags & EF_V850_ARCH) == E_V850_ARCH
|
||||
if ( (in_flags & EF_V850_ARCH) == E_V850_ARCH
|
||||
&& (out_flags & EF_V850_ARCH) == E_V850E_ARCH)
|
||||
{
|
||||
elf_elfheader (obfd)->e_flags =
|
||||
@ -2320,7 +2488,7 @@ v850_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (((in_flags & EF_V850_ARCH) == E_V850_ARCH
|
||||
if (( (in_flags & EF_V850_ARCH) == E_V850_ARCH
|
||||
|| (in_flags & EF_V850_ARCH) == E_V850E_ARCH)
|
||||
&& (out_flags & EF_V850_ARCH) == E_V850E2_ARCH)
|
||||
{
|
||||
@ -2329,7 +2497,7 @@ v850_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (((in_flags & EF_V850_ARCH) == E_V850_ARCH
|
||||
if (( (in_flags & EF_V850_ARCH) == E_V850_ARCH
|
||||
|| (in_flags & EF_V850_ARCH) == E_V850E_ARCH
|
||||
|| (in_flags & EF_V850_ARCH) == E_V850E2_ARCH)
|
||||
&& (out_flags & EF_V850_ARCH) == E_V850E2V3_ARCH)
|
||||
@ -2360,14 +2528,29 @@ v850_elf_print_private_bfd_data (bfd *abfd, void * ptr)
|
||||
/* xgettext:c-format. */
|
||||
fprintf (file, _("private flags = %lx: "), elf_elfheader (abfd)->e_flags);
|
||||
|
||||
switch (elf_elfheader (abfd)->e_flags & EF_V850_ARCH)
|
||||
if (bfd_get_arch (abfd) == bfd_arch_v850_rh850)
|
||||
{
|
||||
default:
|
||||
case E_V850_ARCH: fprintf (file, _("v850 architecture")); break;
|
||||
case E_V850E_ARCH: fprintf (file, _("v850e architecture")); break;
|
||||
case E_V850E1_ARCH: fprintf (file, _("v850e1 architecture")); break;
|
||||
case E_V850E2_ARCH: fprintf (file, _("v850e2 architecture")); break;
|
||||
case E_V850E2V3_ARCH: fprintf (file, _("v850e2v3 architecture")); break;
|
||||
if ((elf_elfheader (abfd)->e_flags & EF_RH850_ABI) != EF_RH850_ABI)
|
||||
fprintf (file, _("unknown v850 architecture"));
|
||||
else if (elf_elfheader (abfd)->e_flags & EF_V800_850E3)
|
||||
fprintf (file, _("v850 E3 architecture"));
|
||||
else
|
||||
fprintf (file, _("v850 architecture"));
|
||||
|
||||
if (elf_elfheader (abfd)->e_flags & EF_RH850_DATA_ALIGN8)
|
||||
fprintf (file, _(", 8-byte data alignment"));
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (elf_elfheader (abfd)->e_flags & EF_V850_ARCH)
|
||||
{
|
||||
default:
|
||||
case E_V850_ARCH: fprintf (file, _("v850 architecture")); break;
|
||||
case E_V850E_ARCH: fprintf (file, _("v850e architecture")); break;
|
||||
case E_V850E1_ARCH: fprintf (file, _("v850e1 architecture")); break;
|
||||
case E_V850E2_ARCH: fprintf (file, _("v850e2 architecture")); break;
|
||||
case E_V850E2V3_ARCH: fprintf (file, _("v850e2v3 architecture")); break;
|
||||
}
|
||||
}
|
||||
|
||||
fputc ('\n', file);
|
||||
@ -2965,6 +3148,7 @@ v850_elf_relax_section (bfd *abfd,
|
||||
Elf_Internal_Rela *lo_irelfn;
|
||||
Elf_Internal_Rela *irelcall;
|
||||
bfd_signed_vma foff;
|
||||
unsigned int r_type;
|
||||
|
||||
if (! (irel->r_offset >= addr && irel->r_offset < toaddr
|
||||
&& (ELF32_R_TYPE (irel->r_info) == (int) R_V850_LONGCALL
|
||||
@ -3060,23 +3244,33 @@ v850_elf_relax_section (bfd *abfd,
|
||||
/* Get the reloc for the address from which the register is
|
||||
being loaded. This reloc will tell us which function is
|
||||
actually being called. */
|
||||
|
||||
for (hi_irelfn = internal_relocs; hi_irelfn < irelend; hi_irelfn ++)
|
||||
if (hi_irelfn->r_offset == laddr + 2
|
||||
&& ELF32_R_TYPE (hi_irelfn->r_info)
|
||||
== (int) R_V850_HI16_S)
|
||||
break;
|
||||
{
|
||||
r_type = ELF32_R_TYPE (hi_irelfn->r_info);
|
||||
|
||||
if (hi_irelfn->r_offset == laddr + 2
|
||||
&& (r_type == (int) R_V850_HI16_S || r_type == (int) R_V810_WHI1))
|
||||
break;
|
||||
}
|
||||
|
||||
for (lo_irelfn = internal_relocs; lo_irelfn < irelend; lo_irelfn ++)
|
||||
if (lo_irelfn->r_offset == laddr + 6
|
||||
&& ELF32_R_TYPE (lo_irelfn->r_info)
|
||||
== (int) R_V850_LO16)
|
||||
break;
|
||||
{
|
||||
r_type = ELF32_R_TYPE (lo_irelfn->r_info);
|
||||
|
||||
if (lo_irelfn->r_offset == laddr + 6
|
||||
&& (r_type == (int) R_V850_LO16 || r_type == (int) R_V810_WLO))
|
||||
break;
|
||||
}
|
||||
|
||||
for (irelcall = internal_relocs; irelcall < irelend; irelcall ++)
|
||||
if (irelcall->r_offset == laddr + 8
|
||||
&& ELF32_R_TYPE (irelcall->r_info)
|
||||
== (int) R_V850_22_PCREL)
|
||||
break;
|
||||
{
|
||||
r_type = ELF32_R_TYPE (irelcall->r_info);
|
||||
|
||||
if (irelcall->r_offset == laddr + 8
|
||||
&& (r_type == (int) R_V850_22_PCREL || r_type == (int) R_V850_PCR22))
|
||||
break;
|
||||
}
|
||||
|
||||
if ( hi_irelfn == irelend
|
||||
|| lo_irelfn == irelend
|
||||
@ -3202,7 +3396,10 @@ v850_elf_relax_section (bfd *abfd,
|
||||
symtab_hdr->contents = (bfd_byte *) isymbuf;
|
||||
|
||||
/* Replace the long call with a jarl. */
|
||||
irel->r_info = ELF32_R_INFO (ELF32_R_SYM (hi_irelfn->r_info), R_V850_22_PCREL);
|
||||
if (bfd_get_arch (abfd) == bfd_arch_v850_rh850)
|
||||
irel->r_info = ELF32_R_INFO (ELF32_R_SYM (hi_irelfn->r_info), R_V850_PCR22);
|
||||
else
|
||||
irel->r_info = ELF32_R_INFO (ELF32_R_SYM (hi_irelfn->r_info), R_V850_22_PCREL);
|
||||
|
||||
addend = 0;
|
||||
|
||||
@ -3278,14 +3475,22 @@ v850_elf_relax_section (bfd *abfd,
|
||||
being loaded. This reloc will tell us which function is
|
||||
actually being called. */
|
||||
for (hi_irelfn = internal_relocs; hi_irelfn < irelend; hi_irelfn ++)
|
||||
if (hi_irelfn->r_offset == laddr + 2
|
||||
&& ELF32_R_TYPE (hi_irelfn->r_info) == (int) R_V850_HI16_S)
|
||||
break;
|
||||
{
|
||||
r_type = ELF32_R_TYPE (hi_irelfn->r_info);
|
||||
|
||||
if (hi_irelfn->r_offset == laddr + 2
|
||||
&& ((r_type == (int) R_V850_HI16_S) || r_type == (int) R_V810_WHI1))
|
||||
break;
|
||||
}
|
||||
|
||||
for (lo_irelfn = internal_relocs; lo_irelfn < irelend; lo_irelfn ++)
|
||||
if (lo_irelfn->r_offset == laddr + 6
|
||||
&& ELF32_R_TYPE (lo_irelfn->r_info) == (int) R_V850_LO16)
|
||||
break;
|
||||
{
|
||||
r_type = ELF32_R_TYPE (lo_irelfn->r_info);
|
||||
|
||||
if (lo_irelfn->r_offset == laddr + 6
|
||||
&& (r_type == (int) R_V850_LO16 || r_type == (int) R_V810_WLO))
|
||||
break;
|
||||
}
|
||||
|
||||
if ( hi_irelfn == irelend
|
||||
|| lo_irelfn == irelend)
|
||||
@ -3392,8 +3597,11 @@ v850_elf_relax_section (bfd *abfd,
|
||||
{
|
||||
/* Replace the long jump with a jr. */
|
||||
|
||||
irel->r_info =
|
||||
ELF32_R_INFO (ELF32_R_SYM (irel->r_info), R_V850_22_PCREL);
|
||||
if (bfd_get_arch (abfd) == bfd_arch_v850_rh850)
|
||||
irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info), R_V850_PCR22);
|
||||
else
|
||||
irel->r_info =
|
||||
ELF32_R_INFO (ELF32_R_SYM (irel->r_info), R_V850_22_PCREL);
|
||||
|
||||
irel->r_addend = addend;
|
||||
addend = 0;
|
||||
@ -3425,8 +3633,11 @@ v850_elf_relax_section (bfd *abfd,
|
||||
{
|
||||
/* Replace the long jump with a br. */
|
||||
|
||||
irel->r_info =
|
||||
ELF32_R_INFO (ELF32_R_SYM (irel->r_info), R_V850_9_PCREL);
|
||||
if (bfd_get_arch (abfd) == bfd_arch_v850_rh850)
|
||||
irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info), R_V850_PC9);
|
||||
else
|
||||
irel->r_info =
|
||||
ELF32_R_INFO (ELF32_R_SYM (irel->r_info), R_V850_9_PCREL);
|
||||
|
||||
irel->r_addend = addend;
|
||||
addend = 0;
|
||||
@ -3539,7 +3750,6 @@ static const struct bfd_elf_special_section v850_elf_special_sections[] =
|
||||
#define ELF_ARCH bfd_arch_v850
|
||||
#define ELF_MACHINE_CODE EM_V850
|
||||
#define ELF_MACHINE_ALT1 EM_CYGNUS_V850
|
||||
#define ELF_MACHINE_ALT2 EM_V800 /* This is the value used by the GreenHills toolchain. */
|
||||
#define ELF_MAXPAGESIZE 0x1000
|
||||
|
||||
#define elf_info_to_howto v850_elf_info_to_howto_rela
|
||||
@ -3563,7 +3773,7 @@ static const struct bfd_elf_special_section v850_elf_special_sections[] =
|
||||
|
||||
#define bfd_elf32_bfd_is_local_label_name v850_elf_is_local_label_name
|
||||
#define bfd_elf32_bfd_reloc_type_lookup v850_elf_reloc_type_lookup
|
||||
#define bfd_elf32_bfd_reloc_name_lookup v850_elf_reloc_name_lookup
|
||||
#define bfd_elf32_bfd_reloc_name_lookup v850_elf_reloc_name_lookup
|
||||
#define bfd_elf32_bfd_merge_private_bfd_data v850_elf_merge_private_bfd_data
|
||||
#define bfd_elf32_bfd_set_private_flags v850_elf_set_private_flags
|
||||
#define bfd_elf32_bfd_print_private_bfd_data v850_elf_print_private_bfd_data
|
||||
@ -3571,4 +3781,122 @@ static const struct bfd_elf_special_section v850_elf_special_sections[] =
|
||||
|
||||
#define elf_symbol_leading_char '_'
|
||||
|
||||
#undef elf32_bed
|
||||
#define elf32_bed elf32_v850_bed
|
||||
|
||||
#include "elf32-target.h"
|
||||
|
||||
/* Map BFD reloc types to V800 ELF reloc types. */
|
||||
|
||||
static const struct v850_elf_reloc_map v800_elf_reloc_map[] =
|
||||
{
|
||||
{ BFD_RELOC_NONE, R_V810_NONE },
|
||||
{ BFD_RELOC_8, R_V810_BYTE },
|
||||
{ BFD_RELOC_16, R_V810_HWORD },
|
||||
{ BFD_RELOC_32, R_V810_WORD },
|
||||
{ BFD_RELOC_LO16, R_V810_WLO },
|
||||
{ BFD_RELOC_HI16, R_V810_WHI },
|
||||
{ BFD_RELOC_HI16_S, R_V810_WHI1 },
|
||||
{ BFD_RELOC_V850_32_PCREL, R_V850_PC32 },
|
||||
{ BFD_RELOC_V850_22_PCREL, R_V850_PCR22 },
|
||||
{ BFD_RELOC_V850_17_PCREL, R_V850_PC17 },
|
||||
{ BFD_RELOC_V850_16_PCREL, R_V850_PC16U },
|
||||
{ BFD_RELOC_V850_9_PCREL, R_V850_PC9 },
|
||||
{ BFD_RELOC_V850_LO16_S1, R_V810_WLO_1 }, /* Or R_V850_HWLO or R_V850_HWLO_1. */
|
||||
{ BFD_RELOC_V850_23, R_V850_WLO23 },
|
||||
{ BFD_RELOC_V850_LO16_SPLIT_OFFSET, R_V850_BLO },
|
||||
{ BFD_RELOC_V850_ZDA_16_16_OFFSET, R_V810_HWORD },
|
||||
{ BFD_RELOC_V850_TDA_16_16_OFFSET, R_V810_HWORD },
|
||||
{ BFD_RELOC_V850_SDA_16_16_OFFSET, R_V810_HWORD },
|
||||
{ BFD_RELOC_V850_SDA_15_16_OFFSET, R_V810_GPWLO_1 }
|
||||
};
|
||||
|
||||
/* Map a bfd relocation into the appropriate howto structure. */
|
||||
|
||||
static reloc_howto_type *
|
||||
v800_elf_reloc_type_lookup (bfd * abfd, bfd_reloc_code_real_type code)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
BFD_ASSERT (bfd_get_arch (abfd) == bfd_arch_v850_rh850);
|
||||
|
||||
for (i = ARRAY_SIZE (v800_elf_reloc_map); i --;)
|
||||
if (v800_elf_reloc_map[i].bfd_reloc_val == code)
|
||||
{
|
||||
unsigned int elf_reloc_val = v800_elf_reloc_map[i].elf_reloc_val;
|
||||
unsigned int idx = elf_reloc_val - R_V810_NONE;
|
||||
|
||||
BFD_ASSERT (v800_elf_howto_table[idx].type == elf_reloc_val);
|
||||
|
||||
return v800_elf_howto_table + idx;
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
fprintf (stderr, "failed to find v800 equiv of bfd reloc code %d\n", code);
|
||||
#endif
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static reloc_howto_type *
|
||||
v800_elf_reloc_name_lookup (bfd * abfd, const char * r_name)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
BFD_ASSERT (bfd_get_arch (abfd) == bfd_arch_v850_rh850);
|
||||
|
||||
for (i = ARRAY_SIZE (v800_elf_howto_table); i--;)
|
||||
if (v800_elf_howto_table[i].name != NULL
|
||||
&& strcasecmp (v800_elf_howto_table[i].name, r_name) == 0)
|
||||
return v800_elf_howto_table + i;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
/* Set the howto pointer in CACHE_PTR for a V800 ELF reloc. */
|
||||
|
||||
static void
|
||||
v800_elf_info_to_howto (bfd * abfd,
|
||||
arelent * cache_ptr,
|
||||
Elf_Internal_Rela * dst)
|
||||
{
|
||||
unsigned int r_type = ELF32_R_TYPE (dst->r_info);
|
||||
|
||||
BFD_ASSERT (bfd_get_arch (abfd) == bfd_arch_v850_rh850);
|
||||
|
||||
BFD_ASSERT (r_type < (unsigned int) R_V800_max);
|
||||
|
||||
if (r_type == R_V800_NONE)
|
||||
r_type = R_V810_NONE;
|
||||
|
||||
BFD_ASSERT (r_type >= (unsigned int) R_V810_NONE);
|
||||
r_type -= R_V810_NONE;
|
||||
BFD_ASSERT (r_type < ARRAY_SIZE (v800_elf_howto_table));
|
||||
|
||||
cache_ptr->howto = v800_elf_howto_table + r_type;
|
||||
}
|
||||
|
||||
|
||||
#undef TARGET_LITTLE_SYM
|
||||
#define TARGET_LITTLE_SYM bfd_elf32_v850_rh850_vec
|
||||
#undef TARGET_LITTLE_NAME
|
||||
#define TARGET_LITTLE_NAME "elf32-v850-rh850"
|
||||
#undef ELF_ARCH
|
||||
#define ELF_ARCH bfd_arch_v850_rh850
|
||||
#undef ELF_MACHINE_CODE
|
||||
#define ELF_MACHINE_CODE EM_V800
|
||||
#undef ELF_MACHINE_ALT1
|
||||
|
||||
#undef elf32_bed
|
||||
#define elf32_bed elf32_v850_rh850_bed
|
||||
|
||||
#undef elf_info_to_howto
|
||||
#define elf_info_to_howto v800_elf_info_to_howto
|
||||
#undef elf_info_to_howto_rel
|
||||
#define elf_info_to_howto_rel NULL
|
||||
#undef bfd_elf32_bfd_reloc_type_lookup
|
||||
#define bfd_elf32_bfd_reloc_type_lookup v800_elf_reloc_type_lookup
|
||||
#undef bfd_elf32_bfd_reloc_name_lookup
|
||||
#define bfd_elf32_bfd_reloc_name_lookup v800_elf_reloc_name_lookup
|
||||
|
||||
#include "elf32-target.h"
|
||||
|
@ -722,6 +722,7 @@ extern const bfd_target bfd_elf32_tradbigmips_freebsd_vec;
|
||||
extern const bfd_target bfd_elf32_tradlittlemips_freebsd_vec;
|
||||
extern const bfd_target bfd_elf32_us_cris_vec;
|
||||
extern const bfd_target bfd_elf32_v850_vec;
|
||||
extern const bfd_target bfd_elf32_v850_rh850_vec;
|
||||
extern const bfd_target bfd_elf32_vax_vec;
|
||||
extern const bfd_target bfd_elf32_xc16x_vec;
|
||||
extern const bfd_target bfd_elf32_xgate_vec;
|
||||
@ -1099,6 +1100,7 @@ static const bfd_target * const _bfd_target_vector[] =
|
||||
&bfd_elf32_tradlittlemips_freebsd_vec,
|
||||
&bfd_elf32_us_cris_vec,
|
||||
&bfd_elf32_v850_vec,
|
||||
&bfd_elf32_v850_rh850_vec,
|
||||
&bfd_elf32_vax_vec,
|
||||
&bfd_elf32_xc16x_vec,
|
||||
&bfd_elf32_xgate_vec,
|
||||
|
@ -1,6 +1,11 @@
|
||||
2012-11-09 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* readelf.c (get_machine_flags): Add support for E_FLAG_RX_ABI.
|
||||
(guess_is_rela): Add EM_V800.
|
||||
(dump_relocations): Likewise.
|
||||
(get_machine_name): Update EM_V800.
|
||||
(get_machine_flags): Add support for RH850 ABI flags.
|
||||
(is_32bit_abs_reloc): Add support for RH850 ABI reloc.
|
||||
|
||||
2012-11-09 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
|
@ -11,6 +11,17 @@
|
||||
options.
|
||||
* doc/c-rx.texi: Document -mgcc-abi and -mrx-abi.
|
||||
|
||||
* config/tc-v850.c (v850_target_arch): New.
|
||||
(v850_target_format): New.
|
||||
(set_machine): Use v850_target_arch.
|
||||
(md_begin): Likewise.
|
||||
(md_show_usage): Document new switches.
|
||||
(md_parse_option): Add -mgcc-abi, -mrh850-abi, -m8byte-align and
|
||||
-m4byte-align.
|
||||
* config/tc-v850.c (TARGET_ARCH) Use v850_target_arch.
|
||||
(TARGET_FORMAT): Use v850_target_format.
|
||||
* doc/c-v850.texi: Document new options.
|
||||
|
||||
2012-11-09 David Holsgrove <david.holsgrove@xilinx.com>
|
||||
|
||||
* gas/microblaze/endian.exp: New file - endian testcase for microblaze / microblazeel.
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* tc-v850.c -- Assembler code for the NEC V850
|
||||
Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
|
||||
2006, 2007, 2009, 2010, 2011 Free Software Foundation, Inc.
|
||||
2006, 2007, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GAS, the GNU Assembler.
|
||||
|
||||
@ -38,6 +38,12 @@ static bfd_boolean warn_unsigned_overflows = FALSE;
|
||||
/* Indicates the target BFD machine number. */
|
||||
static int machine = -1;
|
||||
|
||||
|
||||
/* Indiciates the target BFD architecture. */
|
||||
int v850_target_arch = bfd_arch_v850_rh850;
|
||||
const char * v850_target_format = "elf32-v850-rh850";
|
||||
static flagword v850_e_flags = 0;
|
||||
|
||||
/* Indicates the target processor(s) for the assemble. */
|
||||
static int processor_mask = 0;
|
||||
|
||||
@ -512,7 +518,7 @@ static void
|
||||
set_machine (int number)
|
||||
{
|
||||
machine = number;
|
||||
bfd_set_arch_mach (stdoutput, TARGET_ARCH, machine);
|
||||
bfd_set_arch_mach (stdoutput, v850_target_arch, machine);
|
||||
|
||||
switch (machine)
|
||||
{
|
||||
@ -1338,6 +1344,10 @@ md_show_usage (FILE *stream)
|
||||
fprintf (stream, _(" -mextension enable extension opcode support\n"));
|
||||
fprintf (stream, _(" -mno-bcond17 disable b<cond> disp17 instruction\n"));
|
||||
fprintf (stream, _(" -mno-stld23 disable st/ld offset23 instruction\n"));
|
||||
fprintf (stream, _(" -mgcc-abi Mark the binary as using the old GCC ABI\n"));
|
||||
fprintf (stream, _(" -mrh850-abi Mark the binary as using the RH850 ABI (default)\n"));
|
||||
fprintf (stream, _(" -m8byte-align Mark the binary as using 64-bit alignment\n"));
|
||||
fprintf (stream, _(" -m4byte-align Mark the binary as using 32-bit alignment (default)\n"));
|
||||
}
|
||||
|
||||
int
|
||||
@ -1403,6 +1413,20 @@ md_parse_option (int c, char *arg)
|
||||
}
|
||||
else if (strcmp (arg, "relax") == 0)
|
||||
v850_relax = 1;
|
||||
else if (strcmp (arg, "gcc-abi") == 0)
|
||||
{
|
||||
v850_target_arch = bfd_arch_v850;
|
||||
v850_target_format = "elf32-v850";
|
||||
}
|
||||
else if (strcmp (arg, "rh850-abi") == 0)
|
||||
{
|
||||
v850_target_arch = bfd_arch_v850_rh850;
|
||||
v850_target_format = "elf32-v850-rh850";
|
||||
}
|
||||
else if (strcmp (arg, "8byte-align") == 0)
|
||||
v850_e_flags |= EF_RH850_DATA_ALIGN8;
|
||||
else if (strcmp (arg, "4byte-align") == 0)
|
||||
v850_e_flags &= ~ EF_RH850_DATA_ALIGN8;
|
||||
else
|
||||
return 0;
|
||||
|
||||
@ -1673,7 +1697,8 @@ md_begin (void)
|
||||
}
|
||||
|
||||
v850_seg_table[BSS_SECTION].s = bss_section;
|
||||
bfd_set_arch_mach (stdoutput, TARGET_ARCH, machine);
|
||||
bfd_set_arch_mach (stdoutput, v850_target_arch, machine);
|
||||
bfd_set_private_flags (stdoutput, v850_e_flags);
|
||||
}
|
||||
|
||||
|
||||
@ -1996,7 +2021,7 @@ md_assemble (char *str)
|
||||
int relaxable = 0;
|
||||
unsigned long insn;
|
||||
unsigned long insn_size;
|
||||
char *f;
|
||||
char *f = NULL;
|
||||
int i;
|
||||
int match;
|
||||
bfd_boolean extra_data_after_insn = FALSE;
|
||||
@ -3219,7 +3244,8 @@ md_apply_fix (fixS *fixP, valueT *valueP, segT seg ATTRIBUTE_UNUSED)
|
||||
break;
|
||||
|
||||
case BFD_RELOC_V850_16_PCREL:
|
||||
bfd_putl16 (-value & 0xfffe, (unsigned char *) where);
|
||||
bfd_putl16 ((-value & 0xfffe) | (bfd_getl16 (where + 2) & 0x0001),
|
||||
(unsigned char *) (where + 2));
|
||||
break;
|
||||
|
||||
case BFD_RELOC_V850_22_PCREL:
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* tc-v850.h -- Header file for tc-v850.c.
|
||||
Copyright 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2005, 2006, 2007
|
||||
Copyright 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2005, 2006, 2007, 2012
|
||||
Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GAS, the GNU Assembler.
|
||||
@ -26,10 +26,12 @@
|
||||
#define TARGET_BYTES_BIG_ENDIAN 0
|
||||
|
||||
/* The target BFD architecture. */
|
||||
#define TARGET_ARCH bfd_arch_v850
|
||||
#define TARGET_ARCH v850_target_arch
|
||||
extern int v850_target_arch;
|
||||
|
||||
/* The target BFD format. */
|
||||
#define TARGET_FORMAT "elf32-v850"
|
||||
#define TARGET_FORMAT v850_target_format
|
||||
extern const char * v850_target_format;
|
||||
|
||||
#define md_operand(x)
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
@c Copyright 1997, 2002, 2003, 2006, 2011 Free Software Foundation, Inc.
|
||||
@c Copyright 1997, 2002, 2003, 2006, 2011, 2012 Free Software Foundation, Inc.
|
||||
@c This is part of the GAS manual.
|
||||
@c For copying conditions, see the file as.texinfo.
|
||||
|
||||
@ -88,8 +88,27 @@ of code which are either a long function call or a long branch. The
|
||||
assembler will then flag these sections of code and the linker will
|
||||
attempt to relax them.
|
||||
|
||||
@end table
|
||||
@cindex @code{-mgcc-abi} command line option, V850
|
||||
@item -mgcc-abi
|
||||
Marks the generated objecy file as supporting the old GCC ABI.
|
||||
|
||||
@cindex @code{-mrh850-abi} command line option, V850
|
||||
@item -mrh850-abi
|
||||
Marks the generated objecy file as supporting the RH850 ABI. This is
|
||||
the default.
|
||||
|
||||
@cindex @code{-m8byte-align} command line option, V850
|
||||
@item -m8byte-align
|
||||
Marks the generated objecy file as supporting a maximum 64-bits of
|
||||
alignment for variables defined in the source code.
|
||||
|
||||
@cindex @code{-m4byte-align} command line option, V850
|
||||
@item -m4byte-align
|
||||
Marks the generated objecy file as supporting a maximum 32-bits of
|
||||
alignment for variables defined in the source code. This is the
|
||||
default.
|
||||
|
||||
@end table
|
||||
|
||||
@node V850 Syntax
|
||||
@section Syntax
|
||||
|
@ -3,6 +3,8 @@
|
||||
* rx.h (EF_RX_CPU_RX): Add comment.
|
||||
(E_FLAG_RX_ABI): Define.
|
||||
|
||||
* v850.h: Add RH850 ABI values.
|
||||
|
||||
2012-11-08 Maciej W. Rozycki <macro@codesourcery.com>
|
||||
|
||||
* mips.h (EF_MIPS_32BITMODE): Move next to lower-order bits.
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* V850 ELF support for BFD.
|
||||
Copyright 1997, 1998, 2000, 2002, 2003, 2004, 2007, 2008, 2010
|
||||
Copyright 1997, 1998, 2000, 2002, 2003, 2004, 2007, 2008, 2010, 2012
|
||||
Free Software Foundation, Inc.
|
||||
Created by Michael Meissner, Cygnus Support <meissner@cygnus.com>
|
||||
|
||||
@ -148,4 +148,134 @@ END_RELOC_NUMBERS (R_V850_max)
|
||||
/* This section must be in the zero data area (pointed to by R0). */
|
||||
#define SHF_V850_R0REL 0x40000000
|
||||
|
||||
/* Alternative versions of the above definitions, as specified by the RH850 ABI. */
|
||||
|
||||
#define EF_RH850_ABI 0xF0000000
|
||||
|
||||
#define EF_V800_850E3 0x00100000
|
||||
|
||||
#define EF_RH850_FPU_DOUBLE 0x00000001 /* sizeof(double) == 8. */
|
||||
#define EF_RH850_FPU_SINGLE 0x00000002 /* sizeof(double) == 4. */
|
||||
#define EF_RH850_SIMD 0x00000004
|
||||
#define EF_RH850_CACHE 0x00000008
|
||||
#define EF_RH850_MMU 0x00000010
|
||||
#define EF_RH850_REGMODE22 0x00000020 /* Registers r15-r24 (inclusive) are not used. */
|
||||
#define EF_RH850_REGMODE32 0x00000040
|
||||
#define EF_RH850_DATA_ALIGN8 0x00000080 /* 8-byte alignment supported. */
|
||||
#define EF_RH850_GP_FIX 0x00000100 /* r4 is fixed. */
|
||||
#define EF_RH850_GP_NOFIX 0x00000200 /* r4 is callee save. */
|
||||
#define EF_RH850_EP_FIX 0x00000400 /* r30 is fixed. */
|
||||
#define EF_RH850_EP_NOFIX 0x00000800 /* r30 is callee save. */
|
||||
#define EF_RH850_TP_FIX 0x00001000 /* r5 is fixed. */
|
||||
#define EF_RH850_TP_NOFIX 0x00002000 /* r5 is callee save. */
|
||||
#define EF_RH850_REG2_RESERVE 0x00004000 /* r2 is fixed. */
|
||||
#define EF_RH850_REG2_NORESERVE 0x00008000 /* r2 is callee saved. */
|
||||
|
||||
#define SHT_RNESAS_IOP SHT_LOUSER /* Used by Renesas linker. */
|
||||
|
||||
#define SHF_RENESAS_ABS 0x80000000 /* Absolute section. */
|
||||
#define SHF_GHS_ABS 0x00000400 /* Use unknown. */
|
||||
|
||||
#define STT_RENESAS_ENTRY 14 /* Set for functions called at reset time. */
|
||||
|
||||
START_RELOC_NUMBERS (v800_reloc_type)
|
||||
|
||||
RELOC_NUMBER (R_V800_NONE, 0x00)
|
||||
RELOC_NUMBER (R_V810_NONE, 0x30)
|
||||
RELOC_NUMBER (R_V810_BYTE, 0x31)
|
||||
RELOC_NUMBER (R_V810_HWORD, 0x32)
|
||||
RELOC_NUMBER (R_V810_WORD, 0x33)
|
||||
RELOC_NUMBER (R_V810_WLO, 0x34)
|
||||
RELOC_NUMBER (R_V810_WHI, 0x35)
|
||||
RELOC_NUMBER (R_V810_WHI1, 0x36)
|
||||
RELOC_NUMBER (R_V810_GPBYTE, 0x37)
|
||||
RELOC_NUMBER (R_V810_GPHWORD, 0x38)
|
||||
RELOC_NUMBER (R_V810_GPWORD, 0x39)
|
||||
RELOC_NUMBER (R_V810_GPWLO, 0x3a)
|
||||
RELOC_NUMBER (R_V810_GPWHI, 0x3b)
|
||||
RELOC_NUMBER (R_V810_GPWHI1, 0x3c)
|
||||
RELOC_NUMBER (R_V850_HWLO, 0x3d)
|
||||
FAKE_RELOC (R_V810_reserved1, 0x3e)
|
||||
RELOC_NUMBER (R_V850_EP7BIT, 0x3f)
|
||||
RELOC_NUMBER (R_V850_EPHBYTE, 0x40)
|
||||
RELOC_NUMBER (R_V850_EPWBYTE, 0x41)
|
||||
RELOC_NUMBER (R_V850_REGHWLO, 0x42)
|
||||
FAKE_RELOC (R_V810_reserved2, 0x43)
|
||||
RELOC_NUMBER (R_V850_GPHWLO, 0x44)
|
||||
FAKE_RELOC (R_V810_reserved3, 0x45)
|
||||
RELOC_NUMBER (R_V850_PCR22, 0x46)
|
||||
RELOC_NUMBER (R_V850_BLO, 0x47)
|
||||
RELOC_NUMBER (R_V850_EP4BIT, 0x48)
|
||||
RELOC_NUMBER (R_V850_EP5BIT, 0x49)
|
||||
RELOC_NUMBER (R_V850_REGBLO, 0x4a)
|
||||
RELOC_NUMBER (R_V850_GPBLO, 0x4b)
|
||||
RELOC_NUMBER (R_V810_WLO_1, 0x4c)
|
||||
RELOC_NUMBER (R_V810_GPWLO_1, 0x4d)
|
||||
RELOC_NUMBER (R_V850_BLO_1, 0x4e)
|
||||
RELOC_NUMBER (R_V850_HWLO_1, 0x4f)
|
||||
FAKE_RELOC (R_V810_reserved4, 0x50)
|
||||
RELOC_NUMBER (R_V850_GPBLO_1, 0x51)
|
||||
RELOC_NUMBER (R_V850_GPHWLO_1, 0x52)
|
||||
FAKE_RELOC (R_V810_reserved5, 0x53)
|
||||
RELOC_NUMBER (R_V850_EPBLO, 0x54)
|
||||
RELOC_NUMBER (R_V850_EPHWLO, 0x55)
|
||||
FAKE_RELOC (R_V810_reserved6, 0x56)
|
||||
RELOC_NUMBER (R_V850_EPWLO_N, 0x57)
|
||||
RELOC_NUMBER (R_V850_PC32, 0x58)
|
||||
RELOC_NUMBER (R_V850_W23BIT, 0x59)
|
||||
RELOC_NUMBER (R_V850_GPW23BIT, 0x5a)
|
||||
RELOC_NUMBER (R_V850_EPW23BIT, 0x5b)
|
||||
RELOC_NUMBER (R_V850_B23BIT, 0x5c)
|
||||
RELOC_NUMBER (R_V850_GPB23BIT, 0x5d)
|
||||
RELOC_NUMBER (R_V850_EPB23BIT, 0x5e)
|
||||
RELOC_NUMBER (R_V850_PC16U, 0x5f)
|
||||
RELOC_NUMBER (R_V850_PC17, 0x60)
|
||||
RELOC_NUMBER (R_V850_DW8, 0x61)
|
||||
RELOC_NUMBER (R_V850_GPDW8, 0x62)
|
||||
RELOC_NUMBER (R_V850_EPDW8, 0x63)
|
||||
RELOC_NUMBER (R_V850_PC9, 0x64)
|
||||
RELOC_NUMBER (R_V810_REGBYTE, 0x65)
|
||||
RELOC_NUMBER (R_V810_REGHWORD, 0x66)
|
||||
RELOC_NUMBER (R_V810_REGWORD, 0x67)
|
||||
RELOC_NUMBER (R_V810_REGWLO, 0x68)
|
||||
RELOC_NUMBER (R_V810_REGWHI, 0x69)
|
||||
RELOC_NUMBER (R_V810_REGWHI1, 0x6a)
|
||||
RELOC_NUMBER (R_V850_REGW23BIT, 0x6b)
|
||||
RELOC_NUMBER (R_V850_REGB23BIT, 0x6c)
|
||||
RELOC_NUMBER (R_V850_REGDW8, 0x6d)
|
||||
RELOC_NUMBER (R_V810_EPBYTE, 0x6e)
|
||||
RELOC_NUMBER (R_V810_EPHWORD, 0x6f)
|
||||
RELOC_NUMBER (R_V810_EPWORD, 0x70)
|
||||
RELOC_NUMBER (R_V850_WLO23, 0x71)
|
||||
RELOC_NUMBER (R_V850_WORD_E, 0x72)
|
||||
RELOC_NUMBER (R_V850_REGWORD_E, 0x73)
|
||||
RELOC_NUMBER (R_V850_WORD, 0x74)
|
||||
RELOC_NUMBER (R_V850_GPWORD, 0x75)
|
||||
RELOC_NUMBER (R_V850_REGWORD, 0x76)
|
||||
RELOC_NUMBER (R_V850_EPWORD, 0x77)
|
||||
RELOC_NUMBER (R_V810_TPBYTE, 0x78)
|
||||
RELOC_NUMBER (R_V810_TPHWORD, 0x79)
|
||||
RELOC_NUMBER (R_V810_TPWORD, 0x7a)
|
||||
RELOC_NUMBER (R_V810_TPWLO, 0x7b)
|
||||
RELOC_NUMBER (R_V810_TPWHI, 0x7c)
|
||||
RELOC_NUMBER (R_V810_TPWHI1, 0x7d)
|
||||
RELOC_NUMBER (R_V850_TPHWLO, 0x7e)
|
||||
RELOC_NUMBER (R_V850_TPBLO, 0x7f)
|
||||
RELOC_NUMBER (R_V810_TPWLO_1, 0x80)
|
||||
RELOC_NUMBER (R_V850_TPBLO_1, 0x81)
|
||||
RELOC_NUMBER (R_V850_TPHWLO_1, 0x82)
|
||||
RELOC_NUMBER (R_V850_TP23BIT, 0x83)
|
||||
RELOC_NUMBER (R_V850_TPW23BIT, 0x84)
|
||||
RELOC_NUMBER (R_V850_TPDW8, 0x85)
|
||||
|
||||
/* These are defined by the RH850 ABI, but not used. */
|
||||
RELOC_NUMBER (R_V810_ABS32, 0xa0)
|
||||
RELOC_NUMBER (R_V850_SYM, 0xe0)
|
||||
RELOC_NUMBER (R_V850_OPadd, 0xe1)
|
||||
RELOC_NUMBER (R_V850_OPsub, 0xe2)
|
||||
RELOC_NUMBER (R_V850_OPsctsize, 0xe3)
|
||||
RELOC_NUMBER (R_V850_OPscttop, 0xe4)
|
||||
|
||||
END_RELOC_NUMBERS (R_V800_max)
|
||||
|
||||
#endif /* _ELF_V850_H */
|
||||
|
@ -6,6 +6,13 @@
|
||||
(PARSE_AND_LIST_ARG_CASES): Add support for
|
||||
--flag-mismatch-warnings.
|
||||
|
||||
* Makefile.am: (ALL_EMULATION_SOURCES): Add ev850_rh850.c.
|
||||
* Makefile.in: Regenerate.
|
||||
* configure.tgt (v850*-*-*): Make v850_rh850 the default
|
||||
emulation. Add vanilla v850 as an extra emulation.
|
||||
* emulparams/v850_rh850.sh: New file.
|
||||
* scripttempl/v850_rh850.sc: New file.
|
||||
|
||||
2012-11-09 Edgar E. Iglesias <edgar.iglesias@gmail.com>
|
||||
|
||||
* Makefile.am: Add eelf32microblazeel.c and eelf32mbel_linux.c.
|
||||
|
@ -453,6 +453,7 @@ ALL_EMULATION_SOURCES = \
|
||||
etic54xcoff.c \
|
||||
etic80coff.c \
|
||||
ev850.c \
|
||||
ev850_rh850.c \
|
||||
evanilla.c \
|
||||
evax.c \
|
||||
evaxnbsd.c \
|
||||
@ -1924,6 +1925,9 @@ etic80coff.c: $(srcdir)/emulparams/tic80coff.sh \
|
||||
ev850.c: $(srcdir)/emulparams/v850.sh \
|
||||
$(ELF_DEPS) $(srcdir)/scripttempl/v850.sc ${GEN_DEPENDS}
|
||||
${GENSCRIPTS} v850 "$(tdir_v850)"
|
||||
ev850_rh850.c: $(srcdir)/emulparams/v850_rh850.sh \
|
||||
$(ELF_DEPS) $(srcdir)/scripttempl/v850_rh850.sc ${GEN_DEPENDS}
|
||||
${GENSCRIPTS} v850_rh850 "$(tdir_v850_rh850)"
|
||||
evanilla.c: $(srcdir)/emulparams/vanilla.sh \
|
||||
$(srcdir)/emultempl/vanilla.em $(srcdir)/scripttempl/vanilla.sc ${GEN_DEPENDS}
|
||||
${GENSCRIPTS} vanilla "$(tdir_vanilla)"
|
||||
|
@ -3395,6 +3395,9 @@ etic80coff.c: $(srcdir)/emulparams/tic80coff.sh \
|
||||
ev850.c: $(srcdir)/emulparams/v850.sh \
|
||||
$(ELF_DEPS) $(srcdir)/scripttempl/v850.sc ${GEN_DEPENDS}
|
||||
${GENSCRIPTS} v850 "$(tdir_v850)"
|
||||
ev850_rh850.c: $(srcdir)/emulparams/v850_rh850.sh \
|
||||
$(ELF_DEPS) $(srcdir)/scripttempl/v850_rh850.sc ${GEN_DEPENDS}
|
||||
${GENSCRIPTS} v850_rh850 "$(tdir_v850_rh850)"
|
||||
evanilla.c: $(srcdir)/emulparams/vanilla.sh \
|
||||
$(srcdir)/emultempl/vanilla.em $(srcdir)/scripttempl/vanilla.sc ${GEN_DEPENDS}
|
||||
${GENSCRIPTS} vanilla "$(tdir_vanilla)"
|
||||
|
@ -716,7 +716,8 @@ tilegxbe-*-*) targ_emul=elf64tilegx_be
|
||||
targ_extra_emuls="elf64tilegx elf32tilegx elf32tilegx_be"
|
||||
targ_extra_libpath=$targ_extra_emuls ;;
|
||||
tilepro-*-*) targ_emul=elf32tilepro ;;
|
||||
v850*-*-*) targ_emul=v850
|
||||
v850*-*-*) targ_emul=v850_rh850
|
||||
targ_extra_emuls=v850
|
||||
;;
|
||||
vax-dec-ultrix* | vax-dec-bsd*) targ_emul=vax ;;
|
||||
vax-*-netbsdelf*) targ_emul=elf32vax
|
||||
|
15
ld/emulparams/v850_rh850.sh
Normal file
15
ld/emulparams/v850_rh850.sh
Normal file
@ -0,0 +1,15 @@
|
||||
MACHINE=
|
||||
SCRIPT_NAME=v850_rh850
|
||||
OUTPUT_FORMAT="elf32-v850-rh850"
|
||||
TEXT_START_ADDR=0x100000
|
||||
ZDATA_START_ADDR=0x160
|
||||
ROZDATA_START_ADDR="ALIGN (4)"
|
||||
SDATA_START_ADDR="ALIGN (4)"
|
||||
ROSDATA_START_ADDR="ALIGN (4)"
|
||||
TDATA_START_ADDR="ALIGN (4)"
|
||||
CALL_TABLE_START_ADDR="ALIGN (4)"
|
||||
ARCH=v850_rh850
|
||||
MAXPAGESIZE=256
|
||||
ENTRY=_start
|
||||
EMBEDDED=yes
|
||||
TEMPLATE_NAME=elf32
|
259
ld/scripttempl/v850_rh850.sc
Normal file
259
ld/scripttempl/v850_rh850.sc
Normal file
@ -0,0 +1,259 @@
|
||||
cat << EOF
|
||||
OUTPUT_FORMAT("elf32-v850-rh850", "elf32-v850-rh850",
|
||||
"elf32-v850-rh850")
|
||||
OUTPUT_ARCH(v850-rh850)
|
||||
${RELOCATING+ENTRY(_start)}
|
||||
SEARCH_DIR(.);
|
||||
EXTERN(__ctbp __ep __gp);
|
||||
SECTIONS
|
||||
{
|
||||
/* This saves a little space in the ELF file, since the zda starts
|
||||
at a higher location that the ELF headers take up. */
|
||||
|
||||
.zdata ${ZDATA_START_ADDR} :
|
||||
{
|
||||
*(.zdata)
|
||||
*(.zdata23)
|
||||
*(.zbss)
|
||||
*(.zbss23)
|
||||
*(reszdata)
|
||||
*(.zcommon)
|
||||
}
|
||||
|
||||
/* This is the read only part of the zero data area.
|
||||
Having it as a seperate section prevents its
|
||||
attributes from being inherited by the zdata
|
||||
section. Specifically it prevents the zdata
|
||||
section from being marked READONLY. */
|
||||
|
||||
.rozdata ${ROZDATA_START_ADDR} :
|
||||
{
|
||||
*(.rozdata)
|
||||
*(romzdata)
|
||||
*(romzbss)
|
||||
*(.zconst)
|
||||
*(.zconst23)
|
||||
}
|
||||
|
||||
/* Read-only sections, merged into text segment. */
|
||||
. = ${TEXT_START_ADDR};
|
||||
.interp : { *(.interp) }
|
||||
.hash : { *(.hash) }
|
||||
.dynsym : { *(.dynsym) }
|
||||
.dynstr : { *(.dynstr) }
|
||||
.rel.text : { *(.rel.text) }
|
||||
.rela.text : { *(.rela.text) }
|
||||
.rel.data : { *(.rel.data) }
|
||||
.rela.data : { *(.rela.data) }
|
||||
.rel.rodata : { *(.rel.rodata) }
|
||||
.rela.rodata : { *(.rela.rodata) }
|
||||
.rel.gcc_except_table : { *(.rel.gcc_except_table) }
|
||||
.rela.gcc_except_table : { *(.rela.gcc_except_table) }
|
||||
.rel.got : { *(.rel.got) }
|
||||
.rela.got : { *(.rela.got) }
|
||||
.rel.ctors : { *(.rel.ctors) }
|
||||
.rela.ctors : { *(.rela.ctors) }
|
||||
.rel.dtors : { *(.rel.dtors) }
|
||||
.rela.dtors : { *(.rela.dtors) }
|
||||
.rel.init : { *(.rel.init) }
|
||||
.rela.init : { *(.rela.init) }
|
||||
.rel.fini : { *(.rel.fini) }
|
||||
.rela.fini : { *(.rela.fini) }
|
||||
.rel.bss : { *(.rel.bss) }
|
||||
.rela.bss : { *(.rela.bss) }
|
||||
.rel.plt : { *(.rel.plt) }
|
||||
.rela.plt : { *(.rela.plt) }
|
||||
.init : { KEEP (*(.init)) } =0
|
||||
.plt : { *(.plt) }
|
||||
|
||||
.text :
|
||||
{
|
||||
*(.text)
|
||||
${RELOCATING+*(.text.*)}
|
||||
|
||||
/* .gnu.warning sections are handled specially by elf32.em. */
|
||||
*(.gnu.warning)
|
||||
*(.gnu.linkonce.t*)
|
||||
} =0
|
||||
|
||||
${RELOCATING+_etext = .;}
|
||||
${RELOCATING+PROVIDE (etext = .);}
|
||||
|
||||
/* This is special code area at the end of the normal text section.
|
||||
It contains a small lookup table at the start followed by the
|
||||
code pointed to by entries in the lookup table. */
|
||||
|
||||
.call_table_data ${CALL_TABLE_START_ADDR} :
|
||||
{
|
||||
${RELOCATING+PROVIDE(__ctbp = .);}
|
||||
*(.call_table_data)
|
||||
} = 0xff /* Fill gaps with 0xff. */
|
||||
|
||||
.call_table_text :
|
||||
{
|
||||
*(.call_table_text)
|
||||
}
|
||||
|
||||
.fini : { KEEP (*(.fini)) } =0
|
||||
.rodata :
|
||||
{
|
||||
*(.rodata)
|
||||
${RELOCATING+*(.rodata.*)}
|
||||
*(.gnu.linkonce.r*)
|
||||
*(.const)
|
||||
}
|
||||
.rodata1 : { *(.rodata1) }
|
||||
|
||||
.data :
|
||||
{
|
||||
*(.data)
|
||||
${RELOCATING+*(.data.*)}
|
||||
*(.gnu.linkonce.d*)
|
||||
CONSTRUCTORS
|
||||
}
|
||||
.data1 : { *(.data1) }
|
||||
.ctors :
|
||||
{
|
||||
${CONSTRUCTING+___ctors = .;}
|
||||
KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
|
||||
KEEP (*(SORT(.ctors.*)))
|
||||
KEEP (*crtend(.ctors))
|
||||
${CONSTRUCTING+___ctors_end = .;}
|
||||
}
|
||||
.dtors :
|
||||
{
|
||||
${CONSTRUCTING+___dtors = .;}
|
||||
KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
|
||||
KEEP (*(SORT(.dtors.*)))
|
||||
KEEP (*crtend.o(.dtors))
|
||||
${CONSTRUCTING+___dtors_end = .;}
|
||||
}
|
||||
.jcr :
|
||||
{
|
||||
KEEP (*(.jcr))
|
||||
}
|
||||
|
||||
.gcc_except_table : { *(.gcc_except_table) }
|
||||
|
||||
.got : { *(.got.plt) *(.got) }
|
||||
.dynamic : { *(.dynamic) }
|
||||
|
||||
.tdata ${TDATA_START_ADDR} :
|
||||
{
|
||||
${RELOCATING+PROVIDE (__ep = .);}
|
||||
*(.edata)
|
||||
*(.edata23)
|
||||
*(.tbyte)
|
||||
*(.tcommon_byte)
|
||||
*(.tdata)
|
||||
*(.tdata*)
|
||||
*(.ebss)
|
||||
*(.ebss23)
|
||||
*(.tbss)
|
||||
*(.tbss*)
|
||||
*(.tcommon)
|
||||
}
|
||||
|
||||
/* We want the small data sections together, so single-instruction offsets
|
||||
can access them all, and initialized data all before uninitialized, so
|
||||
we can shorten the on-disk segment size. */
|
||||
|
||||
.sdata ${SDATA_START_ADDR} :
|
||||
{
|
||||
${RELOCATING+PROVIDE (__gp = . + 0x8000);}
|
||||
*(.sdata)
|
||||
*(.sdata23)
|
||||
}
|
||||
|
||||
/* See comment about .rozdata. */
|
||||
.rosdata ${ROSDATA_START_ADDR} :
|
||||
{
|
||||
*(.rosdata)
|
||||
*(.sconst)
|
||||
*(.sconst23)
|
||||
}
|
||||
|
||||
/* We place the .sbss data section AFTER the .rosdata section, so that
|
||||
it can directly preceed the .bss section. This allows runtime startup
|
||||
code to initialise all the zero-data sections by simply taking the
|
||||
value of '_edata' and zeroing until it reaches '_end'. */
|
||||
|
||||
.sbss :
|
||||
{
|
||||
${RELOCATING+__sbss_start = .;}
|
||||
*(.sbss)
|
||||
*(.sbss23)
|
||||
*(.scommon)
|
||||
}
|
||||
|
||||
${RELOCATING+_edata = DEFINED (__sbss_start) ? __sbss_start : . ;}
|
||||
${RELOCATING+PROVIDE (edata = _edata);}
|
||||
|
||||
.bss :
|
||||
{
|
||||
${RELOCATING+__bss_start = DEFINED (__sbss_start) ? __sbss_start : . ;}
|
||||
${RELOCATING+__real_bss_start = . ;}
|
||||
*(.dynbss)
|
||||
*(.bss)
|
||||
*(COMMON)
|
||||
}
|
||||
|
||||
${RELOCATING+_end = . ;}
|
||||
${RELOCATING+PROVIDE (end = .);}
|
||||
${RELOCATING+PROVIDE (_heap_start = .);}
|
||||
|
||||
/* Stabs debugging sections. */
|
||||
.stab 0 : { *(.stab) }
|
||||
.stabstr 0 : { *(.stabstr) }
|
||||
.stab.excl 0 : { *(.stab.excl) }
|
||||
.stab.exclstr 0 : { *(.stab.exclstr) }
|
||||
.stab.index 0 : { *(.stab.index) }
|
||||
.stab.indexstr 0 : { *(.stab.indexstr) }
|
||||
.comment 0 : { *(.comment) }
|
||||
|
||||
/* DWARF debug sections.
|
||||
Symbols in the DWARF debugging sections are relative to the beginning
|
||||
of the section so we begin them at 0. */
|
||||
|
||||
/* DWARF 1 */
|
||||
.debug 0 : { *(.debug) }
|
||||
.line 0 : { *(.line) }
|
||||
|
||||
/* GNU DWARF 1 extensions */
|
||||
.debug_srcinfo 0 : { *(.debug_srcinfo) }
|
||||
.debug_sfnames 0 : { *(.debug_sfnames) }
|
||||
|
||||
/* DWARF 1.1 and DWARF 2 */
|
||||
.debug_aranges 0 : { *(.debug_aranges) }
|
||||
.debug_pubnames 0 : { *(.debug_pubnames) }
|
||||
|
||||
/* DWARF 2 */
|
||||
.debug_info 0 : { *(.debug_info) *(.gnu.linkonce.wi.*) }
|
||||
.debug_abbrev 0 : { *(.debug_abbrev) }
|
||||
.debug_line 0 : { *(.debug_line) }
|
||||
.debug_frame 0 : { *(.debug_frame) }
|
||||
.debug_str 0 : { *(.debug_str) }
|
||||
.debug_loc 0 : { *(.debug_loc) }
|
||||
.debug_macinfo 0 : { *(.debug_macinfo) }
|
||||
|
||||
/* SGI/MIPS DWARF 2 extensions. */
|
||||
.debug_weaknames 0 : { *(.debug_weaknames) }
|
||||
.debug_funcnames 0 : { *(.debug_funcnames) }
|
||||
.debug_typenames 0 : { *(.debug_typenames) }
|
||||
.debug_varnames 0 : { *(.debug_varnames) }
|
||||
|
||||
/* DWARF 3 */
|
||||
.debug_pubtypes 0 : { *(.debug_pubtypes) }
|
||||
.debug_ranges 0 : { *(.debug_ranges) }
|
||||
|
||||
/* DWARF Extension. */
|
||||
.debug_macro 0 : { *(.debug_macro) }
|
||||
|
||||
/* User stack. */
|
||||
.stack 0x200000 :
|
||||
{
|
||||
${RELOCATING+__stack = .;}
|
||||
*(.stack)
|
||||
}
|
||||
}
|
||||
EOF
|
@ -1,3 +1,9 @@
|
||||
2012-11-09 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* configure.in: Add bfd_v850_rh850_arch.
|
||||
* configure: Regenerate.
|
||||
* disassemble.c (disassembler): Likewise.
|
||||
|
||||
2012-11-09 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* aarch64-opc.h (gen_mask): Remove trailing redundant `;'.
|
||||
|
1
opcodes/configure
vendored
1
opcodes/configure
vendored
@ -12581,6 +12581,7 @@ if test x${all_targets} = xfalse ; then
|
||||
bfd_v850_arch) ta="$ta v850-opc.lo v850-dis.lo" ;;
|
||||
bfd_v850e_arch) ta="$ta v850-opc.lo v850-dis.lo" ;;
|
||||
bfd_v850ea_arch) ta="$ta v850-opc.lo v850-dis.lo" ;;
|
||||
bfd_v850_rh850_arch) ta="$ta v850-opc.lo v850-dis.lo" ;;
|
||||
bfd_vax_arch) ta="$ta vax-dis.lo" ;;
|
||||
bfd_w65_arch) ta="$ta w65-dis.lo" ;;
|
||||
bfd_we32k_arch) ;;
|
||||
|
@ -318,6 +318,7 @@ if test x${all_targets} = xfalse ; then
|
||||
bfd_v850_arch) ta="$ta v850-opc.lo v850-dis.lo" ;;
|
||||
bfd_v850e_arch) ta="$ta v850-opc.lo v850-dis.lo" ;;
|
||||
bfd_v850ea_arch) ta="$ta v850-opc.lo v850-dis.lo" ;;
|
||||
bfd_v850_rh850_arch) ta="$ta v850-opc.lo v850-dis.lo" ;;
|
||||
bfd_vax_arch) ta="$ta vax-dis.lo" ;;
|
||||
bfd_w65_arch) ta="$ta w65-dis.lo" ;;
|
||||
bfd_we32k_arch) ;;
|
||||
|
@ -436,6 +436,7 @@ disassembler (abfd)
|
||||
#endif
|
||||
#ifdef ARCH_v850
|
||||
case bfd_arch_v850:
|
||||
case bfd_arch_v850_rh850:
|
||||
disassemble = print_insn_v850;
|
||||
break;
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user