* common.h: Fix case of "Meta".

* metag.h: New file.

	* dis-asm.h (print_insn_metag): New declaration.

	* metag.h: New file.

	* Makefile.am: Add Meta.
	* Makefile.in: Regenerate.
	* configure: Regenerate.
	* configure.in: Add Meta.
	* disassemble.c: Add Meta support.
	* metag-dis.c: New file.

	* Makefile.am: Add Meta.
	* Makefile.in: Regenerate.
	* archures.c (bfd_mach_metag): New.
	* bfd-in2.h: Regenerate.
	* config.bfd: Add Meta.
	* configure: Regenerate.
	* configure.in: Add Meta.
	* cpu-metag.c: New file.
	* elf-bfd.h: Add Meta.
	* elf32-metag.c: New file.
	* elf32-metag.h: New file.
	* libbfd.h: Regenerate.
	* reloc.c: Add Meta relocations.
	* targets.c: Add Meta.

	* Makefile.am: Add Meta.
	* Makefile.in: Regenerate.
	* config/tc-metag.c: New file.
	* config/tc-metag.h: New file.
	* configure.tgt: Add Meta.
	* doc/Makefile.am: Add Meta.
	* doc/Makefile.in: Regenerate.
	* doc/all.texi: Add Meta.
	* doc/as.texiinfo: Document Meta options.
	* doc/c-metag.texi: New file.

	* gas/metag/labelarithmetic.d: New file.
	* gas/metag/labelarithmetic.s: New file.
	* gas/metag/metacore12.d: New file.
	* gas/metag/metacore12.s: New file.
	* gas/metag/metacore21-invalid.l: New file.
	* gas/metag/metacore21-invalid.s: New file.
	* gas/metag/metacore21.d: New file.
	* gas/metag/metacore21.s: New file.
	* gas/metag/metacore21ext.d: New file.
	* gas/metag/metacore21ext.s: New file.
	* gas/metag/metadsp21-invalid.l: New file.
	* gas/metag/metadsp21-invalid.s: New file.
	* gas/metag/metadsp21.d: New file.
	* gas/metag/metadsp21.s: New file.
	* gas/metag/metadsp21ext.d: New file.
	* gas/metag/metadsp21ext.s: New file.
	* gas/metag/metafpu21.d: New file.
	* gas/metag/metafpu21.s: New file.
	* gas/metag/metafpu21ext.d: New file.
	* gas/metag/metafpu21ext.s: New file.
	* gas/metag/metag.exp: New file.
	* gas/metag/tls.d: New file.
	* gas/metag/tls.s: New file.

	* Makefile.am: Add Meta.
	* Makefile.in: Regenerate.
	* configure.tgt: Add Meta.
	* emulparams/elf32metag.sh: New file.
	* emultempl/metagelf.em: New file.

	* ld-elf/merge.d: Mark Meta as xfail.
	* ld-gc/start.d: Skip this test on Meta.
	* ld-gc/personality.d: Skip this test on Meta.
	* ld-metag/external.s: New file.
	* ld-metag/metag.exp: New file.
	* ld-metag/pcrel.d: New file.
	* ld-metag/pcrel.s: New file.
	* ld-metag/shared.d: New file.
	* ld-metag/shared.r: New file.
	* ld-metag/shared.s: New file.
	* ld-metag/stub.d: New file.
	* ld-metag/stub.s: New file.
	* ld-metag/stub_pic_app.d: New file.
	* ld-metag/stub_pic_app.r: New file.
	* ld-metag/stub_pic_app.s: New file.
	* ld-metag/stub_pic_shared.d: New file.
	* ld-metag/stub_pic_shared.s: New file.
	* ld-metag/stub_shared.d: New file.
	* ld-metag/stub_shared.r: New file.
	* ld-metag/stub_shared.s: New file.

	* binutils/readelf.c: (guess_is_rela): Add EM_METAG.
	(dump_relocations): Add EM_METAG.
	(get_machine_name): Correct case for Meta.
	(is_32bit_abs_reloc): Add support for Meta ADDR32 reloc.
	(is_none_reloc): Add support for Meta NONE reloc.
This commit is contained in:
Nick Clifton 2013-01-10 09:49:22 +00:00
parent 9e9143bc87
commit a3c629886c
55 changed files with 17988 additions and 5 deletions

View File

@ -1,3 +1,20 @@
2013-01-10 Will Newton <will.newton@imgtec.com>
* Makefile.am: Add Meta.
* Makefile.in: Regenerate.
* archures.c (bfd_mach_metag): New.
* bfd-in2.h: Regenerate.
* config.bfd: Add Meta.
* configure: Regenerate.
* configure.in: Add Meta.
* cpu-metag.c: New file.
* elf-bfd.h: Add Meta.
* elf32-metag.c: New file.
* elf32-metag.h: New file.
* libbfd.h: Regenerate.
* reloc.c: Add Meta relocations.
* targets.c: Add Meta.
2013-01-08 Yufeng Zhang <yufeng.zhang@arm.com>
* elf-bfd.h (elfcore_write_aarch_tls): Add prototype.

View File

@ -129,6 +129,7 @@ ALL_MACHINES = \
cpu-m88k.lo \
cpu-mcore.lo \
cpu-mep.lo \
cpu-metag.lo \
cpu-microblaze.lo \
cpu-mips.lo \
cpu-mmix.lo \
@ -211,6 +212,7 @@ ALL_MACHINES_CFILES = \
cpu-m88k.c \
cpu-mcore.c \
cpu-mep.c \
cpu-metag.c \
cpu-microblaze.c \
cpu-mips.c \
cpu-mmix.c \
@ -340,6 +342,7 @@ BFD32_BACKENDS = \
elf32-m88k.lo \
elf32-mcore.lo \
elf32-mep.lo \
elf32-metag.lo \
elf32-microblaze.lo \
elf32-mips.lo \
elf32-moxie.lo \
@ -528,6 +531,7 @@ BFD32_BACKENDS_CFILES = \
elf32-m88k.c \
elf32-mcore.c \
elf32-mep.c \
elf32-metag.c \
elf32-microblaze.c \
elf32-mips.c \
elf32-moxie.c \

View File

@ -430,6 +430,7 @@ ALL_MACHINES = \
cpu-m88k.lo \
cpu-mcore.lo \
cpu-mep.lo \
cpu-metag.lo \
cpu-microblaze.lo \
cpu-mips.lo \
cpu-mmix.lo \
@ -512,6 +513,7 @@ ALL_MACHINES_CFILES = \
cpu-m88k.c \
cpu-mcore.c \
cpu-mep.c \
cpu-metag.c \
cpu-microblaze.c \
cpu-mips.c \
cpu-mmix.c \
@ -642,6 +644,7 @@ BFD32_BACKENDS = \
elf32-m88k.lo \
elf32-mcore.lo \
elf32-mep.lo \
elf32-metag.lo \
elf32-microblaze.lo \
elf32-mips.lo \
elf32-moxie.lo \
@ -830,6 +833,7 @@ BFD32_BACKENDS_CFILES = \
elf32-m88k.c \
elf32-mcore.c \
elf32-mep.c \
elf32-metag.c \
elf32-microblaze.c \
elf32-mips.c \
elf32-moxie.c \
@ -1336,6 +1340,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-m9s12xg.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-mcore.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-mep.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-metag.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-microblaze.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-mips.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-mmix.Plo@am__quote@
@ -1424,6 +1429,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-m88k.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-mcore.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-mep.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-metag.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-microblaze.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-mips.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-moxie.Plo@am__quote@

View File

