Stop symbols generated by the annobin gcc plugin from breaking the disassembly of PowerPC binaries.
* ppc-dis.c (ppc_symbol_is_valid): New function. Returns false for hidden, local, no-type symbols. (disassemble_init_powerpc): Point the symbol_is_valid field in the info structure at the new function.
This commit is contained in:
parent
89ce8eab23
commit
7ad578807a
2 changed files with 31 additions and 0 deletions
|
@ -1,3 +1,10 @@
|
||||||
|
2020-09-10 Nick Clifton <nickc@redhat.com>
|
||||||
|
|
||||||
|
* ppc-dis.c (ppc_symbol_is_valid): New function. Returns false
|
||||||
|
for hidden, local, no-type symbols.
|
||||||
|
(disassemble_init_powerpc): Point the symbol_is_valid field in the
|
||||||
|
info structure at the new function.
|
||||||
|
|
||||||
2020-09-10 Cooper Qu <cooper.qu@linux.alibaba.com>
|
2020-09-10 Cooper Qu <cooper.qu@linux.alibaba.com>
|
||||||
|
|
||||||
* csky-opc.h (csky_v2_opcodes): Add L2Cache instructions.
|
* csky-opc.h (csky_v2_opcodes): Add L2Cache instructions.
|
||||||
|
|
|
@ -399,12 +399,36 @@ static unsigned short vle_opcd_indices[VLE_OPCD_SEGS + 1];
|
||||||
#define SPE2_OPCD_SEGS (1 + SPE2_XOP_TO_SEG (SPE2_XOP (-1)))
|
#define SPE2_OPCD_SEGS (1 + SPE2_XOP_TO_SEG (SPE2_XOP (-1)))
|
||||||
static unsigned short spe2_opcd_indices[SPE2_OPCD_SEGS + 1];
|
static unsigned short spe2_opcd_indices[SPE2_OPCD_SEGS + 1];
|
||||||
|
|
||||||
|
static bfd_boolean
|
||||||
|
ppc_symbol_is_valid (asymbol *sym,
|
||||||
|
struct disassemble_info *info ATTRIBUTE_UNUSED)
|
||||||
|
{
|
||||||
|
elf_symbol_type * est;
|
||||||
|
|
||||||
|
if (sym == NULL)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
est = elf_symbol_from (NULL, sym);
|
||||||
|
|
||||||
|
/* Ignore ELF hidden, local, no-type symbols.
|
||||||
|
These are generated by annobin. */
|
||||||
|
if (est != NULL
|
||||||
|
&& ELF_ST_VISIBILITY (est->internal_elf_sym.st_other) == STV_HIDDEN
|
||||||
|
&& ELF_ST_BIND (est->internal_elf_sym.st_info) == STB_LOCAL
|
||||||
|
&& ELF_ST_TYPE (est->internal_elf_sym.st_info) == STT_NOTYPE)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
/* Calculate opcode table indices to speed up disassembly,
|
/* Calculate opcode table indices to speed up disassembly,
|
||||||
and init dialect. */
|
and init dialect. */
|
||||||
|
|
||||||
void
|
void
|
||||||
disassemble_init_powerpc (struct disassemble_info *info)
|
disassemble_init_powerpc (struct disassemble_info *info)
|
||||||
{
|
{
|
||||||
|
info->symbol_is_valid = ppc_symbol_is_valid;
|
||||||
|
|
||||||
if (powerpc_opcd_indices[PPC_OPCD_SEGS] == 0)
|
if (powerpc_opcd_indices[PPC_OPCD_SEGS] == 0)
|
||||||
{
|
{
|
||||||
unsigned seg, idx, op;
|
unsigned seg, idx, op;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue