Fix ARM objdump mapping symbols bug with multiple sections
Joseph S. Myers
joseph@codesourcery.com
Mon Mar 30 14:43:00 GMT 2009
More information about the Binutils mailing list
Mon Mar 30 14:43:00 GMT 2009
- Previous message (by thread): powerpc __tls_get_addr call optimization
- Next message (by thread): error building trunk with gcc trunk
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
When objdump searches for mapping symbols on ARM EABI to determine whether to treat bytes being disassembled as code or as data, it has both a forwards and a backwards search for mapping symbols from a current symbol table location. The forwards search makes sure that mapping symbols for other sections are ignored. The backwards search is missing this check. Thus in cases with multiple sections with mapping symbols, as shown in the included testcase, disassembly can be incorrect; in this testcase the last instruction of f1 (the instruction after symbol f1a) is wrongly disassembled as data without this patch. This patch adds the same check on the section to the backwards search as in the forwards search. Tested with no regressions with cross to arm-none-eabi. Approved off-list by Daniel; committed to mainline. gas/testsuite: 2009-03-30 Joseph Myers <joseph@codesourcery.com> * gas/arm/mapsecs.d, gas/arm/mapsecs.s: New. opcodes: 2009-03-30 Joseph Myers <joseph@codesourcery.com> * arm-dis.c (print_insn): Also check section matches in backwards search for mapping symbol. Index: gas/testsuite/gas/arm/mapsecs.d =================================================================== RCS file: gas/testsuite/gas/arm/mapsecs.d diff -N gas/testsuite/gas/arm/mapsecs.d --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ gas/testsuite/gas/arm/mapsecs.d 30 Mar 2009 14:38:02 -0000 @@ -0,0 +1,45 @@ +#as: -EL +#objdump: --syms --special-syms -d +#name: ARM Mapping Symbols with multiple sections +# This test is only valid on EABI based ports. +#target: *-*-*eabi *-*-symbianelf *-*-linux-* *-*-elf +#source: mapsecs.s + + +.*: +file format .*arm.* + +SYMBOL TABLE: +0+00 l d .text 00000000 .text +0+00 l d .data 00000000 .data +0+00 l d .bss 00000000 .bss +0+00 l d .text.f1 00000000 .text.f1 +0+00 l F .text.f1 00000000 f1 +0+00 l .text.f1 00000000 \$a +0+08 l .text.f1 00000000 f1a +0+00 l d .text.f2 00000000 .text.f2 +0+00 l F .text.f2 00000000 f2 +0+00 l .text.f2 00000000 \$a +0+04 l .text.f2 00000000 \$d +0+08 l .text.f2 00000000 f2a +0+08 l .text.f2 00000000 \$a +0+00 l d .ARM.attributes 00000000 .ARM.attributes + + + +Disassembly of section .text.f1: + +00000000 <f1>: + 0: e1a00000 nop \(mov r0,r0\) + 4: e1a00000 nop \(mov r0,r0\) + +00000008 <f1a>: + 8: e1a00000 nop \(mov r0,r0\) + +Disassembly of section .text.f2: + +00000000 <f2>: + 0: e1a00000 nop \(mov r0,r0\) + 4: 00000001 .word 0x00000001 + +00000008 <f2a>: + 8: e1a00000 nop \(mov r0,r0\) Index: gas/testsuite/gas/arm/mapsecs.s =================================================================== RCS file: gas/testsuite/gas/arm/mapsecs.s diff -N gas/testsuite/gas/arm/mapsecs.s --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ gas/testsuite/gas/arm/mapsecs.s 30 Mar 2009 14:38:02 -0000 @@ -0,0 +1,15 @@ + .text + .section .text.f1,"ax",%progbits + .type f1, %function +f1: + nop + nop +f1a: + nop + .section .text.f2,"ax",%progbits + .type f2, %function +f2: + nop + .word 1 +f2a: + nop Index: opcodes/arm-dis.c =================================================================== RCS file: /cvs/src/src/opcodes/arm-dis.c,v retrieving revision 1.93 diff -u -r1.93 arm-dis.c --- opcodes/arm-dis.c 23 Feb 2009 14:58:34 -0000 1.93 +++ opcodes/arm-dis.c 30 Mar 2009 14:38:04 -0000 @@ -4041,7 +4041,9 @@ for a preceeding one. */ for (; n >= 0; n--) { - if (get_sym_code_type (info, n, &type)) + if ((info->section == NULL + || info->section == info->symtab[n]->section) + && get_sym_code_type (info, n, &type)) { last_sym = n; found = TRUE; -- Joseph S. Myers joseph@codesourcery.com
- Previous message (by thread): powerpc __tls_get_addr call optimization
- Next message (by thread): error building trunk with gcc trunk
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Binutils mailing list