@ -365,6 +365,8 @@ DESCRIPTION
.#define bfd_mach_mep 1
.#define bfd_mach_mep_h1 0x6831
.#define bfd_mach_mep_c5 0x6335
. bfd_arch_metag,
.#define bfd_mach_metag 1
. bfd_arch_ia64, {* HP/Intel ia64 *}
.#define bfd_mach_ia64_elf64 64
.#define bfd_mach_ia64_elf32 32
@ -548,6 +550,7 @@ extern const bfd_arch_info_type bfd_m68k_arch;
extern const bfd_arch_info_type bfd_m88k_arch;
extern const bfd_arch_info_type bfd_mcore_arch;
extern const bfd_arch_info_type bfd_mep_arch;
extern const bfd_arch_info_type bfd_metag_arch;
extern const bfd_arch_info_type bfd_mips_arch;
extern const bfd_arch_info_type bfd_microblaze_arch;
extern const bfd_arch_info_type bfd_mmix_arch;
@ -635,6 +638,7 @@ static const bfd_arch_info_type * const bfd_archures_list[] =
&bfd_m88k_arch,
&bfd_mcore_arch,
&bfd_mep_arch,
&bfd_metag_arch,
&bfd_microblaze_arch,
&bfd_mips_arch,
&bfd_mmix_arch,

View File

@ -2096,6 +2096,8 @@ enum bfd_architecture
#define bfd_mach_mep 1
#define bfd_mach_mep_h1 0x6831
#define bfd_mach_mep_c5 0x6335
bfd_arch_metag,
#define bfd_mach_metag 1
bfd_arch_ia64, /* HP/Intel ia64 */
#define bfd_mach_ia64_elf64 64
#define bfd_mach_ia64_elf32 32
@ -3996,6 +3998,46 @@ short offset into 11 bits. */
BFD_RELOC_MEP_GNU_VTENTRY,
/* Imagination Technologies Meta relocations. */
BFD_RELOC_METAG_HIADDR16,
BFD_RELOC_METAG_LOADDR16,
BFD_RELOC_METAG_RELBRANCH,
BFD_RELOC_METAG_GETSETOFF,
BFD_RELOC_METAG_HIOG,
BFD_RELOC_METAG_LOOG,
BFD_RELOC_METAG_REL8,
BFD_RELOC_METAG_REL16,
BFD_RELOC_METAG_HI16_GOTOFF,
BFD_RELOC_METAG_LO16_GOTOFF,
BFD_RELOC_METAG_GETSET_GOTOFF,
BFD_RELOC_METAG_GETSET_GOT,
BFD_RELOC_METAG_HI16_GOTPC,
BFD_RELOC_METAG_LO16_GOTPC,
BFD_RELOC_METAG_HI16_PLT,
BFD_RELOC_METAG_LO16_PLT,
BFD_RELOC_METAG_RELBRANCH_PLT,
BFD_RELOC_METAG_GOTOFF,
BFD_RELOC_METAG_PLT,
BFD_RELOC_METAG_COPY,
BFD_RELOC_METAG_JMP_SLOT,
BFD_RELOC_METAG_RELATIVE,
BFD_RELOC_METAG_GLOB_DAT,
BFD_RELOC_METAG_TLS_GD,
BFD_RELOC_METAG_TLS_LDM,
BFD_RELOC_METAG_TLS_LDO_HI16,
BFD_RELOC_METAG_TLS_LDO_LO16,
BFD_RELOC_METAG_TLS_LDO,
BFD_RELOC_METAG_TLS_IE,
BFD_RELOC_METAG_TLS_IENONPIC,
BFD_RELOC_METAG_TLS_IENONPIC_HI16,
BFD_RELOC_METAG_TLS_IENONPIC_LO16,
BFD_RELOC_METAG_TLS_TPOFF,
BFD_RELOC_METAG_TLS_DTPMOD,
BFD_RELOC_METAG_TLS_DTPOFF,
BFD_RELOC_METAG_TLS_LE,
BFD_RELOC_METAG_TLS_LE_HI16,
BFD_RELOC_METAG_TLS_LE_LO16,
/* These are relocations for the GETA instruction. */
BFD_RELOC_MMIX_GETA,
BFD_RELOC_MMIX_GETA_1,

View File

@ -938,6 +938,11 @@ case "${targ}" in
targ_selvecs=bfd_elf32_mep_little_vec
;;
metag-*-*)
targ_defvec=bfd_elf32_metag_vec
targ_underscore=yes
;;
microblazeel*-*)
targ_defvec=bfd_elf32_microblazeel_vec
targ_selvecs=bfd_elf32_microblaze_vec

1
bfd/configure vendored
View File

@ -15283,6 +15283,7 @@ do
bfd_elf32_mcore_little_vec) tb="$tb elf32-mcore.lo elf32.lo $elf" ;;
bfd_elf32_mep_vec) tb="$tb elf32-mep.lo elf32.lo $elf" ;;
bfd_elf32_mep_little_vec) tb="$tb elf32-mep.lo elf32.lo $elf" ;;
bfd_elf32_metag_vec) tb="$tb elf32-metag.lo elf32.lo $elf" ;;
bfd_elf32_microblazeel_vec) tb="$tb elf32-microblaze.lo elf32.lo $elf" ;;
bfd_elf32_microblaze_vec) tb="$tb elf32-microblaze.lo elf32.lo $elf" ;;
bfd_elf32_mn10200_vec) tb="$tb elf-m10200.lo elf32.lo $elf" ;;

View File

@ -780,6 +780,7 @@ do
bfd_elf32_mcore_little_vec) tb="$tb elf32-mcore.lo elf32.lo $elf" ;;
bfd_elf32_mep_vec) tb="$tb elf32-mep.lo elf32.lo $elf" ;;
bfd_elf32_mep_little_vec) tb="$tb elf32-mep.lo elf32.lo $elf" ;;
bfd_elf32_metag_vec) tb="$tb elf32-metag.lo elf32.lo $elf" ;;
bfd_elf32_microblazeel_vec) tb="$tb elf32-microblaze.lo elf32.lo $elf" ;;
bfd_elf32_microblaze_vec) tb="$tb elf32-microblaze.lo elf32.lo $elf" ;;
bfd_elf32_mn10200_vec) tb="$tb elf-m10200.lo elf32.lo $elf" ;;

41
bfd/cpu-metag.c Normal file
View File

@ -0,0 +1,41 @@
/* BFD support for the Imagination Technologies Meta processor.
Copyright (C) 2013 Free Software Foundation, Inc.
Contributed by Imagination Technologies Ltd.
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"
const bfd_arch_info_type bfd_metag_arch =
{
32, /* Bits per word. */
32, /* Bits per address. */
8, /* Bits per byte. */
bfd_arch_metag, /* Architecture. */
bfd_mach_metag, /* Machine. */
"metag", /* Architecture name. */
"metag", /* Printable name. */
4, /* Section align power. */
TRUE, /* The default ? */
bfd_default_compatible, /* Architecture comparison fn. */
bfd_default_scan, /* String to architecture convert fn. */
bfd_arch_default_fill, /* Default fill. */
NULL /* Next in list. */
};

View File

@ -417,6 +417,7 @@ enum elf_target_id
M32R_ELF_DATA,
M68HC11_ELF_DATA,
M68K_ELF_DATA,
METAG_ELF_DATA,
MICROBLAZE_ELF_DATA,
MIPS_ELF_DATA,
MN10300_ELF_DATA,

4313
bfd/elf32-metag.c Normal file

File diff suppressed because it is too large Load Diff

38
bfd/elf32-metag.h Normal file
View File

@ -0,0 +1,38 @@
/* Meta support for 32-bit ELF
Copyright (C) 2013 Free Software Foundation, Inc.
Contributed by Imagination Technologies Ltd.
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 _ELF32_METAG_H
#define _ELF32_METAG_H
extern int elf_metag_setup_section_lists
(bfd *, struct bfd_link_info *);
extern void elf_metag_next_input_section
(struct bfd_link_info *, asection *);
extern bfd_boolean elf_metag_size_stubs
(bfd *, bfd *, struct bfd_link_info *, bfd_signed_vma,
asection * (*) (const char *, asection *), void (*) (void));
extern bfd_boolean elf_metag_build_stubs
(struct bfd_link_info *);
#endif /* _ELF32_METAG_H */

