+2019-12-17 Alan Modra <amodra@gmail.com>
+
+ * objdump.c (compare_section): New static var.
+ (compare_symbols): Sort by current section only. Don't access
+ symbol name out of bounds when checking for file symbols.
+ Sort section symbols and object symbols.
+ (find_symbol_for_address): Remove bogus debugging and section
+ symbol test.
+ (disassemble_data): Move symbol sort from here..
+ (disassemble_section): ..to here. Set compare_section.
+
2019-12-17 Alan Modra <amodra@gmail.com>
* testsuite/binutils-all/objcopy.exp: Remove tic80 support.
return out_ptr - symbols;
}
+static const asection *compare_section;
+
/* Sort symbols into value order. */
static int
const char *bn;
size_t anl;
size_t bnl;
- bfd_boolean af;
- bfd_boolean bf;
+ bfd_boolean as, af, bs, bf;
flagword aflags;
flagword bflags;
else if (bfd_asymbol_value (a) < bfd_asymbol_value (b))
return -1;
- if (a->section > b->section)
- return 1;
- else if (a->section < b->section)
+ /* Prefer symbols from the section currently being disassembled.
+ Don't sort symbols from other sections by section, since there
+ isn't much reason to prefer one section over another otherwise.
+ See sym_ok comment for why we compare by section name. */
+ as = strcmp (compare_section->name, a->section->name) == 0;
+ bs = strcmp (compare_section->name, b->section->name) == 0;
+ if (as && !bs)
return -1;
+ if (!as && bs)
+ return 1;
an = bfd_asymbol_name (a);
bn = bfd_asymbol_name (b);
#define file_symbol(s, sn, snl) \
(((s)->flags & BSF_FILE) != 0 \
- || ((sn)[(snl) - 2] == '.' \
+ || ((snl) > 2 \
+ && (sn)[(snl) - 2] == '.' \
&& ((sn)[(snl) - 1] == 'o' \
|| (sn)[(snl) - 1] == 'a')))
if (! af && bf)
return -1;
- /* Try to sort global symbols before local symbols before function
- symbols before debugging symbols. */
+ /* Sort function and object symbols before global symbols before
+ local symbols before section symbols before debugging symbols. */
aflags = a->flags;
bflags = b->flags;
else
return -1;
}
+ if ((aflags & BSF_SECTION_SYM) != (bflags & BSF_SECTION_SYM))
+ {
+ if ((aflags & BSF_SECTION_SYM) != 0)
+ return 1;
+ else
+ return -1;
+ }
if ((aflags & BSF_FUNCTION) != (bflags & BSF_FUNCTION))
{
if ((aflags & BSF_FUNCTION) != 0)
else
return 1;
}
+ if ((aflags & BSF_OBJECT) != (bflags & BSF_OBJECT))
+ {
+ if ((aflags & BSF_OBJECT) != 0)
+ return -1;
+ else
+ return 1;
+ }
if ((aflags & BSF_LOCAL) != (bflags & BSF_LOCAL))
{
if ((aflags & BSF_LOCAL) != 0)
/* The symbol we want is now in min, the low end of the range we
were searching. If there are several symbols with the same
- value, we want the first (non-section/non-debugging) one. */
+ value, we want the first one. */
thisplace = min;
while (thisplace > 0
&& (bfd_asymbol_value (sorted_syms[thisplace])
- == bfd_asymbol_value (sorted_syms[thisplace - 1]))
- && ((sorted_syms[thisplace - 1]->flags
- & (BSF_SECTION_SYM | BSF_DEBUGGING)) == 0)
- )
+ == bfd_asymbol_value (sorted_syms[thisplace - 1])))
--thisplace;
/* Prefer a symbol in the current section if we have multple symbols
pinfo->buffer_length = datasize;
pinfo->section = section;
+ /* Sort the symbols into value and section order. */
+ compare_section = section;
+ qsort (sorted_syms, sorted_symcount, sizeof (asymbol *), compare_symbols);
+
/* Skip over the relocs belonging to addresses below the
start address. */
while (rel_pp < rel_ppend
++sorted_symcount;
}
- /* Sort the symbols into section and symbol order. */
- qsort (sorted_syms, sorted_symcount, sizeof (asymbol *), compare_symbols);
-
init_disassemble_info (&disasm_info, stdout, (fprintf_ftype) fprintf);
disasm_info.application_data = (void *) &aux;
+2019-12-17 Alan Modra <amodra@gmail.com>
+
+ * testsuite/ld-avr/lds-mega.d: Adjust symbols to suit objdump change.
+ * testsuite/ld-avr/lds-tiny.d: Likewise.
+ * testsuite/ld-x86-64/load2.d: Likewise.
+ * testsuite/ld-mips-elf/compact-eh1.s: Give function symbols
+ function type.
+ * testsuite/ld-mips-elf/compact-eh1a.s: Likewise.
+ * testsuite/ld-mips-elf/compact-eh1b.s: Likewise.
+ * testsuite/ld-mips-elf/compact-eh2.s: Likewise.
+ * testsuite/ld-mips-elf/compact-eh3.s: Likewise.
+ * testsuite/ld-mips-elf/compact-eh3a.s: Likewise.
+ * testsuite/ld-mips-elf/eh-frame5.s: Likewise.
+ * testsuite/ld-mips-elf/ehdr_start-new.s: Likewise.
+ * testsuite/ld-mips-elf/ehdr_start-o32.s: Likewise.
+ * testsuite/ld-mips-elf/emit-relocs-1a.s: Likewise.
+ * testsuite/ld-mips-elf/jaloverflow-2.s: Likewise.
+ * testsuite/ld-mips-elf/jaloverflow.s: Likewise.
+ * testsuite/ld-mips-elf/mips16-call-global-1.s: Likewise.
+ * testsuite/ld-mips-elf/mips16-intermix-1.s: Likewise.
+ * testsuite/ld-mips-elf/mips16-pic-1b.s: Likewise.
+ * testsuite/ld-mips-elf/mips16-pic-4c.s: Likewise.
+ * testsuite/ld-mips-elf/no-shared-1-n64.s: Likewise.
+ * testsuite/ld-mips-elf/no-shared-1-o32.s: Likewise.
+ * testsuite/ld-mips-elf/pic-and-nonpic-1b-micromips.s: Likewise.
+ * testsuite/ld-mips-elf/pic-and-nonpic-1b.s: Likewise.
+ * testsuite/ld-mips-elf/pic-and-nonpic-2a.s: Likewise.
+ * testsuite/ld-mips-elf/pic-and-nonpic-3b.s: Likewise.
+ * testsuite/ld-mips-elf/pic-and-nonpic-4b.s: Likewise.
+ * testsuite/ld-mips-elf/pic-and-nonpic-5a.s: Likewise.
+ * testsuite/ld-mips-elf/pic-and-nonpic-6-n32c.s: Likewise.
+ * testsuite/ld-mips-elf/pic-and-nonpic-6-n64c.s: Likewise.
+ * testsuite/ld-mips-elf/pic-and-nonpic-6-o32c.s: Likewise.
+ * testsuite/ld-mips-elf/pie.s: Likewise.
+ * testsuite/ld-mips-elf/relax-jalr.s: Likewise.
+ * testsuite/ld-mips-elf/reloc-1a.s: Likewise.
+ * testsuite/ld-mips-elf/reloc-2a.s: Likewise.
+ * testsuite/ld-mips-elf/reloc-4.s: Likewise.
+ * testsuite/ld-mips-elf/reloc-5.s: Likewise.
+ * testsuite/ld-mips-elf/reloc-6b.s: Likewise.
+ * testsuite/ld-mips-elf/textrel-1.s: Likewise.
+ * testsuite/ld-mips-elf/undefweak-overflow.s: Likewise.
+ * testsuite/ld-mips-elf/undefweak-overflow.d: Adjust.
+
2019-12-17 Alan Modra <amodra@gmail.com>
* testsuite/ld-elf/pr21233-l.sd: Accept OBJECT for type and
Disassembly of section .text:
00000000 <main>:
- 0: 80 91 00 01 lds r24, 0x0100 ; 0x800100 <_edata>
+ 0: 80 91 00 01 lds r24, 0x0100 ; 0x800100 <myvar1>
4: 08 2e mov r0, r24
6: 00 0c add r0, r0
8: 99 0b sbc r25, r25
Disassembly of section .text:
00000000 <main>:
- 0: 20 a1 lds r18, 0x40 ; 0x800040 <_edata>
+ 0: 20 a1 lds r18, 0x40 ; 0x800040 <myvar1>
2: 42 a1 lds r20, 0x42 ; 0x800042 <myvar2\+0x1>
4: 53 a1 lds r21, 0x43 ; 0x800043 <_end>
6: 08 95 ret
.cfi_personality_id 0x2
.cfi_lsda 0x1b,.LLSDA3
.global main
+ .type main, @function
main:
.LEHB0 = .
jal compact1a
.cfi_sections .eh_frame_entry
.section .text.compact1a,"ax",@progbits
- .globl compact1a
+ .globl compact1a
+ .type compact1a, @function
.cfi_startproc
compact1a:
sw $2,16($fp)
.cfi_sections .eh_frame_entry
.section .text.compact1b,"ax",@progbits
.globl compact1b
+ .type compact1b, @function
.cfi_startproc
compact1b:
lw $31,44($sp)
.cfi_personality_id 0x2
.cfi_lsda 0x1b,.LLSDA3
.global main
+ .type main, @function
main:
.LEHB0 = .
move $4,$2
.cfi_personality_id 0x2
.cfi_lsda 0x1b,.LLSDA3
.global main
+ .type main, @function
main:
.LEHB0 = .
move $4,$2
.cfi_sections .eh_frame_entry
.section .text.compact3a,"ax",@progbits
.globl compact3a
+ .type compact3a, @function
.cfi_startproc
compact3a:
lw $31,44($sp)
.cfi_personality 0x0,local_pers
.cfi_lsda 0x0,LSDA
.ent f1
+ .type f1, @function
f1:
nop
.end f1
.cfi_personality 0x0,hidden_pers
.cfi_lsda 0x0,LSDA
.ent f2
+ .type f2, @function
f2:
nop
.end f2
.cfi_personality 0x0,global_pers
.cfi_lsda 0x0,LSDA
.ent f3
+ .type f3, @function
f3:
nop
.end f3
.cfi_personality 0x0,extern_pers
.cfi_lsda 0x0,LSDA
.ent f4
+ .type f4, @function
f4:
nop
.end f4
.cfi_personality 0x80,local_indirect_ptr
.cfi_lsda 0x0,LSDA
.ent f5
+ .type f5, @function
f5:
nop
.end f5
.cfi_personality 0x80,hidden_indirect_ptr
.cfi_lsda 0x0,LSDA
.ent f6
+ .type f6, @function
f6:
nop
.end f6
.cfi_personality 0x80,global_indirect_ptr
.cfi_lsda 0x0,LSDA
.ent f7
+ .type f7, @function
f7:
nop
.end f7
.cfi_personality 0x80,extern_indirect_ptr
.cfi_lsda 0x0,LSDA
.ent f8
+ .type f8, @function
f8:
nop
.end f8
.ent local_pers
+ .type local_pers, @function
local_pers:
nop
.end local_pers
.globl hidden_pers
.hidden hidden_pers
.ent hidden_pers
+ .type hidden_pers, @function
hidden_pers:
nop
.end hidden_pers
.globl global_pers
.ent global_pers
+ .type global_pers, @function
global_pers:
nop
.end global_pers
.text
.weak __ehdr_start
.globl __start
+ .type __start, @function
.ent __start
.frame $29, 0, $31
.mask 0x00000000, 0
.text
.weak __ehdr_start
.globl __start
+ .type __start, @function
.ent __start
.frame $29, 0, $31
.mask 0x00000000, 0
.text
.align 4
.globl _start
+ .type _start, @function
_start:
jr $31
# overflowing
.globl start
+ .type start, @function
.weak foo
start:
jal foo
# This file gets linked to start at 0xffffff0, so the call is an overflow.
.text
.global start
+ .type start, @function
.set noreorder
start:
nop
.set mips16
.globl __start
+ .type __start, @function
.ent __start
.align 4
__start:
.text
.align 2
.globl __start
+ .type __start, @function
.set nomips16
.ent __start
__start:
callpic used21,mips16
.globl __start
+ .type __start, @function
.ent __start
.set nomips16
__start:
.section .mips16.call.f2, "ax", @progbits
.ent __call
+ .type __call, @function
__call:
la $25,f2
jr $25
.section .mips16.call.fp.f3, "ax", @progbits
.ent __call_fp
+ .type __call_fp, @function
__call_fp:
la $25,f3
jr $25
.abicalls
.text
.globl __start
+ .type __start, @function
.ent __start
__start:
lui $2,%hi(__gnu_local_gp)
.abicalls
.text
.globl __start
+ .type __start, @function
.ent __start
__start:
lui $2,%hi(__gnu_local_gp)
.abicalls
.option pic0
.global __start
+ .type __start, @function
.set micromips
.ent __start
__start:
.abicalls
.option pic0
.global __start
+ .type __start, @function
.ent __start
__start:
jal f1
.abicalls
.option pic0
.global __start
+ .type __start, @function
.ent __start
__start:
jal foo
.abicalls
.option pic0
.global __start
+ .type __start, @function
.ent __start
__start:
jal foo
.end __start
.global ext
+ .type ext, @function
.ent ext
ext:
lui $gp,%hi(__gnu_local_gp)
.abicalls
.option pic0
.global __start
+ .type __start, @function
.ent __start
__start:
lui $2,%hi(obj1)
.abicalls
.option pic0
.global __start
+ .type __start, @function
.ent __start
__start:
lui $2,%hi(foo)
.option pic0
.set noreorder
.global __start
+ .type __start, @function
.ent __start
__start:
jal f1
.option pic0
.set noreorder
.global __start
+ .type __start, @function
.ent __start
__start:
jal f1
.option pic0
.set noreorder
.global __start
+ .type __start, @function
.ent __start
__start:
jal f1
.abicalls
.global __start
+ .type __start, @function
.ent __start
__start:
jr $31
-.globl __start
+ .globl __start
+ .type __start, @function
.space 8
-.ent __start
+ .ent __start
__start:
.Lstart:
.space 16
jal __start
.space 64
jal .Lstart
-.end __start
+ .end __start
# make objdump print ...
.space 8
.globl _start
+ .type _start, @function
.globl sdg
.set noreorder
.ent tstarta
.globl _start
+ .type _start, @function
.globl sdg
.set noreorder
.ent tstarta
.text
.globl _start
+ .type _start, @function
_start:
li.d $f2,1.10000000000000000000e0
.text
.globl _start
+ .type _start, @function
_start:
lw $2, %gp_rel(i)($28)
.globl __start .text
+ .type __start, @function
.globl gs .text
__start:
gs:
.globl foo
+ .type foo, @function
foo:
.cfi_startproc
nop
#ld: -Ttext=0x20000000 -e start
#objdump: -dr --show-raw-insn
#...
-[0-9a-f]+ <_ftext>:
-[ 0-9a-f]+: d85fffff beqzc v0,20000000 <_ftext>
+[0-9a-f]+ <start>:
+[ 0-9a-f]+: d85fffff beqzc v0,20000000 <start>
[ 0-9a-f]+: 00000000 nop
-[ 0-9a-f]+: f85ffffd bnezc v0,20000000 <_ftext>
-[ 0-9a-f]+: ec4ffffd lwpc v0,20000000 <_ftext>
-[ 0-9a-f]+: ec5bfffe ldpc v0,20000000 <_ftext>
-[ 0-9a-f]+: cbfffffa bc 20000000 <_ftext>
-[ 0-9a-f]+: 1000fff9 b 20000000 <_ftext>
+[ 0-9a-f]+: f85ffffd bnezc v0,20000000 <start>
+[ 0-9a-f]+: ec4ffffd lwpc v0,20000000 <start>
+[ 0-9a-f]+: ec5bfffe ldpc v0,20000000 <start>
+[ 0-9a-f]+: cbfffffa bc 20000000 <start>
+[ 0-9a-f]+: 1000fff9 b 20000000 <start>
[ 0-9a-f]+: 00000000 nop
-[ 0-9a-f]+: 0411fff7 bal 20000000 <_ftext>
+[ 0-9a-f]+: 0411fff7 bal 20000000 <start>
[ 0-9a-f]+: 3c...... lui a0,0x....
-[ 0-9a-f]+: 0c000000 jal 20000000 <_ftext>
+[ 0-9a-f]+: 0c000000 jal 20000000 <start>
[ 0-9a-f]+: 00000000 nop
-[ 0-9a-f]+: 08000000 j 20000000 <_ftext>
+[ 0-9a-f]+: 08000000 j 20000000 <start>
[ 0-9a-f]+: 00000000 nop
[0-9a-f]+ <micro>:
-[ 0-9a-f]+: 8e63 beqz a0,20000000 <_ftext>
+[ 0-9a-f]+: 8e63 beqz a0,20000000 <start>
[ 0-9a-f]+: 0c00 nop
-[ 0-9a-f]+: cfe1 b 20000000 <_ftext>
+[ 0-9a-f]+: cfe1 b 20000000 <start>
[ 0-9a-f]+: 0c00 nop
-[ 0-9a-f]+: 9400 ffde b 20000000 <_ftext>
+[ 0-9a-f]+: 9400 ffde b 20000000 <start>
[ 0-9a-f]+: 0c00 nop
-[ 0-9a-f]+: 4060 ffdb bal 20000000 <_ftext>
+[ 0-9a-f]+: 4060 ffdb bal 20000000 <start>
[ 0-9a-f]+: 0000 0000 nop
-[ 0-9a-f]+: f400 0000 jal 20000000 <_ftext>
+[ 0-9a-f]+: f400 0000 jal 20000000 <start>
[ 0-9a-f]+: 0000 0000 nop
-[ 0-9a-f]+: d400 0000 j 20000000 <_ftext>
+[ 0-9a-f]+: d400 0000 j 20000000 <start>
[ 0-9a-f]+: 0c00 nop
[0-9a-f]+ <mips16>:
-[ 0-9a-f]+: f7df 1010 b 20000000 <_ftext>
-[ 0-9a-f]+: 1800 0000 jal 20000000 <_ftext>
+[ 0-9a-f]+: f7df 1010 b 20000000 <start>
+[ 0-9a-f]+: 1800 0000 jal 20000000 <start>
[ 0-9a-f]+: 6500 nop
#pass
.module mips64r6
.globl start
+ .type start, @function
.weak foo
start:
.set noreorder
[ ]*[a-f0-9]+: 48 8d 05 ([0-9a-f]{2} ){4} * lea -0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <foo>
[ ]*[a-f0-9]+: 4c 8d 1d ([0-9a-f]{2} ){4} * lea 0x[a-f0-9]+\(%rip\),%r11 # [a-f0-9]+ <bar>
[ ]*[a-f0-9]+: 48 8d 05 ([0-9a-f]{2} ){4} * lea 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <__start_my_section>
-[ ]*[a-f0-9]+: 4c 8d 1d ([0-9a-f]{2} ){4} * lea 0x[a-f0-9]+\(%rip\),%r11 # [a-f0-9]+ <__stop_my_section>
+[ ]*[a-f0-9]+: 4c 8d 1d ([0-9a-f]{2} ){4} * lea 0x[a-f0-9]+\(%rip\),%r11 # [a-f0-9]+ <(__stop_my_section|pad)>
#pass