mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-01-27 02:14:04 +08:00
include/elf/
* mips.h (ELF_ST_IS_MIPS16, ELF_ST_SET_MIPS16): New macros. bfd/ * elfxx-mips.c (mips_elf_check_mips16_stubs): Use ELF_ST_IS_MIPS16. (mips_elf_calculate_relocation): Likewise. (_bfd_mips_elf_add_symbol_hook): Likewise. (_bfd_mips_elf_finish_dynamic_symbol): Likewise. (_bfd_mips_vxworks_finish_dynamic_symbol): Likewise. opcodes/ * mips-dis.c (_print_insn_mips): Use ELF_ST_IS_MIPS16. gas/ * config/tc-mips.c (mips16_mark_labels): Use ELF_ST_SET_MIPS16. (mips_fix_adjustable): Likewise. (mips_frob_file_after_relocs): Likewise. gas/testsuite/ * gas/mips/mips16-vis-1.d, gas/mips/mips16-vis-1.s: New tests. * gas/mips/mips.exp: Run them.
This commit is contained in:
parent
e0a3ce09ed
commit
30c0909079
@ -1,3 +1,11 @@
|
||||
2008-07-10 Richard Sandiford <rdsandiford@googlemail.com>
|
||||
|
||||
* elfxx-mips.c (mips_elf_check_mips16_stubs): Use ELF_ST_IS_MIPS16.
|
||||
(mips_elf_calculate_relocation): Likewise.
|
||||
(_bfd_mips_elf_add_symbol_hook): Likewise.
|
||||
(_bfd_mips_elf_finish_dynamic_symbol): Likewise.
|
||||
(_bfd_mips_vxworks_finish_dynamic_symbol): Likewise.
|
||||
|
||||
2008-07-10 Andreas Schwab <schwab@suse.de>
|
||||
|
||||
* elfxx-mips.c (_bfd_mips_elf_section_from_shdr): Add missing
|
||||
|
@ -1172,7 +1172,7 @@ mips_elf_check_mips16_stubs (struct mips_elf_link_hash_entry *h,
|
||||
}
|
||||
|
||||
if (h->call_stub != NULL
|
||||
&& h->root.other == STO_MIPS16)
|
||||
&& ELF_ST_IS_MIPS16 (h->root.other))
|
||||
{
|
||||
/* We don't need the call_stub; this is a 16 bit function, so
|
||||
calls from other 16 bit functions are OK. Clobber the size
|
||||
@ -1184,7 +1184,7 @@ mips_elf_check_mips16_stubs (struct mips_elf_link_hash_entry *h,
|
||||
}
|
||||
|
||||
if (h->call_fp_stub != NULL
|
||||
&& h->root.other == STO_MIPS16)
|
||||
&& ELF_ST_IS_MIPS16 (h->root.other))
|
||||
{
|
||||
/* We don't need the call_stub; this is a 16 bit function, so
|
||||
calls from other 16 bit functions are OK. Clobber the size
|
||||
@ -4182,7 +4182,7 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
|
||||
}
|
||||
|
||||
/* MIPS16 text labels should be treated as odd. */
|
||||
if (sym->st_other == STO_MIPS16)
|
||||
if (ELF_ST_IS_MIPS16 (sym->st_other))
|
||||
++symbol;
|
||||
|
||||
/* Record the name of this symbol, for our caller. */
|
||||
@ -4192,7 +4192,7 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
|
||||
if (*namep == '\0')
|
||||
*namep = bfd_section_name (input_bfd, sec);
|
||||
|
||||
target_is_16_bit_code_p = (sym->st_other == STO_MIPS16);
|
||||
target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (sym->st_other);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -4288,7 +4288,7 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
|
||||
symbol = 0;
|
||||
}
|
||||
|
||||
target_is_16_bit_code_p = (h->root.other == STO_MIPS16);
|
||||
target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (h->root.other);
|
||||
}
|
||||
|
||||
/* If this is a 32- or 64-bit call to a 16-bit function with a stub, we
|
||||
@ -6121,7 +6121,7 @@ _bfd_mips_elf_add_symbol_hook (bfd *abfd, struct bfd_link_info *info,
|
||||
/* If this is a mips16 text symbol, add 1 to the value to make it
|
||||
odd. This will cause something like .word SYM to come up with
|
||||
the right value when it is loaded into the PC. */
|
||||
if (sym->st_other == STO_MIPS16)
|
||||
if (ELF_ST_IS_MIPS16 (sym->st_other))
|
||||
++*valp;
|
||||
|
||||
return TRUE;
|
||||
@ -6144,7 +6144,7 @@ _bfd_mips_elf_link_output_symbol_hook
|
||||
&& strcmp (input_sec->name, ".scommon") == 0)
|
||||
sym->st_shndx = SHN_MIPS_SCOMMON;
|
||||
|
||||
if (sym->st_other == STO_MIPS16)
|
||||
if (ELF_ST_IS_MIPS16 (sym->st_other))
|
||||
sym->st_value &= ~1;
|
||||
|
||||
return TRUE;
|
||||
@ -8721,7 +8721,7 @@ _bfd_mips_elf_finish_dynamic_symbol (bfd *output_bfd,
|
||||
}
|
||||
|
||||
/* If this is a mips16 symbol, force the value to be even. */
|
||||
if (sym->st_other == STO_MIPS16)
|
||||
if (ELF_ST_IS_MIPS16 (sym->st_other))
|
||||
sym->st_value &= ~1;
|
||||
|
||||
return TRUE;
|
||||
@ -8893,7 +8893,7 @@ _bfd_mips_vxworks_finish_dynamic_symbol (bfd *output_bfd,
|
||||
}
|
||||
|
||||
/* If this is a mips16 symbol, force the value to be even. */
|
||||
if (sym->st_other == STO_MIPS16)
|
||||
if (ELF_ST_IS_MIPS16 (sym->st_other))
|
||||
sym->st_value &= ~1;
|
||||
|
||||
return TRUE;
|
||||
|
@ -1,3 +1,9 @@
|
||||
2008-07-10 Richard Sandiford <rdsandiford@googlemail.com>
|
||||
|
||||
* config/tc-mips.c (mips16_mark_labels): Use ELF_ST_SET_MIPS16.
|
||||
(mips_fix_adjustable): Likewise.
|
||||
(mips_frob_file_after_relocs): Likewise.
|
||||
|
||||
2008-07-08 Nathan Sidwell <nathan@codesourcery.com>
|
||||
|
||||
* config/tc-m68k.c (m68k_set_cpu, m68k_set_arch): Don't complain
|
||||
|
@ -2321,7 +2321,7 @@ mips16_mark_labels (void)
|
||||
|
||||
#if defined(OBJ_ELF) || defined(OBJ_MAYBE_ELF)
|
||||
if (IS_ELF)
|
||||
S_SET_OTHER (label, STO_MIPS16);
|
||||
S_SET_OTHER (label, ELF_ST_SET_MIPS16 (S_GET_OTHER (label)));
|
||||
#endif
|
||||
if ((S_GET_VALUE (label) & 1) == 0
|
||||
/* Don't adjust the address if the label is global or weak, or
|
||||
@ -13976,7 +13976,7 @@ mips_fix_adjustable (fixS *fixp)
|
||||
that we have for MIPS16 symbols. */
|
||||
if (IS_ELF
|
||||
&& fixp->fx_subsy == NULL
|
||||
&& (S_GET_OTHER (fixp->fx_addsy) == STO_MIPS16
|
||||
&& (ELF_ST_IS_MIPS16 (S_GET_OTHER (fixp->fx_addsy))
|
||||
|| *symbol_get_tc (fixp->fx_addsy)))
|
||||
return 0;
|
||||
#endif
|
||||
@ -14453,7 +14453,7 @@ mips_frob_file_after_relocs (void)
|
||||
count = bfd_get_symcount (stdoutput);
|
||||
for (i = 0; i < count; i++, syms++)
|
||||
{
|
||||
if (elf_symbol (*syms)->internal_elf_sym.st_other == STO_MIPS16
|
||||
if (ELF_ST_IS_MIPS16 (elf_symbol (*syms)->internal_elf_sym.st_other)
|
||||
&& ((*syms)->value & 1) != 0)
|
||||
{
|
||||
(*syms)->value &= ~1;
|
||||
|
@ -1,3 +1,8 @@
|
||||
2008-07-10 Richard Sandiford <rdsandiford@googlemail.com>
|
||||
|
||||
* gas/mips/mips16-vis-1.d, gas/mips/mips16-vis-1.s: New tests.
|
||||
* gas/mips/mips.exp: Run them.
|
||||
|
||||
2008-07-09 Kai Tietz <kai.tietz@onevision.com>
|
||||
|
||||
* gas/i386/i386.exp (x86-64-pcrel): Disable for w64.
|
||||
|
@ -827,4 +827,6 @@ if { [istarget mips*-*-vxworks*] } {
|
||||
run_list_test_arches "mips-double-float-flag" \
|
||||
"-32 -msingle-float -mdouble-float" \
|
||||
[mips_arch_list_matching mips1]
|
||||
|
||||
run_dump_test "mips16-vis-1"
|
||||
}
|
||||
|
3
gas/testsuite/gas/mips/mips16-vis-1.d
Normal file
3
gas/testsuite/gas/mips/mips16-vis-1.d
Normal file
@ -0,0 +1,3 @@
|
||||
# readelf: --symbols
|
||||
#...
|
||||
.*: 0+0 * 2 * FUNC * GLOBAL * HIDDEN \[MIPS16\] * [0-9]+ foo
|
7
gas/testsuite/gas/mips/mips16-vis-1.s
Normal file
7
gas/testsuite/gas/mips/mips16-vis-1.s
Normal file
@ -0,0 +1,7 @@
|
||||
.set mips16
|
||||
.globl foo
|
||||
.hidden foo
|
||||
.ent foo
|
||||
foo:
|
||||
nop
|
||||
.end foo
|
@ -1,3 +1,7 @@
|
||||
2008-07-10 Richard Sandiford <rdsandiford@googlemail.com>
|
||||
|
||||
* mips.h (ELF_ST_IS_MIPS16, ELF_ST_SET_MIPS16): New macros.
|
||||
|
||||
2008-06-18 M R Swami Reddy <MR.Swami.Reddy@nsc.com>
|
||||
|
||||
* common.h (EM_CR16): Correct value.
|
||||
|
@ -725,6 +725,8 @@ extern void bfd_mips_elf32_swap_reginfo_out
|
||||
|
||||
/* This value is used for a mips16 .text symbol. */
|
||||
#define STO_MIPS16 0xf0
|
||||
#define ELF_ST_IS_MIPS16(OTHER) (((OTHER) & 0xf0) == STO_MIPS16)
|
||||
#define ELF_ST_SET_MIPS16(OTHER) (((OTHER) & ~0xf0) | STO_MIPS16)
|
||||
|
||||
/* This bit is used on Irix to indicate a symbol whose definition
|
||||
is optional - if, at final link time, it cannot be found, no
|
||||
|
@ -1,3 +1,7 @@
|
||||
2008-07-10 Richard Sandiford <rdsandiford@googlemail.com>
|
||||
|
||||
* mips-dis.c (_print_insn_mips): Use ELF_ST_IS_MIPS16.
|
||||
|
||||
2008-07-07 Adam Nemet <anemet@caviumnetworks.com>
|
||||
|
||||
* mips-opc.c (CP): New macro.
|
||||
|
@ -2068,8 +2068,8 @@ _print_insn_mips (bfd_vma memaddr,
|
||||
if (info->mach == bfd_mach_mips16
|
||||
|| (info->symbols != NULL
|
||||
&& bfd_asymbol_flavour (*info->symbols) == bfd_target_elf_flavour
|
||||
&& ((*(elf_symbol_type **) info->symbols)->internal_elf_sym.st_other
|
||||
== STO_MIPS16)))
|
||||
&& ELF_ST_IS_MIPS16 ((*(elf_symbol_type **) info->symbols)
|
||||
->internal_elf_sym.st_other)))
|
||||
return print_insn_mips16 (memaddr, info);
|
||||
#endif
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user