View File

@ -1844,6 +1844,44 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
"BFD_RELOC_MEP_GNU_VTINHERIT",
"BFD_RELOC_MEP_GNU_VTENTRY",
"BFD_RELOC_METAG_HIADDR16",
"BFD_RELOC_METAG_LOADDR16",
"BFD_RELOC_METAG_RELBRANCH",
"BFD_RELOC_METAG_GETSETOFF",
"BFD_RELOC_METAG_HIOG",
"BFD_RELOC_METAG_LOOG",
"BFD_RELOC_METAG_REL8",
"BFD_RELOC_METAG_REL16",
"BFD_RELOC_METAG_HI16_GOTOFF",
"BFD_RELOC_METAG_LO16_GOTOFF",
"BFD_RELOC_METAG_GETSET_GOTOFF",
"BFD_RELOC_METAG_GETSET_GOT",
"BFD_RELOC_METAG_HI16_GOTPC",
"BFD_RELOC_METAG_LO16_GOTPC",
"BFD_RELOC_METAG_HI16_PLT",
"BFD_RELOC_METAG_LO16_PLT",
"BFD_RELOC_METAG_RELBRANCH_PLT",
"BFD_RELOC_METAG_GOTOFF",
"BFD_RELOC_METAG_PLT",
"BFD_RELOC_METAG_COPY",
"BFD_RELOC_METAG_JMP_SLOT",
"BFD_RELOC_METAG_RELATIVE",
"BFD_RELOC_METAG_GLOB_DAT",
"BFD_RELOC_METAG_TLS_GD",
"BFD_RELOC_METAG_TLS_LDM",
"BFD_RELOC_METAG_TLS_LDO_HI16",
"BFD_RELOC_METAG_TLS_LDO_LO16",
"BFD_RELOC_METAG_TLS_LDO",
"BFD_RELOC_METAG_TLS_IE",
"BFD_RELOC_METAG_TLS_IENONPIC",
"BFD_RELOC_METAG_TLS_IENONPIC_HI16",
"BFD_RELOC_METAG_TLS_IENONPIC_LO16",
"BFD_RELOC_METAG_TLS_TPOFF",
"BFD_RELOC_METAG_TLS_DTPMOD",
"BFD_RELOC_METAG_TLS_DTPOFF",
"BFD_RELOC_METAG_TLS_LE",
"BFD_RELOC_METAG_TLS_LE_HI16",
"BFD_RELOC_METAG_TLS_LE_LO16",
"BFD_RELOC_MMIX_GETA",
"BFD_RELOC_MMIX_GETA_1",
"BFD_RELOC_MMIX_GETA_2",

View File

@ -4197,6 +4197,85 @@ ENUMDOC
Toshiba Media Processor Relocations.
COMMENT
ENUM
BFD_RELOC_METAG_HIADDR16
ENUMX
BFD_RELOC_METAG_LOADDR16
ENUMX
BFD_RELOC_METAG_RELBRANCH
ENUMX
BFD_RELOC_METAG_GETSETOFF
ENUMX
BFD_RELOC_METAG_HIOG
ENUMX
BFD_RELOC_METAG_LOOG
ENUMX
BFD_RELOC_METAG_REL8
ENUMX
BFD_RELOC_METAG_REL16
ENUMX
BFD_RELOC_METAG_HI16_GOTOFF
ENUMX
BFD_RELOC_METAG_LO16_GOTOFF
ENUMX
BFD_RELOC_METAG_GETSET_GOTOFF
ENUMX
BFD_RELOC_METAG_GETSET_GOT
ENUMX
BFD_RELOC_METAG_HI16_GOTPC
ENUMX
BFD_RELOC_METAG_LO16_GOTPC
ENUMX
BFD_RELOC_METAG_HI16_PLT
ENUMX
BFD_RELOC_METAG_LO16_PLT
ENUMX
BFD_RELOC_METAG_RELBRANCH_PLT
ENUMX
BFD_RELOC_METAG_GOTOFF
ENUMX
BFD_RELOC_METAG_PLT
ENUMX
BFD_RELOC_METAG_COPY
ENUMX
BFD_RELOC_METAG_JMP_SLOT
ENUMX
BFD_RELOC_METAG_RELATIVE
ENUMX
BFD_RELOC_METAG_GLOB_DAT
ENUMX
BFD_RELOC_METAG_TLS_GD
ENUMX
BFD_RELOC_METAG_TLS_LDM
ENUMX
BFD_RELOC_METAG_TLS_LDO_HI16
ENUMX
BFD_RELOC_METAG_TLS_LDO_LO16
ENUMX
BFD_RELOC_METAG_TLS_LDO
ENUMX
BFD_RELOC_METAG_TLS_IE
ENUMX
BFD_RELOC_METAG_TLS_IENONPIC
ENUMX
BFD_RELOC_METAG_TLS_IENONPIC_HI16
ENUMX
BFD_RELOC_METAG_TLS_IENONPIC_LO16
ENUMX
BFD_RELOC_METAG_TLS_TPOFF
ENUMX
BFD_RELOC_METAG_TLS_DTPMOD
ENUMX
BFD_RELOC_METAG_TLS_DTPOFF
ENUMX
BFD_RELOC_METAG_TLS_LE
ENUMX
BFD_RELOC_METAG_TLS_LE_HI16
ENUMX
BFD_RELOC_METAG_TLS_LE_LO16
ENUMDOC
Imagination Technologies Meta relocations.
ENUM
BFD_RELOC_MMIX_GETA
ENUMX

View File

@ -659,6 +659,7 @@ extern const bfd_target bfd_elf32_mcore_big_vec;
extern const bfd_target bfd_elf32_mcore_little_vec;
extern const bfd_target bfd_elf32_mep_vec;
extern const bfd_target bfd_elf32_mep_little_vec;
extern const bfd_target bfd_elf32_metag_vec;
extern const bfd_target bfd_elf32_microblazeel_vec;
extern const bfd_target bfd_elf32_microblaze_vec;
extern const bfd_target bfd_elf32_mn10200_vec;
@ -1036,6 +1037,7 @@ static const bfd_target * const _bfd_target_vector[] =
&bfd_elf32_mcore_big_vec,
&bfd_elf32_mcore_little_vec,
&bfd_elf32_mep_vec,
&bfd_elf32_metag_vec,
&bfd_elf32_microblaze_vec,
&bfd_elf32_mn10200_vec,
&bfd_elf32_mn10300_vec,

View File

@ -1,3 +1,11 @@
2013-01-10 Will Newton <will.newton@imgtec.com>
* binutils/readelf.c: (guess_is_rela): Add EM_METAG.
(dump_relocations): Add EM_METAG.
(get_machine_name): Correct case for Meta.
(is_32bit_abs_reloc): Add support for Meta ADDR32 reloc.
(is_none_reloc): Add support for Meta NONE reloc.
2013-01-08 Yufeng Zhang <yufeng.zhang@arm.com>
* readelf.c (get_note_type): Handle NT_ARM_TLS, NT_ARM_HW_BREAK

View File

