diff options
Diffstat (limited to 'opcodes/arm-dis.c')
-rw-r--r-- | opcodes/arm-dis.c | 16 |
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. */ |