Prefer object over notype symbols when disassembling
Changing objdump disassembly output like this always requires some testsuite changes, with the avr and x64_64 changes simply due to picking up better symbols, the whole point of the patch. The mips changes are due to mips-sgi-irix changing STT_NOTYPE symbols to STT_OBJECT, which objdump now chooses in preference to script symbols. The problem is that objdump looks at the first symbol in the section being disassembled, and if object type, just dumps out bytes rather than disassembling. This results in new failures: FAIL: JAL overflow 2 FAIL: undefined weak symbol overflow FAIL: undefined weak symbol overflow (n32) FAIL: undefined weak symbol overflow (n64) So for mips-sgi-irix function symbols really do need to be function type. I fixed a few more than just the required minimum to avoid the above test fails. binutils/ * 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. ld/ * 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.
This commit is contained in:
parent
260bcd09bf
commit
660df28acf
43 changed files with 164 additions and 41 deletions
|
@ -1,3 +1,14 @@
|
||||||
|
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>
|
2019-12-17 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
* testsuite/binutils-all/objcopy.exp: Remove tic80 support.
|
* testsuite/binutils-all/objcopy.exp: Remove tic80 support.
|
||||||
|
|
|
@ -803,6 +803,8 @@ remove_useless_symbols (asymbol **symbols, long count)
|
||||||
return out_ptr - symbols;
|
return out_ptr - symbols;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const asection *compare_section;
|
||||||
|
|
||||||
/* Sort symbols into value order. */
|
/* Sort symbols into value order. */
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -814,8 +816,7 @@ compare_symbols (const void *ap, const void *bp)
|
||||||
const char *bn;
|
const char *bn;
|
||||||
size_t anl;
|
size_t anl;
|
||||||
size_t bnl;
|
size_t bnl;
|
||||||
bfd_boolean af;
|
bfd_boolean as, af, bs, bf;
|
||||||
bfd_boolean bf;
|
|
||||||
flagword aflags;
|
flagword aflags;
|
||||||
flagword bflags;
|
flagword bflags;
|
||||||
|
|
||||||
|
@ -824,10 +825,16 @@ compare_symbols (const void *ap, const void *bp)
|
||||||
else if (bfd_asymbol_value (a) < bfd_asymbol_value (b))
|
else if (bfd_asymbol_value (a) < bfd_asymbol_value (b))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (a->section > b->section)
|
/* Prefer symbols from the section currently being disassembled.
|
||||||
return 1;
|
Don't sort symbols from other sections by section, since there
|
||||||
else if (a->section < b->section)
|
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;
|
return -1;
|
||||||
|
if (!as && bs)
|
||||||
|
return 1;
|
||||||
|
|
||||||
an = bfd_asymbol_name (a);
|
an = bfd_asymbol_name (a);
|
||||||
bn = bfd_asymbol_name (b);
|
bn = bfd_asymbol_name (b);
|
||||||
|
@ -853,7 +860,8 @@ compare_symbols (const void *ap, const void *bp)
|
||||||
|
|
||||||
#define file_symbol(s, sn, snl) \
|
#define file_symbol(s, sn, snl) \
|
||||||
(((s)->flags & BSF_FILE) != 0 \
|
(((s)->flags & BSF_FILE) != 0 \
|
||||||
|| ((sn)[(snl) - 2] == '.' \
|
|| ((snl) > 2 \
|
||||||
|
&& (sn)[(snl) - 2] == '.' \
|
||||||
&& ((sn)[(snl) - 1] == 'o' \
|
&& ((sn)[(snl) - 1] == 'o' \
|
||||||
|| (sn)[(snl) - 1] == 'a')))
|
|| (sn)[(snl) - 1] == 'a')))
|
||||||
|
|
||||||
|
@ -865,8 +873,8 @@ compare_symbols (const void *ap, const void *bp)
|
||||||
if (! af && bf)
|
if (! af && bf)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
/* Try to sort global symbols before local symbols before function
|
/* Sort function and object symbols before global symbols before
|
||||||
symbols before debugging symbols. */
|
local symbols before section symbols before debugging symbols. */
|
||||||
|
|
||||||
aflags = a->flags;
|
aflags = a->flags;
|
||||||
bflags = b->flags;
|
bflags = b->flags;
|
||||||
|
@ -878,6 +886,13 @@ compare_symbols (const void *ap, const void *bp)
|
||||||
else
|
else
|
||||||
return -1;
|
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) != (bflags & BSF_FUNCTION))
|
||||||
{
|
{
|
||||||
if ((aflags & BSF_FUNCTION) != 0)
|
if ((aflags & BSF_FUNCTION) != 0)
|
||||||
|
@ -885,6 +900,13 @@ compare_symbols (const void *ap, const void *bp)
|
||||||
else
|
else
|
||||||
return 1;
|
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) != (bflags & BSF_LOCAL))
|
||||||
{
|
{
|
||||||
if ((aflags & BSF_LOCAL) != 0)
|
if ((aflags & BSF_LOCAL) != 0)
|
||||||
|
@ -1102,14 +1124,11 @@ find_symbol_for_address (bfd_vma vma,
|
||||||
|
|
||||||
/* The symbol we want is now in min, the low end of the range we
|
/* 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
|
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;
|
thisplace = min;
|
||||||
while (thisplace > 0
|
while (thisplace > 0
|
||||||
&& (bfd_asymbol_value (sorted_syms[thisplace])
|
&& (bfd_asymbol_value (sorted_syms[thisplace])
|
||||||
== bfd_asymbol_value (sorted_syms[thisplace - 1]))
|
== bfd_asymbol_value (sorted_syms[thisplace - 1])))
|
||||||
&& ((sorted_syms[thisplace - 1]->flags
|
|
||||||
& (BSF_SECTION_SYM | BSF_DEBUGGING)) == 0)
|
|
||||||
)
|
|
||||||
--thisplace;
|
--thisplace;
|
||||||
|
|
||||||
/* Prefer a symbol in the current section if we have multple symbols
|
/* Prefer a symbol in the current section if we have multple symbols
|
||||||
|
@ -2389,6 +2408,10 @@ disassemble_section (bfd *abfd, asection *section, void *inf)
|
||||||
pinfo->buffer_length = datasize;
|
pinfo->buffer_length = datasize;
|
||||||
pinfo->section = section;
|
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
|
/* Skip over the relocs belonging to addresses below the
|
||||||
start address. */
|
start address. */
|
||||||
while (rel_pp < rel_ppend
|
while (rel_pp < rel_ppend
|
||||||
|
@ -2632,9 +2655,6 @@ disassemble_data (bfd *abfd)
|
||||||
++sorted_symcount;
|
++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);
|
init_disassemble_info (&disasm_info, stdout, (fprintf_ftype) fprintf);
|
||||||
|
|
||||||
disasm_info.application_data = (void *) &aux;
|
disasm_info.application_data = (void *) &aux;
|
||||||
|
|
44
ld/ChangeLog
44
ld/ChangeLog
|
@ -1,3 +1,47 @@
|
||||||
|
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>
|
2019-12-17 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
* testsuite/ld-elf/pr21233-l.sd: Accept OBJECT for type and
|
* testsuite/ld-elf/pr21233-l.sd: Accept OBJECT for type and
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
Disassembly of section .text:
|
Disassembly of section .text:
|
||||||
|
|
||||||
00000000 <main>:
|
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
|
4: 08 2e mov r0, r24
|
||||||
6: 00 0c add r0, r0
|
6: 00 0c add r0, r0
|
||||||
8: 99 0b sbc r25, r25
|
8: 99 0b sbc r25, r25
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
Disassembly of section .text:
|
Disassembly of section .text:
|
||||||
|
|
||||||
00000000 <main>:
|
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>
|
2: 42 a1 lds r20, 0x42 ; 0x800042 <myvar2\+0x1>
|
||||||
4: 53 a1 lds r21, 0x43 ; 0x800043 <_end>
|
4: 53 a1 lds r21, 0x43 ; 0x800043 <_end>
|
||||||
6: 08 95 ret
|
6: 08 95 ret
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
.cfi_personality_id 0x2
|
.cfi_personality_id 0x2
|
||||||
.cfi_lsda 0x1b,.LLSDA3
|
.cfi_lsda 0x1b,.LLSDA3
|
||||||
.global main
|
.global main
|
||||||
|
.type main, @function
|
||||||
main:
|
main:
|
||||||
.LEHB0 = .
|
.LEHB0 = .
|
||||||
jal compact1a
|
jal compact1a
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
.cfi_sections .eh_frame_entry
|
.cfi_sections .eh_frame_entry
|
||||||
.section .text.compact1a,"ax",@progbits
|
.section .text.compact1a,"ax",@progbits
|
||||||
.globl compact1a
|
.globl compact1a
|
||||||
|
.type compact1a, @function
|
||||||
.cfi_startproc
|
.cfi_startproc
|
||||||
compact1a:
|
compact1a:
|
||||||
sw $2,16($fp)
|
sw $2,16($fp)
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
.cfi_sections .eh_frame_entry
|
.cfi_sections .eh_frame_entry
|
||||||
.section .text.compact1b,"ax",@progbits
|
.section .text.compact1b,"ax",@progbits
|
||||||
.globl compact1b
|
.globl compact1b
|
||||||
|
.type compact1b, @function
|
||||||
.cfi_startproc
|
.cfi_startproc
|
||||||
compact1b:
|
compact1b:
|
||||||
lw $31,44($sp)
|
lw $31,44($sp)
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
.cfi_personality_id 0x2
|
.cfi_personality_id 0x2
|
||||||
.cfi_lsda 0x1b,.LLSDA3
|
.cfi_lsda 0x1b,.LLSDA3
|
||||||
.global main
|
.global main
|
||||||
|
.type main, @function
|
||||||
main:
|
main:
|
||||||
.LEHB0 = .
|
.LEHB0 = .
|
||||||
move $4,$2
|
move $4,$2
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
.cfi_personality_id 0x2
|
.cfi_personality_id 0x2
|
||||||
.cfi_lsda 0x1b,.LLSDA3
|
.cfi_lsda 0x1b,.LLSDA3
|
||||||
.global main
|
.global main
|
||||||
|
.type main, @function
|
||||||
main:
|
main:
|
||||||
.LEHB0 = .
|
.LEHB0 = .
|
||||||
move $4,$2
|
move $4,$2
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
.cfi_sections .eh_frame_entry
|
.cfi_sections .eh_frame_entry
|
||||||
.section .text.compact3a,"ax",@progbits
|
.section .text.compact3a,"ax",@progbits
|
||||||
.globl compact3a
|
.globl compact3a
|
||||||
|
.type compact3a, @function
|
||||||
.cfi_startproc
|
.cfi_startproc
|
||||||
compact3a:
|
compact3a:
|
||||||
lw $31,44($sp)
|
lw $31,44($sp)
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
.cfi_personality 0x0,local_pers
|
.cfi_personality 0x0,local_pers
|
||||||
.cfi_lsda 0x0,LSDA
|
.cfi_lsda 0x0,LSDA
|
||||||
.ent f1
|
.ent f1
|
||||||
|
.type f1, @function
|
||||||
f1:
|
f1:
|
||||||
nop
|
nop
|
||||||
.end f1
|
.end f1
|
||||||
|
@ -11,6 +12,7 @@ f1:
|
||||||
.cfi_personality 0x0,hidden_pers
|
.cfi_personality 0x0,hidden_pers
|
||||||
.cfi_lsda 0x0,LSDA
|
.cfi_lsda 0x0,LSDA
|
||||||
.ent f2
|
.ent f2
|
||||||
|
.type f2, @function
|
||||||
f2:
|
f2:
|
||||||
nop
|
nop
|
||||||
.end f2
|
.end f2
|
||||||
|
@ -20,6 +22,7 @@ f2:
|
||||||
.cfi_personality 0x0,global_pers
|
.cfi_personality 0x0,global_pers
|
||||||
.cfi_lsda 0x0,LSDA
|
.cfi_lsda 0x0,LSDA
|
||||||
.ent f3
|
.ent f3
|
||||||
|
.type f3, @function
|
||||||
f3:
|
f3:
|
||||||
nop
|
nop
|
||||||
.end f3
|
.end f3
|
||||||
|
@ -29,6 +32,7 @@ f3:
|
||||||
.cfi_personality 0x0,extern_pers
|
.cfi_personality 0x0,extern_pers
|
||||||
.cfi_lsda 0x0,LSDA
|
.cfi_lsda 0x0,LSDA
|
||||||
.ent f4
|
.ent f4
|
||||||
|
.type f4, @function
|
||||||
f4:
|
f4:
|
||||||
nop
|
nop
|
||||||
.end f4
|
.end f4
|
||||||
|
@ -38,6 +42,7 @@ f4:
|
||||||
.cfi_personality 0x80,local_indirect_ptr
|
.cfi_personality 0x80,local_indirect_ptr
|
||||||
.cfi_lsda 0x0,LSDA
|
.cfi_lsda 0x0,LSDA
|
||||||
.ent f5
|
.ent f5
|
||||||
|
.type f5, @function
|
||||||
f5:
|
f5:
|
||||||
nop
|
nop
|
||||||
.end f5
|
.end f5
|
||||||
|
@ -47,6 +52,7 @@ f5:
|
||||||
.cfi_personality 0x80,hidden_indirect_ptr
|
.cfi_personality 0x80,hidden_indirect_ptr
|
||||||
.cfi_lsda 0x0,LSDA
|
.cfi_lsda 0x0,LSDA
|
||||||
.ent f6
|
.ent f6
|
||||||
|
.type f6, @function
|
||||||
f6:
|
f6:
|
||||||
nop
|
nop
|
||||||
.end f6
|
.end f6
|
||||||
|
@ -56,6 +62,7 @@ f6:
|
||||||
.cfi_personality 0x80,global_indirect_ptr
|
.cfi_personality 0x80,global_indirect_ptr
|
||||||
.cfi_lsda 0x0,LSDA
|
.cfi_lsda 0x0,LSDA
|
||||||
.ent f7
|
.ent f7
|
||||||
|
.type f7, @function
|
||||||
f7:
|
f7:
|
||||||
nop
|
nop
|
||||||
.end f7
|
.end f7
|
||||||
|
@ -65,6 +72,7 @@ f7:
|
||||||
.cfi_personality 0x80,extern_indirect_ptr
|
.cfi_personality 0x80,extern_indirect_ptr
|
||||||
.cfi_lsda 0x0,LSDA
|
.cfi_lsda 0x0,LSDA
|
||||||
.ent f8
|
.ent f8
|
||||||
|
.type f8, @function
|
||||||
f8:
|
f8:
|
||||||
nop
|
nop
|
||||||
.end f8
|
.end f8
|
||||||
|
@ -72,6 +80,7 @@ f8:
|
||||||
|
|
||||||
|
|
||||||
.ent local_pers
|
.ent local_pers
|
||||||
|
.type local_pers, @function
|
||||||
local_pers:
|
local_pers:
|
||||||
nop
|
nop
|
||||||
.end local_pers
|
.end local_pers
|
||||||
|
@ -79,12 +88,14 @@ local_pers:
|
||||||
.globl hidden_pers
|
.globl hidden_pers
|
||||||
.hidden hidden_pers
|
.hidden hidden_pers
|
||||||
.ent hidden_pers
|
.ent hidden_pers
|
||||||
|
.type hidden_pers, @function
|
||||||
hidden_pers:
|
hidden_pers:
|
||||||
nop
|
nop
|
||||||
.end hidden_pers
|
.end hidden_pers
|
||||||
|
|
||||||
.globl global_pers
|
.globl global_pers
|
||||||
.ent global_pers
|
.ent global_pers
|
||||||
|
.type global_pers, @function
|
||||||
global_pers:
|
global_pers:
|
||||||
nop
|
nop
|
||||||
.end global_pers
|
.end global_pers
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
.text
|
.text
|
||||||
.weak __ehdr_start
|
.weak __ehdr_start
|
||||||
.globl __start
|
.globl __start
|
||||||
|
.type __start, @function
|
||||||
.ent __start
|
.ent __start
|
||||||
.frame $29, 0, $31
|
.frame $29, 0, $31
|
||||||
.mask 0x00000000, 0
|
.mask 0x00000000, 0
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
.text
|
.text
|
||||||
.weak __ehdr_start
|
.weak __ehdr_start
|
||||||
.globl __start
|
.globl __start
|
||||||
|
.type __start, @function
|
||||||
.ent __start
|
.ent __start
|
||||||
.frame $29, 0, $31
|
.frame $29, 0, $31
|
||||||
.mask 0x00000000, 0
|
.mask 0x00000000, 0
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
.text
|
.text
|
||||||
.align 4
|
.align 4
|
||||||
.globl _start
|
.globl _start
|
||||||
|
.type _start, @function
|
||||||
_start:
|
_start:
|
||||||
jr $31
|
jr $31
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
# overflowing
|
# overflowing
|
||||||
|
|
||||||
.globl start
|
.globl start
|
||||||
|
.type start, @function
|
||||||
.weak foo
|
.weak foo
|
||||||
start:
|
start:
|
||||||
jal foo
|
jal foo
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
# This file gets linked to start at 0xffffff0, so the call is an overflow.
|
# This file gets linked to start at 0xffffff0, so the call is an overflow.
|
||||||
.text
|
.text
|
||||||
.global start
|
.global start
|
||||||
|
.type start, @function
|
||||||
.set noreorder
|
.set noreorder
|
||||||
start:
|
start:
|
||||||
nop
|
nop
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
.set mips16
|
.set mips16
|
||||||
|
|
||||||
.globl __start
|
.globl __start
|
||||||
|
.type __start, @function
|
||||||
.ent __start
|
.ent __start
|
||||||
.align 4
|
.align 4
|
||||||
__start:
|
__start:
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
.text
|
.text
|
||||||
.align 2
|
.align 2
|
||||||
.globl __start
|
.globl __start
|
||||||
|
.type __start, @function
|
||||||
.set nomips16
|
.set nomips16
|
||||||
.ent __start
|
.ent __start
|
||||||
__start:
|
__start:
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
callpic used21,mips16
|
callpic used21,mips16
|
||||||
|
|
||||||
.globl __start
|
.globl __start
|
||||||
|
.type __start, @function
|
||||||
.ent __start
|
.ent __start
|
||||||
.set nomips16
|
.set nomips16
|
||||||
__start:
|
__start:
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
|
|
||||||
.section .mips16.call.f2, "ax", @progbits
|
.section .mips16.call.f2, "ax", @progbits
|
||||||
.ent __call
|
.ent __call
|
||||||
|
.type __call, @function
|
||||||
__call:
|
__call:
|
||||||
la $25,f2
|
la $25,f2
|
||||||
jr $25
|
jr $25
|
||||||
|
@ -18,6 +19,7 @@ __call:
|
||||||
|
|
||||||
.section .mips16.call.fp.f3, "ax", @progbits
|
.section .mips16.call.fp.f3, "ax", @progbits
|
||||||
.ent __call_fp
|
.ent __call_fp
|
||||||
|
.type __call_fp, @function
|
||||||
__call_fp:
|
__call_fp:
|
||||||
la $25,f3
|
la $25,f3
|
||||||
jr $25
|
jr $25
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
.abicalls
|
.abicalls
|
||||||
.text
|
.text
|
||||||
.globl __start
|
.globl __start
|
||||||
|
.type __start, @function
|
||||||
.ent __start
|
.ent __start
|
||||||
__start:
|
__start:
|
||||||
lui $2,%hi(__gnu_local_gp)
|
lui $2,%hi(__gnu_local_gp)
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
.abicalls
|
.abicalls
|
||||||
.text
|
.text
|
||||||
.globl __start
|
.globl __start
|
||||||
|
.type __start, @function
|
||||||
.ent __start
|
.ent __start
|
||||||
__start:
|
__start:
|
||||||
lui $2,%hi(__gnu_local_gp)
|
lui $2,%hi(__gnu_local_gp)
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
.abicalls
|
.abicalls
|
||||||
.option pic0
|
.option pic0
|
||||||
.global __start
|
.global __start
|
||||||
|
.type __start, @function
|
||||||
.set micromips
|
.set micromips
|
||||||
.ent __start
|
.ent __start
|
||||||
__start:
|
__start:
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
.abicalls
|
.abicalls
|
||||||
.option pic0
|
.option pic0
|
||||||
.global __start
|
.global __start
|
||||||
|
.type __start, @function
|
||||||
.ent __start
|
.ent __start
|
||||||
__start:
|
__start:
|
||||||
jal f1
|
jal f1
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
.abicalls
|
.abicalls
|
||||||
.option pic0
|
.option pic0
|
||||||
.global __start
|
.global __start
|
||||||
|
.type __start, @function
|
||||||
.ent __start
|
.ent __start
|
||||||
__start:
|
__start:
|
||||||
jal foo
|
jal foo
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
.abicalls
|
.abicalls
|
||||||
.option pic0
|
.option pic0
|
||||||
.global __start
|
.global __start
|
||||||
|
.type __start, @function
|
||||||
.ent __start
|
.ent __start
|
||||||
__start:
|
__start:
|
||||||
jal foo
|
jal foo
|
||||||
|
@ -8,6 +9,7 @@ __start:
|
||||||
.end __start
|
.end __start
|
||||||
|
|
||||||
.global ext
|
.global ext
|
||||||
|
.type ext, @function
|
||||||
.ent ext
|
.ent ext
|
||||||
ext:
|
ext:
|
||||||
lui $gp,%hi(__gnu_local_gp)
|
lui $gp,%hi(__gnu_local_gp)
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
.abicalls
|
.abicalls
|
||||||
.option pic0
|
.option pic0
|
||||||
.global __start
|
.global __start
|
||||||
|
.type __start, @function
|
||||||
.ent __start
|
.ent __start
|
||||||
__start:
|
__start:
|
||||||
lui $2,%hi(obj1)
|
lui $2,%hi(obj1)
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
.abicalls
|
.abicalls
|
||||||
.option pic0
|
.option pic0
|
||||||
.global __start
|
.global __start
|
||||||
|
.type __start, @function
|
||||||
.ent __start
|
.ent __start
|
||||||
__start:
|
__start:
|
||||||
lui $2,%hi(foo)
|
lui $2,%hi(foo)
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
.option pic0
|
.option pic0
|
||||||
.set noreorder
|
.set noreorder
|
||||||
.global __start
|
.global __start
|
||||||
|
.type __start, @function
|
||||||
.ent __start
|
.ent __start
|
||||||
__start:
|
__start:
|
||||||
jal f1
|
jal f1
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
.option pic0
|
.option pic0
|
||||||
.set noreorder
|
.set noreorder
|
||||||
.global __start
|
.global __start
|
||||||
|
.type __start, @function
|
||||||
.ent __start
|
.ent __start
|
||||||
__start:
|
__start:
|
||||||
jal f1
|
jal f1
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
.option pic0
|
.option pic0
|
||||||
.set noreorder
|
.set noreorder
|
||||||
.global __start
|
.global __start
|
||||||
|
.type __start, @function
|
||||||
.ent __start
|
.ent __start
|
||||||
__start:
|
__start:
|
||||||
jal f1
|
jal f1
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
.abicalls
|
.abicalls
|
||||||
.global __start
|
.global __start
|
||||||
|
.type __start, @function
|
||||||
.ent __start
|
.ent __start
|
||||||
__start:
|
__start:
|
||||||
jr $31
|
jr $31
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
.globl __start
|
.globl __start
|
||||||
|
.type __start, @function
|
||||||
.space 8
|
.space 8
|
||||||
.ent __start
|
.ent __start
|
||||||
__start:
|
__start:
|
||||||
.Lstart:
|
.Lstart:
|
||||||
.space 16
|
.space 16
|
||||||
|
@ -9,7 +10,7 @@ __start:
|
||||||
jal __start
|
jal __start
|
||||||
.space 64
|
.space 64
|
||||||
jal .Lstart
|
jal .Lstart
|
||||||
.end __start
|
.end __start
|
||||||
|
|
||||||
# make objdump print ...
|
# make objdump print ...
|
||||||
.space 8
|
.space 8
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
.globl _start
|
.globl _start
|
||||||
|
.type _start, @function
|
||||||
.globl sdg
|
.globl sdg
|
||||||
.set noreorder
|
.set noreorder
|
||||||
.ent tstarta
|
.ent tstarta
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
.globl _start
|
.globl _start
|
||||||
|
.type _start, @function
|
||||||
.globl sdg
|
.globl sdg
|
||||||
.set noreorder
|
.set noreorder
|
||||||
.ent tstarta
|
.ent tstarta
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
.text
|
.text
|
||||||
.globl _start
|
.globl _start
|
||||||
|
.type _start, @function
|
||||||
_start:
|
_start:
|
||||||
li.d $f2,1.10000000000000000000e0
|
li.d $f2,1.10000000000000000000e0
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
.text
|
.text
|
||||||
.globl _start
|
.globl _start
|
||||||
|
.type _start, @function
|
||||||
_start:
|
_start:
|
||||||
lw $2, %gp_rel(i)($28)
|
lw $2, %gp_rel(i)($28)
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
.globl __start .text
|
.globl __start .text
|
||||||
|
.type __start, @function
|
||||||
.globl gs .text
|
.globl gs .text
|
||||||
__start:
|
__start:
|
||||||
gs:
|
gs:
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
.globl foo
|
.globl foo
|
||||||
|
.type foo, @function
|
||||||
foo:
|
foo:
|
||||||
.cfi_startproc
|
.cfi_startproc
|
||||||
nop
|
nop
|
||||||
|
|
|
@ -3,38 +3,38 @@
|
||||||
#ld: -Ttext=0x20000000 -e start
|
#ld: -Ttext=0x20000000 -e start
|
||||||
#objdump: -dr --show-raw-insn
|
#objdump: -dr --show-raw-insn
|
||||||
#...
|
#...
|
||||||
[0-9a-f]+ <_ftext>:
|
[0-9a-f]+ <start>:
|
||||||
[ 0-9a-f]+: d85fffff beqzc v0,20000000 <_ftext>
|
[ 0-9a-f]+: d85fffff beqzc v0,20000000 <start>
|
||||||
[ 0-9a-f]+: 00000000 nop
|
[ 0-9a-f]+: 00000000 nop
|
||||||
[ 0-9a-f]+: f85ffffd bnezc v0,20000000 <_ftext>
|
[ 0-9a-f]+: f85ffffd bnezc v0,20000000 <start>
|
||||||
[ 0-9a-f]+: ec4ffffd lwpc v0,20000000 <_ftext>
|
[ 0-9a-f]+: ec4ffffd lwpc v0,20000000 <start>
|
||||||
[ 0-9a-f]+: ec5bfffe ldpc v0,20000000 <_ftext>
|
[ 0-9a-f]+: ec5bfffe ldpc v0,20000000 <start>
|
||||||
[ 0-9a-f]+: cbfffffa bc 20000000 <_ftext>
|
[ 0-9a-f]+: cbfffffa bc 20000000 <start>
|
||||||
[ 0-9a-f]+: 1000fff9 b 20000000 <_ftext>
|
[ 0-9a-f]+: 1000fff9 b 20000000 <start>
|
||||||
[ 0-9a-f]+: 00000000 nop
|
[ 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]+: 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]+: 00000000 nop
|
||||||
[ 0-9a-f]+: 08000000 j 20000000 <_ftext>
|
[ 0-9a-f]+: 08000000 j 20000000 <start>
|
||||||
[ 0-9a-f]+: 00000000 nop
|
[ 0-9a-f]+: 00000000 nop
|
||||||
|
|
||||||
[0-9a-f]+ <micro>:
|
[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]+: 0c00 nop
|
||||||
[ 0-9a-f]+: cfe1 b 20000000 <_ftext>
|
[ 0-9a-f]+: cfe1 b 20000000 <start>
|
||||||
[ 0-9a-f]+: 0c00 nop
|
[ 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]+: 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]+: 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]+: 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]+: 0c00 nop
|
||||||
|
|
||||||
[0-9a-f]+ <mips16>:
|
[0-9a-f]+ <mips16>:
|
||||||
[ 0-9a-f]+: f7df 1010 b 20000000 <_ftext>
|
[ 0-9a-f]+: f7df 1010 b 20000000 <start>
|
||||||
[ 0-9a-f]+: 1800 0000 jal 20000000 <_ftext>
|
[ 0-9a-f]+: 1800 0000 jal 20000000 <start>
|
||||||
[ 0-9a-f]+: 6500 nop
|
[ 0-9a-f]+: 6500 nop
|
||||||
#pass
|
#pass
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
.module mips64r6
|
.module mips64r6
|
||||||
.globl start
|
.globl start
|
||||||
|
.type start, @function
|
||||||
.weak foo
|
.weak foo
|
||||||
start:
|
start:
|
||||||
.set noreorder
|
.set noreorder
|
||||||
|
|
|
@ -14,5 +14,5 @@ Disassembly of section .text:
|
||||||
[ ]*[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]+: 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]+: 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]+: 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
|
#pass
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue