Use getters/setters to access ARM branch type
2016-05-10 Thomas Preud'homme <thomas.preudhomme@arm.com> bfd/ * elf32-arm.c (elf32_arm_size_stubs): Use new macros ARM_GET_SYM_BRANCH_TYPE and ARM_SET_SYM_BRANCH_TYPE to respectively get and set branch type of a symbol. (bfd_elf32_arm_process_before_allocation): Likewise. (elf32_arm_relocate_section): Likewise and fix identation along the way. (allocate_dynrelocs_for_symbol): Likewise. (elf32_arm_finish_dynamic_symbol): Likewise. (elf32_arm_swap_symbol_in): Likewise. (elf32_arm_swap_symbol_out): Likewise. gas/ * config/tc-arm.c (arm_adjust_symtab): Use ARM_SET_SYM_BRANCH_TYPE to set branch type of a symbol. gdb/ * arm-tdep.c (arm_elf_make_msymbol_special): Use ARM_GET_SYM_BRANCH_TYPE to get branch type of a symbol. include/ * arm.h (enum arm_st_branch_type): Add new ST_BRANCH_ENUM_SIZE enumerator. (NUM_ENUM_ARM_ST_BRANCH_TYPE_BITS): New macro. (ENUM_ARM_ST_BRANCH_TYPE_BITMASK): Likewise. (ARM_SYM_BRANCH_TYPE): Replace by ... (ARM_GET_SYM_BRANCH_TYPE): This and ... (ARM_SET_SYM_BRANCH_TYPE): This in two versions depending on whether BFD_ASSERT is defined or not. ld/ * emultempl/armelf.em (gld${EMULATION_NAME}_finish): Use ARM_GET_SYM_BRANCH_TYPE to get branch type of a symbol. opcodes/ * arm-dis.c (get_sym_code_type): Use ARM_GET_SYM_BRANCH_TYPE to get branch type of a symbol. (print_insn): Likewise.
This commit is contained in:
parent
6bde4c52fb
commit
39d911fc3c
|
@ -1,3 +1,16 @@
|
||||||
|
2016-05-10 Thomas Preud'homme <thomas.preudhomme@arm.com>
|
||||||
|
|
||||||
|
* elf32-arm.c (elf32_arm_size_stubs): Use new macros
|
||||||
|
ARM_GET_SYM_BRANCH_TYPE and ARM_SET_SYM_BRANCH_TYPE to respectively get
|
||||||
|
and set branch type of a symbol.
|
||||||
|
(bfd_elf32_arm_process_before_allocation): Likewise.
|
||||||
|
(elf32_arm_relocate_section): Likewise and fix identation along the
|
||||||
|
way.
|
||||||
|
(allocate_dynrelocs_for_symbol): Likewise.
|
||||||
|
(elf32_arm_finish_dynamic_symbol): Likewise.
|
||||||
|
(elf32_arm_swap_symbol_in): Likewise.
|
||||||
|
(elf32_arm_swap_symbol_out): Likewise.
|
||||||
|
|
||||||
2016-05-10 Thomas Preud'homme <thomas.preudhomme@arm.com>
|
2016-05-10 Thomas Preud'homme <thomas.preudhomme@arm.com>
|
||||||
|
|
||||||
* bfd-in.h (elf32_arm_size_stubs): Add an output section parameter.
|
* bfd-in.h (elf32_arm_size_stubs): Add an output section parameter.
|
||||||
|
|
|
@ -5465,7 +5465,8 @@ elf32_arm_size_stubs (bfd *output_bfd,
|
||||||
+ sym_sec->output_offset
|
+ sym_sec->output_offset
|
||||||
+ sym_sec->output_section->vma);
|
+ sym_sec->output_section->vma);
|
||||||
st_type = ELF_ST_TYPE (sym->st_info);
|
st_type = ELF_ST_TYPE (sym->st_info);
|
||||||
branch_type = ARM_SYM_BRANCH_TYPE (sym);
|
branch_type =
|
||||||
|
ARM_GET_SYM_BRANCH_TYPE (sym->st_target_internal);
|
||||||
sym_name
|
sym_name
|
||||||
= bfd_elf_string_from_elf_section (input_bfd,
|
= bfd_elf_string_from_elf_section (input_bfd,
|
||||||
symtab_hdr->sh_link,
|
symtab_hdr->sh_link,
|
||||||
|
@ -5540,7 +5541,8 @@ elf32_arm_size_stubs (bfd *output_bfd,
|
||||||
goto error_ret_free_internal;
|
goto error_ret_free_internal;
|
||||||
}
|
}
|
||||||
st_type = hash->root.type;
|
st_type = hash->root.type;
|
||||||
branch_type = hash->root.target_internal;
|
branch_type =
|
||||||
|
ARM_GET_SYM_BRANCH_TYPE (hash->root.target_internal);
|
||||||
sym_name = hash->root.root.root.string;
|
sym_name = hash->root.root.root.string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6629,7 +6631,8 @@ bfd_elf32_arm_process_before_allocation (bfd *abfd,
|
||||||
/* This one is a call from arm code. We need to look up
|
/* This one is a call from arm code. We need to look up
|
||||||
the target of the call. If it is a thumb target, we
|
the target of the call. If it is a thumb target, we
|
||||||
insert glue. */
|
insert glue. */
|
||||||
if (h->target_internal == ST_BRANCH_TO_THUMB)
|
if (ARM_GET_SYM_BRANCH_TYPE (h->target_internal)
|
||||||
|
== ST_BRANCH_TO_THUMB)
|
||||||
record_arm_to_thumb_glue (link_info, h);
|
record_arm_to_thumb_glue (link_info, h);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -11506,12 +11509,18 @@ elf32_arm_relocate_section (bfd * output_bfd,
|
||||||
r = bfd_reloc_continue;
|
r = bfd_reloc_continue;
|
||||||
|
|
||||||
if (r == bfd_reloc_continue)
|
if (r == bfd_reloc_continue)
|
||||||
|
{
|
||||||
|
unsigned char branch_type =
|
||||||
|
h ? ARM_GET_SYM_BRANCH_TYPE (h->target_internal)
|
||||||
|
: ARM_GET_SYM_BRANCH_TYPE (sym->st_target_internal);
|
||||||
|
|
||||||
r = elf32_arm_final_link_relocate (howto, input_bfd, output_bfd,
|
r = elf32_arm_final_link_relocate (howto, input_bfd, output_bfd,
|
||||||
input_section, contents, rel,
|
input_section, contents, rel,
|
||||||
relocation, info, sec, name, sym_type,
|
relocation, info, sec, name,
|
||||||
(h ? h->target_internal
|
sym_type, branch_type, h,
|
||||||
: ARM_SYM_BRANCH_TYPE (sym)), h,
|
&unresolved_reloc,
|
||||||
&unresolved_reloc, &error_message);
|
&error_message);
|
||||||
|
}
|
||||||
|
|
||||||
/* Dynamic relocs are not propagated for SEC_DEBUGGING sections
|
/* Dynamic relocs are not propagated for SEC_DEBUGGING sections
|
||||||
because such sections are not SEC_ALLOC and thus ld.so will
|
because such sections are not SEC_ALLOC and thus ld.so will
|
||||||
|
@ -14254,7 +14263,7 @@ allocate_dynrelocs_for_symbol (struct elf_link_hash_entry *h, void * inf)
|
||||||
/* Make sure the function is not marked as Thumb, in case
|
/* Make sure the function is not marked as Thumb, in case
|
||||||
it is the target of an ABS32 relocation, which will
|
it is the target of an ABS32 relocation, which will
|
||||||
point to the PLT entry. */
|
point to the PLT entry. */
|
||||||
h->target_internal = ST_BRANCH_TO_ARM;
|
ARM_SET_SYM_BRANCH_TYPE (h->target_internal, ST_BRANCH_TO_ARM);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* VxWorks executables have a second set of relocations for
|
/* VxWorks executables have a second set of relocations for
|
||||||
|
@ -14402,7 +14411,7 @@ allocate_dynrelocs_for_symbol (struct elf_link_hash_entry *h, void * inf)
|
||||||
/* Allocate stubs for exported Thumb functions on v4t. */
|
/* Allocate stubs for exported Thumb functions on v4t. */
|
||||||
if (!htab->use_blx && h->dynindx != -1
|
if (!htab->use_blx && h->dynindx != -1
|
||||||
&& h->def_regular
|
&& h->def_regular
|
||||||
&& h->target_internal == ST_BRANCH_TO_THUMB
|
&& ARM_GET_SYM_BRANCH_TYPE (h->target_internal) == ST_BRANCH_TO_THUMB
|
||||||
&& ELF_ST_VISIBILITY (h->other) == STV_DEFAULT)
|
&& ELF_ST_VISIBILITY (h->other) == STV_DEFAULT)
|
||||||
{
|
{
|
||||||
struct elf_link_hash_entry * th;
|
struct elf_link_hash_entry * th;
|
||||||
|
@ -14422,12 +14431,12 @@ allocate_dynrelocs_for_symbol (struct elf_link_hash_entry *h, void * inf)
|
||||||
myh = (struct elf_link_hash_entry *) bh;
|
myh = (struct elf_link_hash_entry *) bh;
|
||||||
myh->type = ELF_ST_INFO (STB_LOCAL, STT_FUNC);
|
myh->type = ELF_ST_INFO (STB_LOCAL, STT_FUNC);
|
||||||
myh->forced_local = 1;
|
myh->forced_local = 1;
|
||||||
myh->target_internal = ST_BRANCH_TO_THUMB;
|
ARM_SET_SYM_BRANCH_TYPE (myh->target_internal, ST_BRANCH_TO_THUMB);
|
||||||
eh->export_glue = myh;
|
eh->export_glue = myh;
|
||||||
th = record_arm_to_thumb_glue (info, h);
|
th = record_arm_to_thumb_glue (info, h);
|
||||||
/* Point the symbol at the stub. */
|
/* Point the symbol at the stub. */
|
||||||
h->type = ELF_ST_INFO (ELF_ST_BIND (h->type), STT_FUNC);
|
h->type = ELF_ST_INFO (ELF_ST_BIND (h->type), STT_FUNC);
|
||||||
h->target_internal = ST_BRANCH_TO_ARM;
|
ARM_SET_SYM_BRANCH_TYPE (h->target_internal, ST_BRANCH_TO_ARM);
|
||||||
h->root.u.def.section = th->root.u.def.section;
|
h->root.u.def.section = th->root.u.def.section;
|
||||||
h->root.u.def.value = th->root.u.def.value & ~1;
|
h->root.u.def.value = th->root.u.def.value & ~1;
|
||||||
}
|
}
|
||||||
|
@ -15082,7 +15091,7 @@ elf32_arm_finish_dynamic_symbol (bfd * output_bfd,
|
||||||
/* At least one non-call relocation references this .iplt entry,
|
/* At least one non-call relocation references this .iplt entry,
|
||||||
so the .iplt entry is the function's canonical address. */
|
so the .iplt entry is the function's canonical address. */
|
||||||
sym->st_info = ELF_ST_INFO (ELF_ST_BIND (sym->st_info), STT_FUNC);
|
sym->st_info = ELF_ST_INFO (ELF_ST_BIND (sym->st_info), STT_FUNC);
|
||||||
sym->st_target_internal = ST_BRANCH_TO_ARM;
|
ARM_SET_SYM_BRANCH_TYPE (sym->st_target_internal, ST_BRANCH_TO_ARM);
|
||||||
sym->st_shndx = (_bfd_elf_section_from_bfd_section
|
sym->st_shndx = (_bfd_elf_section_from_bfd_section
|
||||||
(output_bfd, htab->root.iplt->output_section));
|
(output_bfd, htab->root.iplt->output_section));
|
||||||
sym->st_value = (h->plt.offset
|
sym->st_value = (h->plt.offset
|
||||||
|
@ -15366,7 +15375,9 @@ elf32_arm_finish_dynamic_sections (bfd * output_bfd, struct bfd_link_info * info
|
||||||
|
|
||||||
eh = elf_link_hash_lookup (elf_hash_table (info), name,
|
eh = elf_link_hash_lookup (elf_hash_table (info), name,
|
||||||
FALSE, FALSE, TRUE);
|
FALSE, FALSE, TRUE);
|
||||||
if (eh != NULL && eh->target_internal == ST_BRANCH_TO_THUMB)
|
if (eh != NULL
|
||||||
|
&& ARM_GET_SYM_BRANCH_TYPE (eh->target_internal)
|
||||||
|
== ST_BRANCH_TO_THUMB)
|
||||||
{
|
{
|
||||||
dyn.d_un.d_val |= 1;
|
dyn.d_un.d_val |= 1;
|
||||||
bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
|
bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
|
||||||
|
@ -17542,6 +17553,7 @@ elf32_arm_swap_symbol_in (bfd * abfd,
|
||||||
{
|
{
|
||||||
if (!bfd_elf32_swap_symbol_in (abfd, psrc, pshn, dst))
|
if (!bfd_elf32_swap_symbol_in (abfd, psrc, pshn, dst))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
dst->st_target_internal = 0;
|
||||||
|
|
||||||
/* New EABI objects mark thumb function symbols by setting the low bit of
|
/* New EABI objects mark thumb function symbols by setting the low bit of
|
||||||
the address. */
|
the address. */
|
||||||
|
@ -17551,20 +17563,21 @@ elf32_arm_swap_symbol_in (bfd * abfd,
|
||||||
if (dst->st_value & 1)
|
if (dst->st_value & 1)
|
||||||
{
|
{
|
||||||
dst->st_value &= ~(bfd_vma) 1;
|
dst->st_value &= ~(bfd_vma) 1;
|
||||||
dst->st_target_internal = ST_BRANCH_TO_THUMB;
|
ARM_SET_SYM_BRANCH_TYPE (dst->st_target_internal,
|
||||||
|
ST_BRANCH_TO_THUMB);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
dst->st_target_internal = ST_BRANCH_TO_ARM;
|
ARM_SET_SYM_BRANCH_TYPE (dst->st_target_internal, ST_BRANCH_TO_ARM);
|
||||||
}
|
}
|
||||||
else if (ELF_ST_TYPE (dst->st_info) == STT_ARM_TFUNC)
|
else if (ELF_ST_TYPE (dst->st_info) == STT_ARM_TFUNC)
|
||||||
{
|
{
|
||||||
dst->st_info = ELF_ST_INFO (ELF_ST_BIND (dst->st_info), STT_FUNC);
|
dst->st_info = ELF_ST_INFO (ELF_ST_BIND (dst->st_info), STT_FUNC);
|
||||||
dst->st_target_internal = ST_BRANCH_TO_THUMB;
|
ARM_SET_SYM_BRANCH_TYPE (dst->st_target_internal, ST_BRANCH_TO_THUMB);
|
||||||
}
|
}
|
||||||
else if (ELF_ST_TYPE (dst->st_info) == STT_SECTION)
|
else if (ELF_ST_TYPE (dst->st_info) == STT_SECTION)
|
||||||
dst->st_target_internal = ST_BRANCH_LONG;
|
ARM_SET_SYM_BRANCH_TYPE (dst->st_target_internal, ST_BRANCH_LONG);
|
||||||
else
|
else
|
||||||
dst->st_target_internal = ST_BRANCH_UNKNOWN;
|
ARM_SET_SYM_BRANCH_TYPE (dst->st_target_internal, ST_BRANCH_UNKNOWN);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -17584,7 +17597,7 @@ elf32_arm_swap_symbol_out (bfd *abfd,
|
||||||
of the address set, as per the new EABI. We do this unconditionally
|
of the address set, as per the new EABI. We do this unconditionally
|
||||||
because objcopy does not set the elf header flags until after
|
because objcopy does not set the elf header flags until after
|
||||||
it writes out the symbol table. */
|
it writes out the symbol table. */
|
||||||
if (src->st_target_internal == ST_BRANCH_TO_THUMB)
|
if (ARM_GET_SYM_BRANCH_TYPE (src->st_target_internal) == ST_BRANCH_TO_THUMB)
|
||||||
{
|
{
|
||||||
newsym = *src;
|
newsym = *src;
|
||||||
if (ELF_ST_TYPE (src->st_info) != STT_GNU_IFUNC)
|
if (ELF_ST_TYPE (src->st_info) != STT_GNU_IFUNC)
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
2016-05-10 Thomas Preud'homme <thomas.preudhomme@arm.com>
|
||||||
|
|
||||||
|
* config/tc-arm.c (arm_adjust_symtab): Use ARM_SET_SYM_BRANCH_TYPE to
|
||||||
|
set branch type of a symbol.
|
||||||
|
|
||||||
2016-05-10 Thomas Preud'homme <thomas.preudhomme@arm.com>
|
2016-05-10 Thomas Preud'homme <thomas.preudhomme@arm.com>
|
||||||
|
|
||||||
* NEWS: Document ARMv8-M and ARMv8-M Security and DSP Extensions.
|
* NEWS: Document ARMv8-M and ARMv8-M Security and DSP Extensions.
|
||||||
|
|
|
@ -24694,8 +24694,8 @@ arm_adjust_symtab (void)
|
||||||
/* If it's a .thumb_func, declare it as so,
|
/* If it's a .thumb_func, declare it as so,
|
||||||
otherwise tag label as .code 16. */
|
otherwise tag label as .code 16. */
|
||||||
if (THUMB_IS_FUNC (sym))
|
if (THUMB_IS_FUNC (sym))
|
||||||
elf_sym->internal_elf_sym.st_target_internal
|
ARM_SET_SYM_BRANCH_TYPE (elf_sym->internal_elf_sym.st_target_internal,
|
||||||
= ST_BRANCH_TO_THUMB;
|
ST_BRANCH_TO_THUMB);
|
||||||
else if (EF_ARM_EABI_VERSION (meabi_flags) < EF_ARM_EABI_VER4)
|
else if (EF_ARM_EABI_VERSION (meabi_flags) < EF_ARM_EABI_VER4)
|
||||||
elf_sym->internal_elf_sym.st_info =
|
elf_sym->internal_elf_sym.st_info =
|
||||||
ELF_ST_INFO (bind, STT_ARM_16BIT);
|
ELF_ST_INFO (bind, STT_ARM_16BIT);
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
2016-05-10 Thomas Preud'homme <thomas.preudhomme@arm.com>
|
||||||
|
|
||||||
|
* arm-tdep.c (arm_elf_make_msymbol_special): Use
|
||||||
|
ARM_GET_SYM_BRANCH_TYPE to get branch type of a symbol.
|
||||||
|
|
||||||
2016-05-07 Trevor Saunders <tbsaunde+binutils@tbsaunde.org>
|
2016-05-07 Trevor Saunders <tbsaunde+binutils@tbsaunde.org>
|
||||||
|
|
||||||
* aarch64-linux-tdep.c (aarch64_linux_sigframe_init): Remove unused
|
* aarch64-linux-tdep.c (aarch64_linux_sigframe_init): Remove unused
|
||||||
|
|
|
@ -8538,7 +8538,9 @@ coff_sym_is_thumb (int val)
|
||||||
static void
|
static void
|
||||||
arm_elf_make_msymbol_special(asymbol *sym, struct minimal_symbol *msym)
|
arm_elf_make_msymbol_special(asymbol *sym, struct minimal_symbol *msym)
|
||||||
{
|
{
|
||||||
if (ARM_SYM_BRANCH_TYPE (&((elf_symbol_type *)sym)->internal_elf_sym)
|
elf_symbol_type *elfsym = (elf_symbol_type *) sym;
|
||||||
|
|
||||||
|
if (ARM_GET_SYM_BRANCH_TYPE (elfsym->internal_elf_sym.st_target_internal)
|
||||||
== ST_BRANCH_TO_THUMB)
|
== ST_BRANCH_TO_THUMB)
|
||||||
MSYMBOL_SET_SPECIAL (msym);
|
MSYMBOL_SET_SPECIAL (msym);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,15 @@
|
||||||
|
2016-05-10 Thomas Preud'homme <thomas.preudhomme@arm.com>
|
||||||
|
Nick Clifton <nickc@redhat.com>
|
||||||
|
|
||||||
|
* arm.h (enum arm_st_branch_type): Add new ST_BRANCH_ENUM_SIZE
|
||||||
|
enumerator.
|
||||||
|
(NUM_ENUM_ARM_ST_BRANCH_TYPE_BITS): New macro.
|
||||||
|
(ENUM_ARM_ST_BRANCH_TYPE_BITMASK): Likewise.
|
||||||
|
(ARM_SYM_BRANCH_TYPE): Replace by ...
|
||||||
|
(ARM_GET_SYM_BRANCH_TYPE): This and ...
|
||||||
|
(ARM_SET_SYM_BRANCH_TYPE): This in two versions depending on whether
|
||||||
|
BFD_ASSERT is defined or not.
|
||||||
|
|
||||||
2016-05-10 Thomas Preud'homme <thomas.preudhomme@arm.com>
|
2016-05-10 Thomas Preud'homme <thomas.preudhomme@arm.com>
|
||||||
|
|
||||||
* elf/arm.h (Tag_DSP_extension): Define.
|
* elf/arm.h (Tag_DSP_extension): Define.
|
||||||
|
|
|
@ -359,10 +359,29 @@ enum arm_st_branch_type {
|
||||||
ST_BRANCH_TO_ARM,
|
ST_BRANCH_TO_ARM,
|
||||||
ST_BRANCH_TO_THUMB,
|
ST_BRANCH_TO_THUMB,
|
||||||
ST_BRANCH_LONG,
|
ST_BRANCH_LONG,
|
||||||
ST_BRANCH_UNKNOWN
|
ST_BRANCH_UNKNOWN,
|
||||||
|
ST_BRANCH_ENUM_SIZE
|
||||||
};
|
};
|
||||||
|
|
||||||
#define ARM_SYM_BRANCH_TYPE(SYM) \
|
#define NUM_ENUM_ARM_ST_BRANCH_TYPE_BITS 2
|
||||||
((enum arm_st_branch_type) (SYM)->st_target_internal)
|
#define ENUM_ARM_ST_BRANCH_TYPE_BITMASK \
|
||||||
|
((1 << NUM_ENUM_ARM_ST_BRANCH_TYPE_BITS) - 1)
|
||||||
|
|
||||||
|
#define ARM_GET_SYM_BRANCH_TYPE(STI) \
|
||||||
|
((enum arm_st_branch_type) ((STI) & ENUM_ARM_ST_BRANCH_TYPE_BITMASK))
|
||||||
|
#ifdef BFD_ASSERT
|
||||||
|
#define ARM_SET_SYM_BRANCH_TYPE(STI, TYPE) \
|
||||||
|
do { \
|
||||||
|
BFD_ASSERT (TYPE <= ST_BRANCH_ENUM_SIZE); \
|
||||||
|
BFD_ASSERT ((1 << NUM_ENUM_ARM_ST_BRANCH_TYPE_BITS) \
|
||||||
|
>= ST_BRANCH_ENUM_SIZE); \
|
||||||
|
(STI) = (((STI) & ~ENUM_ARM_ST_BRANCH_TYPE_BITMASK) \
|
||||||
|
| ((TYPE) & ENUM_ARM_ST_BRANCH_TYPE_BITMASK)); \
|
||||||
|
} while (0)
|
||||||
|
#else
|
||||||
|
#define ARM_SET_SYM_BRANCH_TYPE(STI, TYPE) \
|
||||||
|
(STI) = (((STI) & ~ENUM_ARM_ST_BRANCH_TYPE_BITMASK) \
|
||||||
|
| ((TYPE) & ENUM_ARM_ST_BRANCH_TYPE_BITMASK))
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* _ELF_ARM_H */
|
#endif /* _ELF_ARM_H */
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
2016-05-10 Thomas Preud'homme <thomas.preudhomme@arm.com>
|
||||||
|
|
||||||
|
* emultempl/armelf.em (gld${EMULATION_NAME}_finish): Use
|
||||||
|
ARM_GET_SYM_BRANCH_TYPE to get branch type of a symbol.
|
||||||
|
|
||||||
2016-05-10 Thomas Preud'homme <thomas.preudhomme@arm.com>
|
2016-05-10 Thomas Preud'homme <thomas.preudhomme@arm.com>
|
||||||
|
|
||||||
* emultempl/armelf.em (elf32_arm_add_stub_section): Add output_section
|
* emultempl/armelf.em (elf32_arm_add_stub_section): Add output_section
|
||||||
|
|
|
@ -447,7 +447,8 @@ gld${EMULATION_NAME}_finish (void)
|
||||||
h = bfd_link_hash_lookup (link_info.hash, entry_symbol.name,
|
h = bfd_link_hash_lookup (link_info.hash, entry_symbol.name,
|
||||||
FALSE, FALSE, TRUE);
|
FALSE, FALSE, TRUE);
|
||||||
eh = (struct elf_link_hash_entry *)h;
|
eh = (struct elf_link_hash_entry *)h;
|
||||||
if (!h || eh->target_internal != ST_BRANCH_TO_THUMB)
|
if (!h || ARM_GET_SYM_BRANCH_TYPE (eh->target_internal)
|
||||||
|
!= ST_BRANCH_TO_THUMB)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,9 @@
|
||||||
|
2016-05-10 Thomas Preud'homme <thomas.preudhomme@arm.com>
|
||||||
|
|
||||||
|
* arm-dis.c (get_sym_code_type): Use ARM_GET_SYM_BRANCH_TYPE to get
|
||||||
|
branch type of a symbol.
|
||||||
|
(print_insn): Likewise.
|
||||||
|
|
||||||
2016-05-10 Thomas Preud'homme <thomas.preudhomme@arm.com>
|
2016-05-10 Thomas Preud'homme <thomas.preudhomme@arm.com>
|
||||||
|
|
||||||
* arm-dis.c (coprocessor_opcodes): Add entries for VFP ARMv8-M
|
* arm-dis.c (coprocessor_opcodes): Add entries for VFP ARMv8-M
|
||||||
|
|
|
@ -6288,7 +6288,8 @@ get_sym_code_type (struct disassemble_info *info,
|
||||||
/* If the symbol has function type then use that. */
|
/* If the symbol has function type then use that. */
|
||||||
if (type == STT_FUNC || type == STT_GNU_IFUNC)
|
if (type == STT_FUNC || type == STT_GNU_IFUNC)
|
||||||
{
|
{
|
||||||
if (ARM_SYM_BRANCH_TYPE (&es->internal_elf_sym) == ST_BRANCH_TO_THUMB)
|
if (ARM_GET_SYM_BRANCH_TYPE (es->internal_elf_sym.st_target_internal)
|
||||||
|
== ST_BRANCH_TO_THUMB)
|
||||||
*map_type = MAP_THUMB;
|
*map_type = MAP_THUMB;
|
||||||
else
|
else
|
||||||
*map_type = MAP_ARM;
|
*map_type = MAP_ARM;
|
||||||
|
@ -6655,9 +6656,9 @@ print_insn (bfd_vma pc, struct disassemble_info *info, bfd_boolean little)
|
||||||
es = *(elf_symbol_type **)(info->symbols);
|
es = *(elf_symbol_type **)(info->symbols);
|
||||||
type = ELF_ST_TYPE (es->internal_elf_sym.st_info);
|
type = ELF_ST_TYPE (es->internal_elf_sym.st_info);
|
||||||
|
|
||||||
is_thumb = ((ARM_SYM_BRANCH_TYPE (&es->internal_elf_sym)
|
is_thumb =
|
||||||
== ST_BRANCH_TO_THUMB)
|
((ARM_GET_SYM_BRANCH_TYPE (es->internal_elf_sym.st_target_internal)
|
||||||
|| type == STT_ARM_16BIT);
|
== ST_BRANCH_TO_THUMB) || type == STT_ARM_16BIT);
|
||||||
}
|
}
|
||||||
else if (bfd_asymbol_flavour (*info->symbols)
|
else if (bfd_asymbol_flavour (*info->symbols)
|
||||||
== bfd_target_mach_o_flavour)
|
== bfd_target_mach_o_flavour)
|
||||||
|
|
Loading…
Reference in New Issue