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> 2021-04-06 Alan Modra <amodra@gmail.com>
* NEWS: Mention C99 requirement. * 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. */ /* 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) objdump_symbol_at_address (bfd_vma vma, struct disassemble_info * inf)
{ {
asymbol * sym; asymbol * sym;
sym = find_symbol_for_address (vma, inf, NULL); 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 /* 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> 2021-04-01 Martin Liska <mliska@suse.cz>
* opcode/cr16.h (strneq): Remove strneq and use startswith. * 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 some circumstances we want to include the overlay number in the
address, (normally because there is a symbol associated with address, (normally because there is a symbol associated with
that address), but sometimes we want to mask out the overlay bits. */ 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); (bfd_vma addr, struct disassemble_info *dinfo);
/* Function called to check if a SYMBOL is can be displayed to the user. /* 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 This is used by some ports that want to hide special symbols when
displaying debugging outout. */ displaying debugging outout. */
bool (* symbol_is_valid) bool (*symbol_is_valid)
(asymbol *, struct disassemble_info *dinfo); (asymbol *, struct disassemble_info *dinfo);
/* These are for buffer_read_memory. */ /* 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 extern void generic_print_address
(bfd_vma, struct disassemble_info *); (bfd_vma, struct disassemble_info *);
/* Always true. */ /* Always NULL. */
extern int generic_symbol_at_address extern asymbol *generic_symbol_at_address
(bfd_vma, struct disassemble_info *); (bfd_vma, struct disassemble_info *);
/* Also always true. */ /* Always true. */
extern bool generic_symbol_is_valid extern bool generic_symbol_is_valid
(asymbol *, struct disassemble_info *); (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> 2021-04-05 Alan Modra <amodra@gmail.com>
* configure.ac: Don't check for limits.h, string.h, strings.h or * 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); (*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, generic_symbol_at_address (bfd_vma addr ATTRIBUTE_UNUSED,
struct disassemble_info *info ATTRIBUTE_UNUSED) struct disassemble_info *info ATTRIBUTE_UNUSED)
{ {
return 1; return NULL;
} }
/* Just return TRUE. */ /* Just return TRUE. */

View File

@ -206,27 +206,12 @@ decode_possible_symbol (bfd_vma addr, bfd_vma base,
struct disassemble_info *info, bool relative) struct disassemble_info *info, bool relative)
{ {
const char *fmt = relative ? "*%+" BFD_VMA_FMT "d" : "%" BFD_VMA_FMT "d"; const char *fmt = relative ? "*%+" BFD_VMA_FMT "d" : "%" BFD_VMA_FMT "d";
if (!info->symbol_at_address_func (addr + base, info)) asymbol *sym = info->symbol_at_address_func (addr + base, info);
{
if (!sym)
(*info->fprintf_func) (info->stream, fmt, addr); (*info->fprintf_func) (info->stream, fmt, addr);
}
else 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)); (*info->fprintf_func) (info->stream, "%s", bfd_asymbol_name (sym));
else
(*info->fprintf_func) (info->stream, fmt, addr);
}
} }