@ -124,6 +124,7 @@
#include "elf/m68hc11.h"
#include "elf/mcore.h"
#include "elf/mep.h"
#include "elf/metag.h"
#include "elf/microblaze.h"
#include "elf/mips.h"
#include "elf/mmix.h"
@ -610,6 +611,7 @@ guess_is_rela (unsigned int e_machine)
case EM_M32R:
case EM_MCORE:
case EM_CYGNUS_MEP:
case EM_METAG:
case EM_MMIX:
case EM_MN10200:
case EM_CYGNUS_MN10200:
@ -1264,6 +1266,10 @@ dump_relocations (FILE * file,
rtype = elf_rx_reloc_type (type);
break;
case EM_METAG:
rtype = elf_metag_reloc_type (type);
break;
case EM_XC16X:
case EM_C166:
rtype = elf_xc16x_reloc_type (type);
@ -2029,7 +2035,7 @@ get_machine_name (unsigned e_machine)
case EM_MICROBLAZE_OLD: return "Xilinx MicroBlaze";
case EM_RL78: return "Renesas RL78";
case EM_RX: return "Renesas RX";
case EM_METAG: return "Imagination Technologies META processor architecture";
case EM_METAG: return "Imagination Technologies Meta processor architecture";
case EM_MCST_ELBRUS: return "MCST Elbrus general purpose hardware architecture";
case EM_ECOG16: return "Cyan Technology eCOG16 family";
case EM_ETPU: return "Freescale Extended Time Processing Unit";
@ -10049,6 +10055,8 @@ is_32bit_abs_reloc (unsigned int reloc_type)
return reloc_type == 1; /* R_MCORE_ADDR32. */
case EM_CYGNUS_MEP:
return reloc_type == 4; /* R_MEP_32. */
case EM_METAG:
return reloc_type == 2; /* R_METAG_ADDR32. */
case EM_MICROBLAZE:
return reloc_type == 1; /* R_MICROBLAZE_32. */
case EM_MIPS:
@ -10384,6 +10392,8 @@ is_none_reloc (unsigned int reloc_type)
|| reloc_type == 17 /* R_XTENSA_DIFF8. */
|| reloc_type == 18 /* R_XTENSA_DIFF16. */
|| reloc_type == 19 /* R_XTENSA_DIFF32. */);
case EM_METAG:
return reloc_type == 3; /* R_METAG_NONE. */
}
return FALSE;
}

View File

@ -1,3 +1,16 @@
2013-01-10 Will Newton <will.newton@imgtec.com>
* Makefile.am: Add Meta.
* Makefile.in: Regenerate.
* config/tc-metag.c: New file.
* config/tc-metag.h: New file.
* configure.tgt: Add Meta.
* doc/Makefile.am: Add Meta.
* doc/Makefile.in: Regenerate.
* doc/all.texi: Add Meta.
* doc/as.texiinfo: Document Meta options.
* doc/c-metag.texi: New file.
2013-01-09 Steve Ellcey <sellcey@mips.com>
* config/tc-i386.c (md_begin): Remove 'internal Error' from as_fatal

View File

@ -155,6 +155,7 @@ TARGET_CPU_CFILES = \
config/tc-m68k.c \
config/tc-mcore.c \
config/tc-mep.c \
config/tc-metag.c \
config/tc-microblaze.c \
config/tc-mips.c \
config/tc-mmix.c \
@ -225,6 +226,7 @@ TARGET_CPU_HFILES = \
config/tc-m68k.h \
config/tc-mcore.h \
config/tc-mep.h \
config/tc-metag.h \
config/tc-microblaze.h \
config/tc-mips.h \
config/tc-mmix.h \

View File

@ -424,6 +424,7 @@ TARGET_CPU_CFILES = \
config/tc-m68k.c \
config/tc-mcore.c \
config/tc-mep.c \
config/tc-metag.c \
config/tc-microblaze.c \
config/tc-mips.c \
config/tc-mmix.c \
@ -494,6 +495,7 @@ TARGET_CPU_HFILES = \
config/tc-m68k.h \
config/tc-mcore.h \
config/tc-mep.h \
config/tc-metag.h \
config/tc-microblaze.h \
config/tc-mips.h \
config/tc-mmix.h \
@ -844,6 +846,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-m68k.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-mcore.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-mep.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-metag.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-microblaze.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-mips.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-mmix.Po@am__quote@
@ -1339,6 +1342,20 @@ tc-mep.obj: config/tc-mep.c
@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-mep.obj `if test -f 'config/tc-mep.c'; then $(CYGPATH_W) 'config/tc-mep.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-mep.c'; fi`
tc-metag.o: config/tc-metag.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-metag.o -MD -MP -MF $(DEPDIR)/tc-metag.Tpo -c -o tc-metag.o `test -f 'config/tc-metag.c' || echo '$(srcdir)/'`config/tc-metag.c
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-metag.Tpo $(DEPDIR)/tc-metag.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-metag.c' object='tc-metag.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-metag.o `test -f 'config/tc-metag.c' || echo '$(srcdir)/'`config/tc-metag.c
tc-metag.obj: config/tc-metag.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-metag.obj -MD -MP -MF $(DEPDIR)/tc-metag.Tpo -c -o tc-metag.obj `if test -f 'config/tc-metag.c'; then $(CYGPATH_W) 'config/tc-metag.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-metag.c'; fi`
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-metag.Tpo $(DEPDIR)/tc-metag.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-metag.c' object='tc-metag.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-metag.obj `if test -f 'config/tc-metag.c'; then $(CYGPATH_W) 'config/tc-metag.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-metag.c'; fi`
tc-microblaze.o: config/tc-microblaze.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-microblaze.o -MD -MP -MF $(DEPDIR)/tc-microblaze.Tpo -c -o tc-microblaze.o `test -f 'config/tc-microblaze.c' || echo '$(srcdir)/'`config/tc-microblaze.c
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-microblaze.Tpo $(DEPDIR)/tc-microblaze.Po

View File

@ -1,5 +1,7 @@
-*- text -*-
* Add support for the Imagination Technologies Meta processor.
* Add support for the v850e3v5.
Changes in 2.23:

7115
gas/config/tc-metag.c Normal file

File diff suppressed because it is too large Load Diff

72
gas/config/tc-metag.h Normal file
View File

@ -0,0 +1,72 @@
/* tc-metag.h -- Header file for tc-metag.c.
Copyright (C) 2013 Free Software Foundation, Inc.
Contributed by Imagination Technologies Ltd.
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_METAG
#define LISTING_HEADER "META GAS "
/* The target BFD architecture. */
#define TARGET_ARCH bfd_arch_metag
#define TARGET_FORMAT "elf32-metag"
#define TARGET_BYTES_BIG_ENDIAN 0
/* Permit temporary numeric labels. */
#define LOCAL_LABELS_FB 1
#define DIFF_EXPR_OK /* 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 tc_fix_adjustable(FIX) metag_fix_adjustable (FIX)
extern bfd_boolean metag_fix_adjustable (struct fix *);
#define TC_FORCE_RELOCATION(fix) metag_force_relocation (fix)
extern int metag_force_relocation (struct fix *);
#define TC_HANDLES_FX_DONE
/* Call md_pcrel_from_section(), not md_pcrel_from(). */
#define MD_PCREL_FROM_SECTION(FIX, SEC) md_pcrel_from_section (FIX, SEC)
extern long md_pcrel_from_section (struct fix *, segT);
#define HANDLE_ALIGN(fragp) metag_handle_align (fragp)
extern void metag_handle_align (struct frag *);
#define DWARF2_LINE_MIN_INSN_LENGTH 1
#define md_parse_name(name, exprP, mode, nextcharP) \
metag_parse_name ((name), (exprP), (mode), (nextcharP))
extern int metag_parse_name (char const *, expressionS *, enum expr_mode, char *);
/* This is used to construct expressions out of @GOTOFF, @PLT and @GOT
symbols. The relocation type is stored in X_md. */
#define O_PIC_reloc O_md1
#define TC_CASE_SENSITIVE
extern const char metag_symbol_chars[];
#define tc_symbol_chars metag_symbol_chars

View File

@ -306,6 +306,9 @@ case ${generic_target} in
mep-*-elf) fmt=elf ;;
metag-*-elf) fmt=elf ;;
metag-*-linux*) fmt=elf em=linux ;;
mcore-*-elf) fmt=elf ;;
mcore-*-pe) fmt=coff em=pe bfd_gas=yes ;;

View File

