aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2021-04-06 18:57:04 +0930
committerAlan Modra <amodra@gmail.com>2021-04-06 23:25:09 +0930
commita2e66773735d2d2de2ba652e44650288c88ad752 (patch)
treef2e8dfe1592fd03641ab6e14951cc89e3e38b79e
parent4db29512ce5616e90a9cdbc4daa852589b7357c0 (diff)
downloadbinutils-a2e66773735d2d2de2ba652e44650288c88ad752.zip
binutils-a2e66773735d2d2de2ba652e44650288c88ad752.tar.gz
binutils-a2e66773735d2d2de2ba652e44650288c88ad752.tar.bz2
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.
-rw-r--r--binutils/ChangeLog4
-rw-r--r--binutils/objdump.c6
-rw-r--r--include/ChangeLog5
-rw-r--r--include/dis-asm.h10
-rw-r--r--opcodes/ChangeLog6
-rw-r--r--opcodes/dis-buf.c6
-rw-r--r--opcodes/s12z-dis.c25
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 <amodra@gmail.com>
+ * objdump.c (objdump_symbol_at_address): Return asymbol*.
+
+2021-04-06 Alan Modra <amodra@gmail.com>
+
* 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 <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.
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 <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
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));
}