aboutsummaryrefslogtreecommitdiff
path: root/opcodes/arm-dis.c
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2012-05-11 09:41:21 +0000
committerNick Clifton <nickc@redhat.com>2012-05-11 09:41:21 +0000
commit6750a3a77504bb879eb639c34a2911e704644ba4 (patch)
tree03fdd91adddb0263e8e65c891b35dbe5e0791895 /opcodes/arm-dis.c
parent268a8d3ac407c5ce6bd6fe27736a1b9265e84f25 (diff)
downloadfsf-binutils-gdb-6750a3a77504bb879eb639c34a2911e704644ba4.zip
fsf-binutils-gdb-6750a3a77504bb879eb639c34a2911e704644ba4.tar.gz
fsf-binutils-gdb-6750a3a77504bb879eb639c34a2911e704644ba4.tar.bz2
PR binutils/14006
* arm-dis.c (print_insn): Fix detection of instruction mode in files containing multiple executable sections.
Diffstat (limited to 'opcodes/arm-dis.c')
-rw-r--r--opcodes/arm-dis.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/opcodes/arm-dis.c b/opcodes/arm-dis.c
index 03062ad..1269cf7 100644
--- a/opcodes/arm-dis.c
+++ b/opcodes/arm-dis.c
@@ -4697,9 +4697,19 @@ print_insn (bfd_vma pc, struct disassemble_info *info, bfd_boolean little)
/* Start scanning at the start of the function, or wherever
we finished last time. */
- start = info->symtab_pos + 1;
- if (start < private_data->last_mapping_sym)
- start = private_data->last_mapping_sym;
+ /* PR 14006. When the address is 0 we are either at the start of the
+ very first function, or else the first function in a new, unlinked
+ executable section (eg because uf -ffunction-sections). Either way
+ start scanning from the beginning of the symbol table, not where we
+ left off last time. */
+ if (pc == 0)
+ start = 0;
+ else
+ {
+ start = info->symtab_pos + 1;
+ if (start < private_data->last_mapping_sym)
+ start = private_data->last_mapping_sym;
+ }
found = FALSE;
/* First, look for mapping symbols. */