@ -68,6 +68,7 @@ CPU_DOCS = \
c-m32r.texi \
c-m68hc11.texi \
c-m68k.texi \
c-metag.texi \
c-microblaze.texi \
c-mips.texi \
c-mmix.texi \

View File

@ -310,6 +310,7 @@ CPU_DOCS = \
c-m32r.texi \
c-m68hc11.texi \
c-m68k.texi \
c-metag.texi \
c-microblaze.texi \
c-mips.texi \
c-mmix.texi \

View File

@ -52,6 +52,7 @@
@set M68HC11
@set M680X0
@set MCORE
@set METAG
@set MICROBLAZE
@set MIPS
@set MMIX

View File

@ -387,6 +387,11 @@ gcc(1), ld(1), and the Info entries for @file{binutils} and @file{ld}.
[@b{-jsri2bsr}] [@b{-sifilter}] [@b{-relax}]
[@b{-mcpu=[210|340]}]
@end ifset
@ifset METAG
@emph{Target Meta options:}
[@b{-mcpu=@var{cpu}}] [@b{-mfpu=@var{cpu}}] [@b{-mdsp=@var{cpu}}]
@end ifset
@ifset MICROBLAZE
@emph{Target MICROBLAZE options:}
@c MicroBlaze has no machine-dependent assembler options.
@ -1372,7 +1377,28 @@ Assemble for a little endian target.
@end table
@end ifset
@c man end
@ifset METAG
@ifclear man
@xref{Meta Options}, for the options available when @value{AS} is configured
for a Meta processor.
@end ifclear
@ifset man
@c man begin OPTIONS
The following options are available when @value{AS} is configured for a
Meta processor.
@c man end
@c man begin INCLUDE
@include c-metag.texi
@c ended inside the included file
@end ifset
@end ifset
@c man begin OPTIONS
@ifset MMIX
See the info pages for documentation of the MMIX-specific options.
@end ifset
@ -7018,6 +7044,9 @@ subject, see the hardware manufacturer's manual.
@ifset M68HC11
* M68HC11-Dependent:: M68HC11 and 68HC12 Dependent Features
@end ifset
@ifset METAG
* Meta-Dependent :: Meta Dependent Features
@end ifset
@ifset MICROBLAZE
* MicroBlaze-Dependent:: MICROBLAZE Dependent Features
@end ifset
@ -7221,6 +7250,10 @@ family.
@include c-m68hc11.texi
@end ifset
@ifset METAG
@include c-metag.texi
@end ifset
@ifset MICROBLAZE
@include c-microblaze.texi
@end ifset

82
gas/doc/c-metag.texi Normal file
View File

@ -0,0 +1,82 @@
@c Copyright 2013 Free Software Foundation, Inc.
@c Contributed by Imagination Technologies Ltd.
@c This is part of the GAS manual.
@c For copying conditions, see the file as.texinfo.
@ifset GENERIC
@page
@node Meta-Dependent
@chapter Meta Dependent Features
@end ifset
@ifclear GENERIC
@node Machine Dependencies
@chapter Meta Dependent Features
@end ifclear
@cindex Meta support
@menu
* Meta Options:: Options
* Meta Syntax:: Meta Assembler Syntax
@end menu
@node Meta Options
@section Options
@cindex options for Meta
@cindex Meta options
@cindex architectures, Meta
@cindex Meta architectures
The Imagination Technologies Meta architecture is implemented in a
number of versions, with each new version adding new features such as
instructions and registers. For precise details of what instructions
each core supports, please see the chip's technical reference manual.
The following table lists all available Meta options.
@table @code
@item -mcpu=metac11
Generate code for Meta 1.1.
@item -mcpu=metac12
Generate code for Meta 1.2.
@item -mcpu=metac21
Generate code for Meta 2.1.
@item -mfpu=metac21
Allow code to use FPU hardware of Meta 2.1.
@end table
@node Meta Syntax
@section Syntax
@menu
* Meta-Chars:: Special Characters
* Meta-Regs:: Register Names
@end menu
@node Meta-Chars
@subsection Special Characters
@cindex line comment character, Meta
@cindex Meta line comment character
@samp{!} is the line comment character.
@cindex line separator, Meta
@cindex statement separator, Meta
@cindex Meta line separator
You can use @samp{;} instead of a newline to separate statements.
@cindex symbol names, @samp{$} in
@cindex @code{$} in symbol names
Since @samp{$} has no special meaning, you may use it in symbol names.
@node Meta-Regs
@subsection Register Names
@cindex Meta registers
@cindex registers, Meta
Registers can be specified either using their mnemonic names, such as
@samp{D0Re0}, or using the unit plus register number separated by a @samp{.},
such as @samp{D0.0}.

View File

@ -1,3 +1,29 @@
2013-01-10 Will Newton <will.newton@imgtec.com>
* gas/metag/labelarithmetic.d: New file.
* gas/metag/labelarithmetic.s: New file.
* gas/metag/metacore12.d: New file.
* gas/metag/metacore12.s: New file.
* gas/metag/metacore21-invalid.l: New file.
* gas/metag/metacore21-invalid.s: New file.
* gas/metag/metacore21.d: New file.
* gas/metag/metacore21.s: New file.
* gas/metag/metacore21ext.d: New file.
* gas/metag/metacore21ext.s: New file.
* gas/metag/metadsp21-invalid.l: New file.
* gas/metag/metadsp21-invalid.s: New file.
* gas/metag/metadsp21.d: New file.
* gas/metag/metadsp21.s: New file.
* gas/metag/metadsp21ext.d: New file.
* gas/metag/metadsp21ext.s: New file.
* gas/metag/metafpu21.d: New file.
* gas/metag/metafpu21.s: New file.
* gas/metag/metafpu21ext.d: New file.
* gas/metag/metafpu21ext.s: New file.
* gas/metag/metag.exp: New file.
* gas/metag/tls.d: New file.
* gas/metag/tls.s: New file.
2013-01-08 Yufeng Zhang <yufeng.zhang@arm.com>
* gas/aarch64/diagnostic.s: Add test.

View File

@ -1,3 +1,7 @@
2013-01-10 Will Newton <will.newton@imgtec.com>
* dis-asm.h (print_insn_metag): New declaration.
2012-12-18 Aldy Hernandez <aldyh@redhat.com>
PR other/54324

View File

@ -267,6 +267,7 @@ extern int print_insn_m68k (bfd_vma, disassemble_info *);
extern int print_insn_m88k (bfd_vma, disassemble_info *);
extern int print_insn_mcore (bfd_vma, disassemble_info *);
extern int print_insn_mep (bfd_vma, disassemble_info *);
extern int print_insn_metag (bfd_vma, disassemble_info *);
extern int print_insn_microblaze (bfd_vma, disassemble_info *);
extern int print_insn_mmix (bfd_vma, disassemble_info *);
extern int print_insn_mn10200 (bfd_vma, disassemble_info *);

View File

@ -1,3 +1,8 @@
2013-01-10 Will Newton <will.newton@imgtec.com>
* common.h: Fix case of "Meta".
* metag.h: New file.
2013-01-08 Yufeng Zhang <yufeng.zhang@arm.com>
* common.h (NT_ARM_TLS, NT_ARM_HW_BREAK, NT_ARM_HW_WATCH): New macro

View File

@ -279,7 +279,7 @@
#define EM_MANIK 171 /* M2000 Reconfigurable RISC Microprocessor */
#define EM_CRAYNV2 172 /* Cray Inc. NV2 vector architecture */
#define EM_RX 173 /* Renesas RX family */
#define EM_METAG 174 /* Imagination Technologies META processor architecture */
#define EM_METAG 174 /* Imagination Technologies Meta processor architecture */
#define EM_MCST_ELBRUS 175 /* MCST Elbrus general purpose hardware architecture */
#define EM_ECOG16 176 /* Cyan Technology eCOG16 family */
#define EM_CR16 177 /* National Semiconductor CompactRISC 16-bit processor */

91
include/elf/metag.h Normal file
View File

@ -0,0 +1,91 @@
/* Meta ELF support for BFD.
Copyright (C) 2013 Free Software Foundation, Inc.
Contributed by Imagination Technologies Ltd.
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_METAG_H
#define _ELF_METAG_H
#include "elf/reloc-macros.h"
/* Relocation types. */
START_RELOC_NUMBERS (elf_metag_reloc_type)
RELOC_NUMBER (R_METAG_HIADDR16, 0)
RELOC_NUMBER (R_METAG_LOADDR16, 1)
RELOC_NUMBER (R_METAG_ADDR32, 2)
RELOC_NUMBER (R_METAG_NONE, 3)
RELOC_NUMBER (R_METAG_RELBRANCH, 4)
RELOC_NUMBER (R_METAG_GETSETOFF, 5)
/* Backward compatability */
RELOC_NUMBER (R_METAG_REG32OP1, 6)
RELOC_NUMBER (R_METAG_REG32OP2, 7)
RELOC_NUMBER (R_METAG_REG32OP3, 8)
RELOC_NUMBER (R_METAG_REG16OP1, 9)
RELOC_NUMBER (R_METAG_REG16OP2, 10)
RELOC_NUMBER (R_METAG_REG16OP3, 11)
RELOC_NUMBER (R_METAG_REG32OP4, 12)
RELOC_NUMBER (R_METAG_HIOG, 13)
RELOC_NUMBER (R_METAG_LOOG, 14)
RELOC_NUMBER (R_METAG_REL8, 15)
RELOC_NUMBER (R_METAG_REL16, 16)
/* GNU */
RELOC_NUMBER (R_METAG_GNU_VTINHERIT,30)
RELOC_NUMBER (R_METAG_GNU_VTENTRY, 31)
/* PIC relocations */
RELOC_NUMBER (R_METAG_HI16_GOTOFF, 32)
RELOC_NUMBER (R_METAG_LO16_GOTOFF, 33)
RELOC_NUMBER (R_METAG_GETSET_GOTOFF,34)
RELOC_NUMBER (R_METAG_GETSET_GOT, 35)
RELOC_NUMBER (R_METAG_HI16_GOTPC, 36)
RELOC_NUMBER (R_METAG_LO16_GOTPC, 37)
RELOC_NUMBER (R_METAG_HI16_PLT, 38)
RELOC_NUMBER (R_METAG_LO16_PLT, 39)
RELOC_NUMBER (R_METAG_RELBRANCH_PLT,40)
RELOC_NUMBER (R_METAG_GOTOFF, 41)
RELOC_NUMBER (R_METAG_PLT, 42)
RELOC_NUMBER (R_METAG_COPY, 43)
RELOC_NUMBER (R_METAG_JMP_SLOT, 44)
RELOC_NUMBER (R_METAG_RELATIVE, 45)
RELOC_NUMBER (R_METAG_GLOB_DAT, 46)
/* TLS relocations */
RELOC_NUMBER (R_METAG_TLS_GD, 47)
RELOC_NUMBER (R_METAG_TLS_LDM, 48)
RELOC_NUMBER (R_METAG_TLS_LDO_HI16, 49)
RELOC_NUMBER (R_METAG_TLS_LDO_LO16, 50)
RELOC_NUMBER (R_METAG_TLS_LDO, 51)
RELOC_NUMBER (R_METAG_TLS_IE, 52)
RELOC_NUMBER (R_METAG_TLS_IENONPIC, 53)
RELOC_NUMBER (R_METAG_TLS_IENONPIC_HI16,54)
RELOC_NUMBER (R_METAG_TLS_IENONPIC_LO16,55)
RELOC_NUMBER (R_METAG_TLS_TPOFF, 56)
RELOC_NUMBER (R_METAG_TLS_DTPMOD, 57)
RELOC_NUMBER (R_METAG_TLS_DTPOFF, 58)
RELOC_NUMBER (R_METAG_TLS_LE, 59)
RELOC_NUMBER (R_METAG_TLS_LE_HI16, 60)
RELOC_NUMBER (R_METAG_TLS_LE_LO16, 61)
END_RELOC_NUMBERS (R_METAG_MAX)
#endif /* _ELF_METAG_H */

View File

@ -1,3 +1,7 @@
2013-01-10 Will Newton <will.newton@imgtec.com>
* metag.h: New file.
2013-01-07 Kaushik Phatak <kaushik.phatak@kpitcummins.com>
* cr16.h (make_instruction): Rename to cr16_make_instruction.

2079
include/opcode/metag.h Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,3 +1,11 @@
2013-01-10 Will Newton <will.newton@imgtec.com>
* Makefile.am: Add Meta.
* Makefile.in: Regenerate.
* configure.tgt: Add Meta.
* emulparams/elf32metag.sh: New file.
* emultempl/metagelf.em: New file.
2013-01-09 Alan Modra <amodra@gmail.com>
* emulparams/elf_x86_64.sh (LARGE_BSS_AFTER_BSS): Define.

View File

