From: Alan Modra Date: Tue, 6 Apr 2021 09:27:04 +0000 (+0930) Subject: Return symbol from symbol_at_address_func X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=a2e66773735d2d2de2ba652e44650288c88ad752;p=binutils-gdb.git 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. --- diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 13fa6d2d401..413757d6859 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,7 @@ +2021-04-06 Alan Modra + + * objdump.c (objdump_symbol_at_address): Return asymbol*. + 2021-04-06 Alan Modra * NEWS: Mention C99 requirement. diff --git a/binutils/objdump.c b/binutils/objdump.c index aa1215cede8..ea80a704ee3 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 9eb5f0a7bed..639f2bf9324 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 4f5008436d4..f3562faa000 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 f3572a60cb8..7a380dc0087 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 2a934652a1e..dfc1563f09d 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 4616bc82711..ec8f4f70883 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)); }