40 lines
1.2 KiB
Diff
40 lines
1.2 KiB
Diff
|
--- binutils.orig/opcodes/ppc-dis.c 2020-09-11 10:55:56.243724026 +0100
|
||
|
+++ binutils-2.35/opcodes/ppc-dis.c 2020-09-11 10:57:51.363934217 +0100
|
||
|
@@ -399,12 +399,36 @@ static unsigned short vle_opcd_indices[V
|
||
|
#define SPE2_OPCD_SEGS (1 + SPE2_XOP_TO_SEG (SPE2_XOP (-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,
|
||
|
and init dialect. */
|
||
|
|
||
|
void
|
||
|
disassemble_init_powerpc (struct disassemble_info *info)
|
||
|
{
|
||
|
+ info->symbol_is_valid = ppc_symbol_is_valid;
|
||
|
+
|
||
|
if (powerpc_opcd_indices[PPC_OPCD_SEGS] == 0)
|
||
|
{
|
||
|
unsigned seg, idx, op;
|