@ -257,6 +257,7 @@ ALL_EMULATION_SOURCES = \
eelf32mb_linux.c \
eelf32mcore.c \
eelf32mep.c \
eelf32metag.c \
eelf32microblazeel.c \
eelf32microblaze.c \
eelf32mipswindiss.c \
@ -1157,6 +1158,10 @@ eelf32mcore.c: $(srcdir)/emulparams/elf32mcore.sh \
eelf32mep.c: $(srcdir)/emulparams/elf32mep.sh \
$(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/mep.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32mep "$(tdir_mep)"
eelf32metag.c: $(srcdir)/emulparams/elf32metag.sh \
$(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/metagelf.em \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32metag "$(tdir_metag)"
eelf32microblazeel.c: $(srcdir)/emulparams/elf32microblazeel.sh \
$(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elfmicroblaze.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32microblazeel "$(tdir_microblazeel)"

View File

@ -565,6 +565,7 @@ ALL_EMULATION_SOURCES = \
eelf32mb_linux.c \
eelf32mcore.c \
eelf32mep.c \
eelf32metag.c \
eelf32microblazeel.c \
eelf32microblaze.c \
eelf32mipswindiss.c \
@ -1198,6 +1199,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32mb_linux.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32mcore.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32mep.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32metag.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32microblaze.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32microblazeel.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32mipswindiss.Po@am__quote@
@ -2640,6 +2642,10 @@ eelf32mcore.c: $(srcdir)/emulparams/elf32mcore.sh \
eelf32mep.c: $(srcdir)/emulparams/elf32mep.sh \
$(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/mep.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32mep "$(tdir_mep)"
eelf32metag.c: $(srcdir)/emulparams/elf32metag.sh \
$(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/metagelf.em \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32metag "$(tdir_metag)"
eelf32microblazeel.c: $(srcdir)/emulparams/elf32microblazeel.sh \
$(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elfmicroblaze.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32microblazeel "$(tdir_microblazeel)"

View File

@ -1,5 +1,7 @@
-*- text -*-
* Add support for the Imagination Technologies Meta processor.
Changes in 2.23:
* Enable compressed debug section feature for x86/x86_64 pe-coff.

View File

@ -415,6 +415,7 @@ mcore-*-pe) targ_emul=mcorepe ;
mcore-*-elf) targ_emul=elf32mcore
;;
mep-*-elf) targ_emul=elf32mep ;;
metag-*-*) targ_emul=elf32metag ;;
microblazeel*-linux*) targ_emul="elf32mbel_linux"
targ_extra_emuls="elf32mb_linux"
;;

View File

@ -0,0 +1,30 @@
MACHINE=
SCRIPT_NAME=elf
TEMPLATE_NAME=elf32
GENERATE_SHLIB_SCRIPT=yes
GENERATE_PIE_SCRIPT=yes
OUTPUT_FORMAT="elf32-metag"
TEXT_START_ADDR=0x10005000
ARCH=metag
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
ENTRY=__start
NOP=0xa0fffffe
EXTRA_EM_FILE=metagelf
USER_LABEL_PREFIX=_
OTHER_SECTIONS="
.core_text 0x80000000 :
{
*(.core_text)
}
.core_data 0x82000000 :
{
*(.core_data)
*(.core_rodata)
}
.internal_memory 0xe0200000 :
{
*(.internal_text)
*(.internal_data)
*(.internal_rodata)
}
"

337
ld/emultempl/metagelf.em Normal file
View File

@ -0,0 +1,337 @@
# This shell script emits a C file. -*- C -*-
# Copyright 2013 Free Software Foundation, Inc.
#
# This file is part of 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 sourced from elf32.em, and defines extra metagelf
# specific routines. Taken from hppaelf.em.
#
fragment <<EOF
#include "ldctor.h"
#include "elf32-metag.h"
/* Fake input file for stubs. */
static lang_input_statement_type *stub_file;
/* Whether we need to call metag_layout_sections_again. */
static int need_laying_out = 0;
/* Maximum size of a group of input sections that can be handled by
one stub section. A value of +/-1 indicates the bfd back-end
should use a suitable default size. */
static bfd_signed_vma group_size = 1;
/* This is called before the input files are opened. We create a new
fake input file to hold the stub sections. */
static void
metagelf_create_output_section_statements (void)
{
extern const bfd_target bfd_elf32_metag_vec;
if (link_info.output_bfd->xvec != &bfd_elf32_metag_vec)
return;
stub_file = lang_add_input_file ("linker stubs",
lang_input_file_is_fake_enum,
NULL);
stub_file->the_bfd = bfd_create ("linker stubs", link_info.output_bfd);
if (stub_file->the_bfd == NULL
|| ! bfd_set_arch_mach (stub_file->the_bfd,
bfd_get_arch (link_info.output_bfd),
bfd_get_mach (link_info.output_bfd)))
{
einfo ("%X%P: can not create BFD %E\n");
return;
}
stub_file->the_bfd->flags |= BFD_LINKER_CREATED;
ldlang_add_file (stub_file);
}
struct hook_stub_info
{
lang_statement_list_type add;
asection *input_section;
};
/* Traverse the linker tree to find the spot where the stub goes. */
static bfd_boolean
hook_in_stub (struct hook_stub_info *info, lang_statement_union_type **lp)
{
lang_statement_union_type *l;
bfd_boolean ret;
for (; (l = *lp) != NULL; lp = &l->header.next)
{
switch (l->header.type)
{
case lang_constructors_statement_enum:
ret = hook_in_stub (info, &constructor_list.head);
if (ret)
return ret;
break;
case lang_output_section_statement_enum:
ret = hook_in_stub (info,
&l->output_section_statement.children.head);
if (ret)
return ret;
break;
case lang_wild_statement_enum:
ret = hook_in_stub (info, &l->wild_statement.children.head);
if (ret)
return ret;
break;
case lang_group_statement_enum:
ret = hook_in_stub (info, &l->group_statement.children.head);
if (ret)
return ret;
break;
case lang_input_section_enum:
if (l->input_section.section == info->input_section)
{
/* We've found our section. Insert the stub immediately
before its associated input section. */
*lp = info->add.head;
*(info->add.tail) = l;
return TRUE;
}
break;
case lang_data_statement_enum:
case lang_reloc_statement_enum:
case lang_object_symbols_statement_enum:
case lang_output_statement_enum:
case lang_target_statement_enum:
case lang_input_statement_enum:
case lang_assignment_statement_enum:
case lang_padding_statement_enum:
case lang_address_statement_enum:
case lang_fill_statement_enum:
break;
default:
FAIL ();
break;
}
}
return FALSE;
}
/* Call-back for elf_metag_size_stubs. */
/* Create a new stub section, and arrange for it to be linked
immediately before INPUT_SECTION. */
static asection *
metagelf_add_stub_section (const char *stub_sec_name, asection *input_section)
{
asection *stub_sec;
flagword flags;
asection *output_section;
const char *secname;
lang_output_section_statement_type *os;
struct hook_stub_info info;
flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_CODE
| SEC_HAS_CONTENTS | SEC_RELOC | SEC_IN_MEMORY | SEC_KEEP);
stub_sec = bfd_make_section_anyway_with_flags (stub_file->the_bfd,
stub_sec_name, flags);
if (stub_sec == NULL)
goto err_ret;
output_section = input_section->output_section;
secname = bfd_get_section_name (output_section->owner, output_section);
os = lang_output_section_find (secname);
info.input_section = input_section;
lang_list_init (&info.add);
lang_add_section (&info.add, stub_sec, NULL, os);
if (info.add.head == NULL)
goto err_ret;
if (hook_in_stub (&info, &os->children.head))
return stub_sec;
err_ret:
einfo ("%X%P: can not make stub section: %E\n");
return NULL;
}
/* Another call-back for elf_metag_size_stubs. */
static void
metagelf_layout_sections_again (void)
{
/* If we have changed sizes of the stub sections, then we need
to recalculate all the section offsets. This may mean we need to
add even more stubs. */
gld${EMULATION_NAME}_map_segments (TRUE);
need_laying_out = -1;
}
static void
build_section_lists (lang_statement_union_type *statement)
{
if (statement->header.type == lang_input_section_enum)
{
asection *i = statement->input_section.section;
if (!((lang_input_statement_type *) i->owner->usrdata)->flags.just_syms
&& (i->flags & SEC_EXCLUDE) == 0
&& i->output_section != NULL
&& i->output_section->owner == link_info.output_bfd)
{
elf_metag_next_input_section (&link_info, i);
}
}
}
/* For Meta we use this opportunity to build linker stubs. */
static void
gld${EMULATION_NAME}_after_allocation (void)
{
/* bfd_elf_discard_info just plays with data and debugging sections,
ie. doesn't affect code size, so we can delay resizing the
sections. It's likely we'll resize everything in the process of
adding stubs. */
if (bfd_elf_discard_info (link_info.output_bfd, &link_info))
need_laying_out = 1;
/* If generating a relocatable output file, then we don't
have to examine the relocs. */
if (stub_file != NULL && !link_info.relocatable)
{
int ret = elf_metag_setup_section_lists (link_info.output_bfd,
&link_info);
if (ret != 0)
{
if (ret < 0)
{
einfo ("%X%P: can not size stub section: %E\n");
return;
}
lang_for_each_statement (build_section_lists);
/* Call into the BFD backend to do the real work. */
if (! elf_metag_size_stubs (link_info.output_bfd,
stub_file->the_bfd,
&link_info,
group_size,
&metagelf_add_stub_section,
&metagelf_layout_sections_again))
{
einfo ("%X%P: can not size stub section: %E\n");
return;
}
}
}
if (need_laying_out != -1)
gld${EMULATION_NAME}_map_segments (need_laying_out);
if (! link_info.relocatable)
{
/* Now build the linker stubs. */
if (stub_file != NULL && stub_file->the_bfd->sections != NULL)
{
if (! elf_metag_build_stubs (&link_info))
einfo ("%X%P: can not build stubs: %E\n");
}
}
}
/* Avoid processing the fake stub_file in vercheck, stat_needed and
check_needed routines. */
static void (*real_func) (lang_input_statement_type *);
static void metag_for_each_input_file_wrapper (lang_input_statement_type *l)
{
if (l != stub_file)
(*real_func) (l);
}
static void
metag_lang_for_each_input_file (void (*func) (lang_input_statement_type *))
{
real_func = func;
lang_for_each_input_file (&metag_for_each_input_file_wrapper);
}
#define lang_for_each_input_file metag_lang_for_each_input_file
EOF
# Define some shell vars to insert bits of code into the standard elf
# parse_args and list_options functions.
#
PARSE_AND_LIST_PROLOGUE='
#define OPTION_STUBGROUP_SIZE 301
'
PARSE_AND_LIST_LONGOPTS='
{ "stub-group-size", required_argument, NULL, OPTION_STUBGROUP_SIZE },
'
PARSE_AND_LIST_OPTIONS='
fprintf (file, _("\
--stub-group-size=N Maximum size of a group of input sections that\n\
can be handled by one stub section. A negative\n\
value locates all stubs before their branches\n\
(with a group size of -N), while a positive\n\
value allows two groups of input sections, one\n\
before, and one after each stub section.\n\
Values of +/-1 indicate the linker should\n\
choose suitable defaults.\n"
));
'
PARSE_AND_LIST_ARGS_CASES='
case OPTION_STUBGROUP_SIZE:
{
const char *end;
group_size = bfd_scan_vma (optarg, &end, 0);
if (*end)
einfo (_("%P%F: invalid number `%s'\''\n"), optarg);
}
break;
'
# Put these extra metagelf routines in ld_${EMULATION_NAME}_emulation
#
LDEMUL_AFTER_ALLOCATION=gld${EMULATION_NAME}_after_allocation
LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS=metagelf_create_output_section_statements

