Return symbol from symbol_at_address_func

include/
	* dis-asm.h (struct disassemble_info <symbol_at_address_func>):
	Return asymbol*.
binutils/
	* objdump.c (objdump_symbol_at_address): Return asymbol*.
opcodes/
	* dis-buf.c (generic_symbol_at_address): Return symbol* NULL.
	* s12z-dis.c (decode_possible_symbol): Use symbol returned from
	symbol_at_address_func.
This commit is contained in:
Alan Modra 2021-04-06 18:57:04 +09:30
parent 4db29512ce
commit a2e6677373
7 changed files with 32 additions and 30 deletions

View File

@ -1,3 +1,7 @@
2021-04-06 Alan Modra <amodra@gmail.com>
* objdump.c (objdump_symbol_at_address): Return asymbol*.
2021-04-06 Alan Modra <amodra@gmail.com>
* NEWS: Mention C99 requirement.

View File

@ -1459,14 +1459,16 @@ objdump_print_address (bfd_vma vma, struct disassemble_info *inf)
/* Determine if the given address has a symbol associated with it. */
static int
static asymbol *
objdump_symbol_at_address (bfd_vma vma, struct disassemble_info * inf)
{
asymbol * sym;
sym = find_symbol_for_address (vma, inf, NULL);
if (sym != NULL && bfd_asymbol_value (sym) == vma)
return sym;
return (sym != NULL && (bfd_asymbol_value (sym) == vma));
return NULL;
}
/* Hold the last function name and the last line number we displayed

View File

@ -1,3 +1,8 @@
2021-04-06 Alan Modra <amodra@gmail.com>
* dis-asm.h (struct disassemble_info <symbol_at_address_func>):
Return asymbol*.
2021-04-01 Martin Liska <mliska@suse.cz>
* opcode/cr16.h (strneq): Remove strneq and use startswith.

View File

@ -144,13 +144,13 @@ typedef struct disassemble_info
some circumstances we want to include the overlay number in the
address, (normally because there is a symbol associated with
that address), but sometimes we want to mask out the overlay bits. */
int (* symbol_at_address_func)
asymbol * (*symbol_at_address_func)
(bfd_vma addr, struct disassemble_info *dinfo);
/* Function called to check if a SYMBOL is can be displayed to the user.
This is used by some ports that want to hide special symbols when
displaying debugging outout. */
bool (* symbol_is_valid)
bool (*symbol_is_valid)
(asymbol *, struct disassemble_info *dinfo);
/* These are for buffer_read_memory. */
@ -376,11 +376,11 @@ extern void perror_memory (int, bfd_vma, struct disassemble_info *);
extern void generic_print_address
(bfd_vma, struct disassemble_info *);
/* Always true. */
extern int generic_symbol_at_address
/* Always NULL. */
extern asymbol *generic_symbol_at_address
(bfd_vma, struct disassemble_info *);
/* Also always true. */
/* Always true. */
extern bool generic_symbol_is_valid
(asymbol *, struct disassemble_info *);

View File

@ -1,3 +1,9 @@
2021-04-06 Alan Modra <amodra@gmail.com>
* dis-buf.c (generic_symbol_at_address): Return symbol* NULL.
* s12z-dis.c (decode_possible_symbol): Use symbol returned from
symbol_at_address_func.
2021-04-05 Alan Modra <amodra@gmail.com>
* configure.ac: Don't check for limits.h, string.h, strings.h or

View File

@ -87,13 +87,13 @@ generic_print_address (bfd_vma addr, struct disassemble_info *info)
(*info->fprintf_func) (info->stream, "0x%s", buf);
}
/* Just return true. */
/* Just return NULL. */
int
asymbol *
generic_symbol_at_address (bfd_vma addr ATTRIBUTE_UNUSED,
struct disassemble_info *info ATTRIBUTE_UNUSED)
{
return 1;
return NULL;
}
/* Just return TRUE. */

View File

@ -206,27 +206,12 @@ decode_possible_symbol (bfd_vma addr, bfd_vma base,
struct disassemble_info *info, bool relative)
{
const char *fmt = relative ? "*%+" BFD_VMA_FMT "d" : "%" BFD_VMA_FMT "d";
if (!info->symbol_at_address_func (addr + base, info))
{
(*info->fprintf_func) (info->stream, fmt, addr);
}
asymbol *sym = info->symbol_at_address_func (addr + base, info);
if (!sym)
(*info->fprintf_func) (info->stream, fmt, addr);
else
{
asymbol *sym = NULL;
int j;
for (j = 0; j < info->symtab_size; ++j)
{
sym = info->symtab[j];
if (bfd_asymbol_value (sym) == addr + base)
{
break;
}
}
if (j < info->symtab_size)
(*info->fprintf_func) (info->stream, "%s", bfd_asymbol_name (sym));
else
(*info->fprintf_func) (info->stream, fmt, addr);
}
(*info->fprintf_func) (info->stream, "%s", bfd_asymbol_name (sym));
}