From a2e66773735d2d2de2ba652e44650288c88ad752 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Tue, 6 Apr 2021 18:57:04 +0930 Subject: Return symbol from symbol_at_address_func include/ * dis-asm.h (struct disassemble_info ): 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. --- binutils/ChangeLog | 4 ++++ binutils/objdump.c | 6 ++++-- include/ChangeLog | 5 +++++ include/dis-asm.h | 10 +++++----- opcodes/ChangeLog | 6 ++++++ opcodes/dis-buf.c | 6 +++--- opcodes/s12z-dis.c | 25 +++++-------------------- 7 files changed, 32 insertions(+), 30 deletions(-) diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 13fa6d2..413757d 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,5 +1,9 @@ 2021-04-06 Alan Modra + * objdump.c (objdump_symbol_at_address): Return asymbol*. + +2021-04-06 Alan Modra + * NEWS: Mention C99 requirement. * README: Likewise. Modernise examples and "Reporting bugs". diff --git a/binutils/objdump.c b/binutils/objdump.c index aa1215c..ea80a70 100644 --- a/binutils/objdump.c +++ b/binutils/objdump.c @@ -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 diff --git a/include/ChangeLog b/include/ChangeLog index 9eb5f0a..639f2bf 100644 --- a/include/ChangeLog +++ b/include/ChangeLog @@ -1,3 +1,8 @@ +2021-04-06 Alan Modra + + * dis-asm.h (struct disassemble_info ): + Return asymbol*. + 2021-04-01 Martin Liska * opcode/cr16.h (strneq): Remove strneq and use startswith. diff --git a/include/dis-asm.h b/include/dis-asm.h index 4f50084..f3562fa 100644 --- a/include/dis-asm.h +++ b/include/dis-asm.h @@ -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 *); diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog index f3572a6..7a380dc 100644 --- a/opcodes/ChangeLog +++ b/opcodes/ChangeLog @@ -1,3 +1,9 @@ +2021-04-06 Alan Modra + + * 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 * configure.ac: Don't check for limits.h, string.h, strings.h or diff --git a/opcodes/dis-buf.c b/opcodes/dis-buf.c index 2a93465..dfc1563 100644 --- a/opcodes/dis-buf.c +++ b/opcodes/dis-buf.c @@ -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. */ diff --git a/opcodes/s12z-dis.c b/opcodes/s12z-dis.c index 4616bc8..ec8f4f7 100644 --- a/opcodes/s12z-dis.c +++ b/opcodes/s12z-dis.c @@ -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)); } -- cgit v1.1