View File

@ -1,3 +1,26 @@
2013-01-10 Will Newton <will.newton@imgtec.com>
* ld-elf/merge.d: Mark Meta as xfail.
* ld-gc/start.d: Skip this test on Meta.
* ld-gc/personality.d: Skip this test on Meta.
* ld-metag/external.s: New file.
* ld-metag/metag.exp: New file.
* ld-metag/pcrel.d: New file.
* ld-metag/pcrel.s: New file.
* ld-metag/shared.d: New file.
* ld-metag/shared.r: New file.
* ld-metag/shared.s: New file.
* ld-metag/stub.d: New file.
* ld-metag/stub.s: New file.
* ld-metag/stub_pic_app.d: New file.
* ld-metag/stub_pic_app.r: New file.
* ld-metag/stub_pic_app.s: New file.
* ld-metag/stub_pic_shared.d: New file.
* ld-metag/stub_pic_shared.s: New file.
* ld-metag/stub_shared.d: New file.
* ld-metag/stub_shared.r: New file.
* ld-metag/stub_shared.s: New file.
2013-01-08 Thomas Schwinge <thomas@codesourcery.com>
* ld-i386/export-class.exp: Restore (and reword) comment about

View File

@ -6,7 +6,7 @@
#xfail: "i370-*-*" "i860-*-*" "i960-*-*" "ip2k-*-*" "iq2000-*-*" "lm32-*-*"
#xfail: "mcore-*-*" "mn102*-*-*" "mips*-*-*" "ms1-*-*" "msp430-*-*" "mep-*-*"
#xfail: "or32-*-*" "pj-*-*" "sparc*-*-*" "tic6x-*-*" "vax-*-*" "xstormy16-*-*"
#xfail: "xtensa*-*-*"
#xfail: "xtensa*-*-*" "metag-*-*"
.*: file format .*elf.*

View File

@ -1,7 +1,7 @@
#name: --gc-sections with __gxx_personality
#ld: --gc-sections -e main -L tmpdir -lpersonality
#nm: -n
#xfail: bfin-*-* cris*-*-* frv-*-* mn10300-*-* vax-*-* xtensa-*-*
#xfail: bfin-*-* cris*-*-* frv-*-* mn10300-*-* vax-*-* xtensa-*-* metag-*-*
# above targets don't support cfi
#failif

View File

@ -2,7 +2,7 @@
#ld: --gc-sections -e _start
#nm: -n
#target: *-*-linux* *-*-gnu*
#notarget: *-*-*aout *-*-*oldld frv-*-linux*
#notarget: *-*-*aout *-*-*oldld frv-*-linux* metag-*-linux*
#...
[0-9a-f]+ D +__start__foo

View File

@ -1,3 +1,12 @@
2013-01-10 Will Newton <will.newton@imgtec.com>
* Makefile.am: Add Meta.
* configure.in: Add Meta.
* disassemble.c: Add Meta support.
* metag-dis.c: New file.
* Makefile.in: Regenerate.
* configure: Regenerate.
2013-01-07 Kaushik Phatak <kaushik.phatak@kpitcummins.com>
* cr16-dis.c (make_instruction): Rename to cr16_make_instruction.

View File

@ -189,6 +189,7 @@ TARGET_LIBOPCODES_CFILES = \
mep-dis.c \
mep-ibld.c \
mep-opc.c \
metag-dis.c \
microblaze-dis.c \
micromips-opc.c \
mips-dis.c \

View File

@ -461,6 +461,7 @@ TARGET_LIBOPCODES_CFILES = \
mep-dis.c \
mep-ibld.c \
mep-opc.c \
metag-dis.c \
microblaze-dis.c \
micromips-opc.c \
mips-dis.c \
@ -857,6 +858,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mep-dis.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mep-ibld.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mep-opc.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/metag-dis.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/microblaze-dis.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/micromips-opc.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mips-dis.Plo@am__quote@

1
opcodes/configure vendored
View File

@ -12532,6 +12532,7 @@ if test x${all_targets} = xfalse ; then
bfd_m88k_arch) ta="$ta m88k-dis.lo" ;;
bfd_mcore_arch) ta="$ta mcore-dis.lo" ;;
bfd_mep_arch) ta="$ta mep-asm.lo mep-desc.lo mep-dis.lo mep-ibld.lo mep-opc.lo" using_cgen=yes ;;
bfd_metag_arch) ta="$ta metag-dis.lo" ;;
bfd_microblaze_arch) ta="$ta microblaze-dis.lo" ;;
bfd_mips_arch) ta="$ta mips-dis.lo mips-opc.lo mips16-opc.lo micromips-opc.lo" ;;
bfd_mmix_arch) ta="$ta mmix-dis.lo mmix-opc.lo" ;;

View File

@ -285,6 +285,7 @@ if test x${all_targets} = xfalse ; then
bfd_m88k_arch) ta="$ta m88k-dis.lo" ;;
bfd_mcore_arch) ta="$ta mcore-dis.lo" ;;
bfd_mep_arch) ta="$ta mep-asm.lo mep-desc.lo mep-dis.lo mep-ibld.lo mep-opc.lo" using_cgen=yes ;;
bfd_metag_arch) ta="$ta metag-dis.lo" ;;
bfd_microblaze_arch) ta="$ta microblaze-dis.lo" ;;
bfd_mips_arch) ta="$ta mips-dis.lo mips-opc.lo mips16-opc.lo micromips-opc.lo" ;;
bfd_mmix_arch) ta="$ta mmix-dis.lo mmix-opc.lo" ;;

View File

@ -58,6 +58,7 @@
#define ARCH_m88k
#define ARCH_mcore
#define ARCH_mep
#define ARCH_metag
#define ARCH_microblaze
#define ARCH_mips
#define ARCH_mmix
@ -309,6 +310,11 @@ disassembler (abfd)
disassemble = print_insn_mep;
break;
#endif
#ifdef ARCH_metag
case bfd_arch_metag:
disassemble = print_insn_metag;
break;
#endif
#ifdef ARCH_mips
case bfd_arch_mips:
if (bfd_big_endian (abfd))
@ -581,6 +587,11 @@ disassemble_init_for_target (struct disassemble_info * info)
info->skip_zeroes_at_end = 0;
break;
#endif
#ifdef ARCH_metag
case bfd_arch_metag:
info->disassembler_needs_relocs = TRUE;
break;
#endif
#ifdef ARCH_m32c
case bfd_arch_m32c:
/* This processor in fact is little endian. The value set here

3384
opcodes/metag-dis.c Normal file

File diff suppressed because it is too large Load Diff