Add Nios II arch flags and compatibility tests
2015-07-01 Sandra Loosemore <sandra@codesourcery.com> Cesar Philippidis <cesar@codesourcery.com> bfd/ * archures.c (bfd_mach_nios2r1, bfd_mach_nios2r2): New. * bfd-in2.h: Regenerated. * cpu-nios2.c (nios2_compatible): New. (N): Use nios2_compatible instead of bfd_default_compatible. (NIOS2R1_NEXT, NIOS2R2_NEXT): Define. (arch_info_struct): New. (bfd_nios2_arch): Chain to NIOS2R1_NEXT. * elf32-nios2.c (is_nios2_elf): New. (nios2_elf32_merge_private_bfd_data): New. (nios2_elf32_object_p): New. (bfd_elf32_bfd_merge_private_bfd_data): Define. (elf_backend_object_p): Define. gas/ * config/tc-nios2.c: Adjust includes. (OPTION_MARCH): Define. (md_longopts): Add -march option. (nios2_architecture): New. (nios2_use_arch): New. (md_parse_option): Handle OPTION_MARCH. (md_show_usage): Document -march. (md_begin): Set arch in BFD. (nios2_elf_final_processing): New. * config/tc-nios2.h (elf_tc_final_processing): Define. (nios2_elf_final_processing): New. * doc/c-nios2.texi (-march): Add documentation. include/elf/ * nios2.h (EF_NIOS2_ARCH_R1, EF_NIOS2_ARCH_R2): Define. ld/testsuite/ * ld-nios2/mixed1a.d: New. * ld-nios2/mixed1a.s: New. * ld-nios2/mixed1b.d: New. * ld-nios2/mixed1b.s: New. * ld-nios2/nios2.exp: Build the new compatibility tests.
This commit is contained in:
parent
dfc87947b5
commit
965b1d8083
@ -1,3 +1,19 @@
|
|||||||
|
2015-07-01 Sandra Loosemore <sandra@codesourcery.com>
|
||||||
|
Cesar Philippidis <cesar@codesourcery.com>
|
||||||
|
|
||||||
|
* archures.c (bfd_mach_nios2r1, bfd_mach_nios2r2): New.
|
||||||
|
* bfd-in2.h: Regenerated.
|
||||||
|
* cpu-nios2.c (nios2_compatible): New.
|
||||||
|
(N): Use nios2_compatible instead of bfd_default_compatible.
|
||||||
|
(NIOS2R1_NEXT, NIOS2R2_NEXT): Define.
|
||||||
|
(arch_info_struct): New.
|
||||||
|
(bfd_nios2_arch): Chain to NIOS2R1_NEXT.
|
||||||
|
* elf32-nios2.c (is_nios2_elf): New.
|
||||||
|
(nios2_elf32_merge_private_bfd_data): New.
|
||||||
|
(nios2_elf32_object_p): New.
|
||||||
|
(bfd_elf32_bfd_merge_private_bfd_data): Define.
|
||||||
|
(elf_backend_object_p): Define.
|
||||||
|
|
||||||
2015-07-01 H.J. Lu <hongjiu.lu@intel.com>
|
2015-07-01 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
* elf64-x86-64.c (elf_x86_64_convert_mov_to_lea): Refactor.
|
* elf64-x86-64.c (elf_x86_64_convert_mov_to_lea): Refactor.
|
||||||
|
@ -501,8 +501,10 @@ DESCRIPTION
|
|||||||
. bfd_arch_aarch64, {* AArch64 *}
|
. bfd_arch_aarch64, {* AArch64 *}
|
||||||
.#define bfd_mach_aarch64 0
|
.#define bfd_mach_aarch64 0
|
||||||
.#define bfd_mach_aarch64_ilp32 32
|
.#define bfd_mach_aarch64_ilp32 32
|
||||||
. bfd_arch_nios2,
|
. bfd_arch_nios2, {* Nios II *}
|
||||||
.#define bfd_mach_nios2 0
|
.#define bfd_mach_nios2 0
|
||||||
|
.#define bfd_mach_nios2r1 1
|
||||||
|
.#define bfd_mach_nios2r2 2
|
||||||
. bfd_arch_visium, {* Visium *}
|
. bfd_arch_visium, {* Visium *}
|
||||||
.#define bfd_mach_visium 1
|
.#define bfd_mach_visium 1
|
||||||
. bfd_arch_last
|
. bfd_arch_last
|
||||||
|
@ -2294,8 +2294,10 @@ enum bfd_architecture
|
|||||||
bfd_arch_aarch64, /* AArch64 */
|
bfd_arch_aarch64, /* AArch64 */
|
||||||
#define bfd_mach_aarch64 0
|
#define bfd_mach_aarch64 0
|
||||||
#define bfd_mach_aarch64_ilp32 32
|
#define bfd_mach_aarch64_ilp32 32
|
||||||
bfd_arch_nios2,
|
bfd_arch_nios2, /* Nios II */
|
||||||
#define bfd_mach_nios2 0
|
#define bfd_mach_nios2 0
|
||||||
|
#define bfd_mach_nios2r1 1
|
||||||
|
#define bfd_mach_nios2r2 2
|
||||||
bfd_arch_visium, /* Visium */
|
bfd_arch_visium, /* Visium */
|
||||||
#define bfd_mach_visium 1
|
#define bfd_mach_visium 1
|
||||||
bfd_arch_last
|
bfd_arch_last
|
||||||
|
@ -24,6 +24,26 @@
|
|||||||
#include "bfd.h"
|
#include "bfd.h"
|
||||||
#include "libbfd.h"
|
#include "libbfd.h"
|
||||||
|
|
||||||
|
static const bfd_arch_info_type *
|
||||||
|
nios2_compatible (const bfd_arch_info_type *a,
|
||||||
|
const bfd_arch_info_type *b)
|
||||||
|
{
|
||||||
|
if (a->arch != b->arch)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
if (a->bits_per_word != b->bits_per_word)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
if (a->mach == bfd_mach_nios2)
|
||||||
|
return a;
|
||||||
|
else if (b->mach == bfd_mach_nios2)
|
||||||
|
return b;
|
||||||
|
else if (a->mach != b->mach)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
|
||||||
#define N(BITS_WORD, BITS_ADDR, NUMBER, PRINT, DEFAULT, NEXT) \
|
#define N(BITS_WORD, BITS_ADDR, NUMBER, PRINT, DEFAULT, NEXT) \
|
||||||
{ \
|
{ \
|
||||||
BITS_WORD, /* bits in a word */ \
|
BITS_WORD, /* bits in a word */ \
|
||||||
@ -35,10 +55,20 @@
|
|||||||
PRINT, \
|
PRINT, \
|
||||||
3, \
|
3, \
|
||||||
DEFAULT, \
|
DEFAULT, \
|
||||||
bfd_default_compatible, \
|
nios2_compatible, \
|
||||||
bfd_default_scan, \
|
bfd_default_scan, \
|
||||||
bfd_arch_default_fill, \
|
bfd_arch_default_fill, \
|
||||||
NEXT \
|
NEXT \
|
||||||
}
|
}
|
||||||
|
|
||||||
const bfd_arch_info_type bfd_nios2_arch = N (32, 32, 0, "nios2", TRUE, NULL);
|
#define NIOS2R1_NEXT &arch_info_struct[0]
|
||||||
|
#define NIOS2R2_NEXT &arch_info_struct[1]
|
||||||
|
|
||||||
|
static const bfd_arch_info_type arch_info_struct[] =
|
||||||
|
{
|
||||||
|
N (32, 32, bfd_mach_nios2r1, "nios2:r1", FALSE, NIOS2R2_NEXT),
|
||||||
|
N (32, 32, bfd_mach_nios2r2, "nios2:r2", FALSE, NULL),
|
||||||
|
};
|
||||||
|
|
||||||
|
const bfd_arch_info_type bfd_nios2_arch =
|
||||||
|
N (32, 32, 0, "nios2", TRUE, NIOS2R1_NEXT);
|
||||||
|
@ -2038,6 +2038,72 @@ nios2_elf32_build_stubs (struct bfd_link_info *info)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#define is_nios2_elf(bfd) \
|
||||||
|
(bfd_get_flavour (bfd) == bfd_target_elf_flavour \
|
||||||
|
&& elf_object_id (bfd) == NIOS2_ELF_DATA)
|
||||||
|
|
||||||
|
/* Merge backend specific data from an object file to the output
|
||||||
|
object file when linking. */
|
||||||
|
|
||||||
|
static bfd_boolean
|
||||||
|
nios2_elf32_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
|
||||||
|
{
|
||||||
|
flagword old_flags;
|
||||||
|
flagword new_flags;
|
||||||
|
|
||||||
|
if (!is_nios2_elf (ibfd) || !is_nios2_elf (obfd))
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
/* Check if we have the same endianness. */
|
||||||
|
if (! _bfd_generic_verify_endian_match (ibfd, obfd))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
new_flags = elf_elfheader (ibfd)->e_flags;
|
||||||
|
old_flags = elf_elfheader (obfd)->e_flags;
|
||||||
|
if (!elf_flags_init (obfd))
|
||||||
|
{
|
||||||
|
/* First call, no flags set. */
|
||||||
|
elf_flags_init (obfd) = TRUE;
|
||||||
|
elf_elfheader (obfd)->e_flags = new_flags;
|
||||||
|
|
||||||
|
switch (new_flags)
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
case EF_NIOS2_ARCH_R1:
|
||||||
|
bfd_default_set_arch_mach (obfd, bfd_arch_nios2, bfd_mach_nios2r1);
|
||||||
|
break;
|
||||||
|
case EF_NIOS2_ARCH_R2:
|
||||||
|
if (bfd_big_endian (ibfd))
|
||||||
|
{
|
||||||
|
(*_bfd_error_handler)
|
||||||
|
(_("error: %B: Big-endian R2 is not supported."), ibfd);
|
||||||
|
bfd_set_error (bfd_error_bad_value);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
bfd_default_set_arch_mach (obfd, bfd_arch_nios2, bfd_mach_nios2r2);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Incompatible flags. */
|
||||||
|
else if (new_flags != old_flags)
|
||||||
|
{
|
||||||
|
/* So far, the only incompatible flags denote incompatible
|
||||||
|
architectures. */
|
||||||
|
(*_bfd_error_handler)
|
||||||
|
(_("error: %B: Conflicting CPU architectures %d/%d"),
|
||||||
|
ibfd, new_flags, old_flags);
|
||||||
|
bfd_set_error (bfd_error_bad_value);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Merge Tag_compatibility attributes and any common GNU ones. */
|
||||||
|
_bfd_elf_merge_object_attributes (ibfd, obfd);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Implement bfd_elf32_bfd_reloc_type_lookup:
|
/* Implement bfd_elf32_bfd_reloc_type_lookup:
|
||||||
Given a BFD reloc type, return a howto structure. */
|
Given a BFD reloc type, return a howto structure. */
|
||||||
static reloc_howto_type *
|
static reloc_howto_type *
|
||||||
@ -3707,6 +3773,29 @@ nios2_elf32_copy_indirect_symbol (struct bfd_link_info *info,
|
|||||||
_bfd_elf_link_hash_copy_indirect (info, dir, ind);
|
_bfd_elf_link_hash_copy_indirect (info, dir, ind);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Set the right machine number for a NIOS2 ELF file. */
|
||||||
|
|
||||||
|
static bfd_boolean
|
||||||
|
nios2_elf32_object_p (bfd *abfd)
|
||||||
|
{
|
||||||
|
unsigned long mach;
|
||||||
|
|
||||||
|
mach = elf_elfheader (abfd)->e_flags;
|
||||||
|
|
||||||
|
switch (mach)
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
case EF_NIOS2_ARCH_R1:
|
||||||
|
bfd_default_set_arch_mach (abfd, bfd_arch_nios2, bfd_mach_nios2r1);
|
||||||
|
break;
|
||||||
|
case EF_NIOS2_ARCH_R2:
|
||||||
|
bfd_default_set_arch_mach (abfd, bfd_arch_nios2, bfd_mach_nios2r2);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
/* Implement elf_backend_check_relocs:
|
/* Implement elf_backend_check_relocs:
|
||||||
Look through the relocs for a section during the first phase. */
|
Look through the relocs for a section during the first phase. */
|
||||||
static bfd_boolean
|
static bfd_boolean
|
||||||
@ -5256,6 +5345,9 @@ const struct bfd_elf_special_section elf32_nios2_special_sections[] =
|
|||||||
#define bfd_elf32_bfd_link_hash_table_create \
|
#define bfd_elf32_bfd_link_hash_table_create \
|
||||||
nios2_elf32_link_hash_table_create
|
nios2_elf32_link_hash_table_create
|
||||||
|
|
||||||
|
#define bfd_elf32_bfd_merge_private_bfd_data \
|
||||||
|
nios2_elf32_merge_private_bfd_data
|
||||||
|
|
||||||
/* Relocation table lookup macros. */
|
/* Relocation table lookup macros. */
|
||||||
|
|
||||||
#define bfd_elf32_bfd_reloc_type_lookup nios2_elf32_bfd_reloc_type_lookup
|
#define bfd_elf32_bfd_reloc_type_lookup nios2_elf32_bfd_reloc_type_lookup
|
||||||
@ -5292,6 +5384,7 @@ const struct bfd_elf_special_section elf32_nios2_special_sections[] =
|
|||||||
#define elf_backend_size_dynamic_sections nios2_elf32_size_dynamic_sections
|
#define elf_backend_size_dynamic_sections nios2_elf32_size_dynamic_sections
|
||||||
#define elf_backend_add_symbol_hook nios2_elf_add_symbol_hook
|
#define elf_backend_add_symbol_hook nios2_elf_add_symbol_hook
|
||||||
#define elf_backend_copy_indirect_symbol nios2_elf32_copy_indirect_symbol
|
#define elf_backend_copy_indirect_symbol nios2_elf32_copy_indirect_symbol
|
||||||
|
#define elf_backend_object_p nios2_elf32_object_p
|
||||||
|
|
||||||
#define elf_backend_grok_prstatus nios2_grok_prstatus
|
#define elf_backend_grok_prstatus nios2_grok_prstatus
|
||||||
#define elf_backend_grok_psinfo nios2_grok_psinfo
|
#define elf_backend_grok_psinfo nios2_grok_psinfo
|
||||||
|
@ -1,3 +1,19 @@
|
|||||||
|
2015-07-01 Sandra Loosemore <sandra@codesourcery.com>
|
||||||
|
Cesar Philippidis <cesar@codesourcery.com>
|
||||||
|
|
||||||
|
* config/tc-nios2.c: Adjust includes.
|
||||||
|
(OPTION_MARCH): Define.
|
||||||
|
(md_longopts): Add -march option.
|
||||||
|
(nios2_architecture): New.
|
||||||
|
(nios2_use_arch): New.
|
||||||
|
(md_parse_option): Handle OPTION_MARCH.
|
||||||
|
(md_show_usage): Document -march.
|
||||||
|
(md_begin): Set arch in BFD.
|
||||||
|
(nios2_elf_final_processing): New.
|
||||||
|
* config/tc-nios2.h (elf_tc_final_processing): Define.
|
||||||
|
(nios2_elf_final_processing): New.
|
||||||
|
* doc/c-nios2.texi (-march): Add documentation.
|
||||||
|
|
||||||
2015-06-30 Amit Pawar <Amit.Pawar@amd.com>
|
2015-06-30 Amit Pawar <Amit.Pawar@amd.com>
|
||||||
|
|
||||||
* config/tc-i386.c (cpu_arch): Add .mwaitx.
|
* config/tc-i386.c (cpu_arch): Add .mwaitx.
|
||||||
|
@ -25,6 +25,7 @@
|
|||||||
#include "elf/nios2.h"
|
#include "elf/nios2.h"
|
||||||
#include "tc-nios2.h"
|
#include "tc-nios2.h"
|
||||||
#include "bfd.h"
|
#include "bfd.h"
|
||||||
|
#include "libbfd.h"
|
||||||
#include "dwarf2dbg.h"
|
#include "dwarf2dbg.h"
|
||||||
#include "subsegs.h"
|
#include "subsegs.h"
|
||||||
#include "safe-ctype.h"
|
#include "safe-ctype.h"
|
||||||
@ -80,7 +81,9 @@ struct option md_longopts[] = {
|
|||||||
#define OPTION_EB (OPTION_MD_BASE + 3)
|
#define OPTION_EB (OPTION_MD_BASE + 3)
|
||||||
{"EB", no_argument, NULL, OPTION_EB},
|
{"EB", no_argument, NULL, OPTION_EB},
|
||||||
#define OPTION_EL (OPTION_MD_BASE + 4)
|
#define OPTION_EL (OPTION_MD_BASE + 4)
|
||||||
{"EL", no_argument, NULL, OPTION_EL}
|
{"EL", no_argument, NULL, OPTION_EL},
|
||||||
|
#define OPTION_MARCH (OPTION_MD_BASE + 5)
|
||||||
|
{"march", required_argument, NULL, OPTION_MARCH}
|
||||||
};
|
};
|
||||||
|
|
||||||
size_t md_longopts_size = sizeof (md_longopts);
|
size_t md_longopts_size = sizeof (md_longopts);
|
||||||
@ -212,6 +215,9 @@ static symbolS *nios2_last_label;
|
|||||||
symbolS *GOT_symbol;
|
symbolS *GOT_symbol;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* The processor architecture value, EF_NIOS2_ARCH_R1 by default. */
|
||||||
|
static int nios2_architecture = EF_NIOS2_ARCH_R1;
|
||||||
|
|
||||||
|
|
||||||
/** Utility routines. */
|
/** Utility routines. */
|
||||||
/* Function md_chars_to_number takes the sequence of
|
/* Function md_chars_to_number takes the sequence of
|
||||||
@ -2209,6 +2215,34 @@ output_movia (nios2_insn_infoS *insn)
|
|||||||
|
|
||||||
/** External interfaces. */
|
/** External interfaces. */
|
||||||
|
|
||||||
|
/* Update the selected architecture based on ARCH, giving an error if
|
||||||
|
ARCH is an invalid value. */
|
||||||
|
|
||||||
|
static void
|
||||||
|
nios2_use_arch (const char *arch)
|
||||||
|
{
|
||||||
|
if (strcmp (arch, "nios2") == 0 || strcmp (arch, "r1") == 0)
|
||||||
|
{
|
||||||
|
nios2_architecture |= EF_NIOS2_ARCH_R1;
|
||||||
|
nios2_opcodes = (struct nios2_opcode *) nios2_r1_opcodes;
|
||||||
|
nios2_num_opcodes = nios2_num_r1_opcodes;
|
||||||
|
nop32 = nop_r1;
|
||||||
|
nop16 = NULL;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (strcmp (arch, "r2") == 0)
|
||||||
|
{
|
||||||
|
nios2_architecture |= EF_NIOS2_ARCH_R2;
|
||||||
|
nios2_opcodes = (struct nios2_opcode *) nios2_r2_opcodes;
|
||||||
|
nios2_num_opcodes = nios2_num_r2_opcodes;
|
||||||
|
nop32 = nop_r2;
|
||||||
|
nop16 = nop_r2_cdx;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
as_bad (_("unknown architecture '%s'"), arch);
|
||||||
|
}
|
||||||
|
|
||||||
/* The following functions are called by machine-independent parts of
|
/* The following functions are called by machine-independent parts of
|
||||||
the assembler. */
|
the assembler. */
|
||||||
int
|
int
|
||||||
@ -2235,6 +2269,9 @@ md_parse_option (int c, char *arg ATTRIBUTE_UNUSED)
|
|||||||
case OPTION_EL:
|
case OPTION_EL:
|
||||||
target_big_endian = 0;
|
target_big_endian = 0;
|
||||||
break;
|
break;
|
||||||
|
case OPTION_MARCH:
|
||||||
|
nios2_use_arch (arg);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
break;
|
break;
|
||||||
@ -2262,9 +2299,11 @@ md_show_usage (FILE *stream)
|
|||||||
"branches with jmp sequences (default)\n"
|
"branches with jmp sequences (default)\n"
|
||||||
" -no-relax do not replace any branches or calls\n"
|
" -no-relax do not replace any branches or calls\n"
|
||||||
" -EB force big-endian byte ordering\n"
|
" -EB force big-endian byte ordering\n"
|
||||||
" -EL force little-endian byte ordering\n");
|
" -EL force little-endian byte ordering\n"
|
||||||
|
" -march=ARCH enable instructions from architecture ARCH\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* This function is called once, at assembler startup time.
|
/* This function is called once, at assembler startup time.
|
||||||
It should set up all the tables, etc. that the MD part of the
|
It should set up all the tables, etc. that the MD part of the
|
||||||
assembler will need. */
|
assembler will need. */
|
||||||
@ -2274,6 +2313,19 @@ md_begin (void)
|
|||||||
int i;
|
int i;
|
||||||
const char *inserted;
|
const char *inserted;
|
||||||
|
|
||||||
|
switch (nios2_architecture)
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
case EF_NIOS2_ARCH_R1:
|
||||||
|
bfd_default_set_arch_mach (stdoutput, bfd_arch_nios2, bfd_mach_nios2r1);
|
||||||
|
break;
|
||||||
|
case EF_NIOS2_ARCH_R2:
|
||||||
|
if (target_big_endian)
|
||||||
|
as_fatal (_("Big-endian R2 is not supported."));
|
||||||
|
bfd_default_set_arch_mach (stdoutput, bfd_arch_nios2, bfd_mach_nios2r2);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
/* Create and fill a hashtable for the Nios II opcodes, registers and
|
/* Create and fill a hashtable for the Nios II opcodes, registers and
|
||||||
arguments. */
|
arguments. */
|
||||||
nios2_opcode_hash = hash_new ();
|
nios2_opcode_hash = hash_new ();
|
||||||
@ -2747,3 +2799,13 @@ nios2_frame_initial_instructions (void)
|
|||||||
{
|
{
|
||||||
cfi_add_CFA_def_cfa (27, 0);
|
cfi_add_CFA_def_cfa (27, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef OBJ_ELF
|
||||||
|
/* Some special processing for a Nios II ELF file. */
|
||||||
|
|
||||||
|
void
|
||||||
|
nios2_elf_final_processing (void)
|
||||||
|
{
|
||||||
|
elf_elfheader (stdoutput)->e_flags = nios2_architecture;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
@ -118,4 +118,7 @@ extern int nios2_regname_to_dw2regnum (char *regname);
|
|||||||
#define tc_cfi_frame_initial_instructions nios2_frame_initial_instructions
|
#define tc_cfi_frame_initial_instructions nios2_frame_initial_instructions
|
||||||
extern void nios2_frame_initial_instructions (void);
|
extern void nios2_frame_initial_instructions (void);
|
||||||
|
|
||||||
|
#define elf_tc_final_processing nios2_elf_final_processing
|
||||||
|
extern void nios2_elf_final_processing (void);
|
||||||
|
|
||||||
#endif /* TC_NIOS2 */
|
#endif /* TC_NIOS2 */
|
||||||
|
@ -58,6 +58,16 @@ Generate big-endian output.
|
|||||||
@item -EL
|
@item -EL
|
||||||
Generate little-endian output. This is the default.
|
Generate little-endian output. This is the default.
|
||||||
|
|
||||||
|
@cindex @code{march} command line option, Nios II
|
||||||
|
@item -march=@var{architecture}
|
||||||
|
This option specifies the target architecture. The assembler issues
|
||||||
|
an error message if an attempt is made to assemble an instruction which
|
||||||
|
will not execute on the target architecture. The following architecture
|
||||||
|
names are recognized:
|
||||||
|
@code{r1},
|
||||||
|
@code{r2}.
|
||||||
|
The default is @code{r1}.
|
||||||
|
|
||||||
@end table
|
@end table
|
||||||
@c man end
|
@c man end
|
||||||
|
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
2015-07-01 Sandra Loosemore <sandra@codesourcery.com>
|
||||||
|
Cesar Philippidis <cesar@codesourcery.com>
|
||||||
|
|
||||||
|
* nios2.h (EF_NIOS2_ARCH_R1, EF_NIOS2_ARCH_R2): Define.
|
||||||
|
|
||||||
2015-05-29 Roland McGrath <mcgrathr@google.com>
|
2015-05-29 Roland McGrath <mcgrathr@google.com>
|
||||||
|
|
||||||
* common.h (GNU_ABI_TAG_SYLLABLE): New macro.
|
* common.h (GNU_ABI_TAG_SYLLABLE): New macro.
|
||||||
|
@ -93,4 +93,9 @@ END_RELOC_NUMBERS (R_NIOS2_maxext)
|
|||||||
/* Address of _gp. */
|
/* Address of _gp. */
|
||||||
#define DT_NIOS2_GP 0x70000002
|
#define DT_NIOS2_GP 0x70000002
|
||||||
|
|
||||||
|
/* Processor specific flags for the Elf header e_flags field. */
|
||||||
|
|
||||||
|
#define EF_NIOS2_ARCH_R1 0x00000000
|
||||||
|
#define EF_NIOS2_ARCH_R2 0x00000001
|
||||||
|
|
||||||
#endif /* _ELF_NIOS2_H */
|
#endif /* _ELF_NIOS2_H */
|
||||||
|
@ -1,3 +1,12 @@
|
|||||||
|
2015-07-01 Sandra Loosemore <sandra@codesourcery.com>
|
||||||
|
Cesar Philippidis <cesar@codesourcery.com>
|
||||||
|
|
||||||
|
* ld-nios2/mixed1a.d: New.
|
||||||
|
* ld-nios2/mixed1a.s: New.
|
||||||
|
* ld-nios2/mixed1b.d: New.
|
||||||
|
* ld-nios2/mixed1b.s: New.
|
||||||
|
* ld-nios2/nios2.exp: Build the new compatibility tests.
|
||||||
|
|
||||||
2015-06-27 H.J. Lu <hongjiu.lu@intel.com>
|
2015-06-27 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
* ld-xtensa/tlsbin.rd: Updated.
|
* ld-xtensa/tlsbin.rd: Updated.
|
||||||
|
9
ld/testsuite/ld-nios2/mixed1a.d
Normal file
9
ld/testsuite/ld-nios2/mixed1a.d
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#name: NIOS2 mixed1a
|
||||||
|
#source: mixed1a.s
|
||||||
|
#as: -march=r2
|
||||||
|
#readelf: -h
|
||||||
|
|
||||||
|
ELF Header:
|
||||||
|
#...
|
||||||
|
Flags: 0x1
|
||||||
|
#...
|
9
ld/testsuite/ld-nios2/mixed1a.s
Normal file
9
ld/testsuite/ld-nios2/mixed1a.s
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
# Test linking incompatible object file types.
|
||||||
|
|
||||||
|
.text
|
||||||
|
.global _start
|
||||||
|
_start:
|
||||||
|
movhi r2, %hiadj(foo)
|
||||||
|
addi r2, r2, %lo(foo)
|
||||||
|
ldw r2, 0(r2)
|
||||||
|
cmpeq r2, r2, zero
|
9
ld/testsuite/ld-nios2/mixed1b.d
Normal file
9
ld/testsuite/ld-nios2/mixed1b.d
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#name: NIOS2 mixed1b
|
||||||
|
#source: mixed1b.s
|
||||||
|
#as: -march=r1
|
||||||
|
#readelf: -h
|
||||||
|
|
||||||
|
ELF Header:
|
||||||
|
#...
|
||||||
|
Flags: 0x0
|
||||||
|
#...
|
3
ld/testsuite/ld-nios2/mixed1b.s
Normal file
3
ld/testsuite/ld-nios2/mixed1b.s
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# Test linking incompatible object file types.
|
||||||
|
|
||||||
|
.comm foo,4,4
|
@ -1,7 +1,31 @@
|
|||||||
if { ! [istarget nios2-*-*] } {
|
if { ! [istarget nios2-*-*] } {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach test [lsort [glob -nocomplain $srcdir/$subdir/*.d]] {
|
foreach test [lsort [glob -nocomplain $srcdir/$subdir/*.d]] {
|
||||||
run_dump_test [file rootname $test]
|
run_dump_test [file rootname $test]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
global link_output
|
||||||
|
global ld
|
||||||
|
|
||||||
|
set test_name "NIOS2 Mixed R1 and R2 objects"
|
||||||
|
set test mixed1
|
||||||
|
|
||||||
|
if ![ld_assemble $as "-march=r1 $srcdir/$subdir/${test}a.s" tmpdir/${test}a.o] {
|
||||||
|
unresolved "Build mixed1a.o"
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if ![ld_assemble $as "-march=r2 $srcdir/$subdir/${test}b.s" tmpdir/${test}b.o] {
|
||||||
|
unresolved "Build mixed1b.o"
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if { ![ld_simple_link $ld tmpdir/$test "tmpdir/${test}a.o tmpdir/${test}b.o"] } {
|
||||||
|
if [string match "*architecture * is incompatible*" $link_output] {
|
||||||
|
pass "$test_name"
|
||||||
|
} {
|
||||||
|
fail "$test_name"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user