[PATCH] Fix type and alignment of ARM/Thumb EABI mapping symbols

Julian Brown julian@codesourcery.com
Wed Mar 30 15:31:00 GMT 2005


Richard Earnshaw wrote:
> On Sun, 2005-03-27 at 21:25, Julian Brown wrote:
> 
>>Hi,
>>
>>This patch fixes two problems: the type of mapping symbols is made 
>>STT_NOTYPE (from STT_FUNC or STT_OBJECT from ARM/Thumb or data 
>>respectively), and the alignment is corrected to not have the low bit 
>>set for Thumb mapping symbols, in accordance with the latest version of 
>>the ARM AAELF spec.
>>
>>Unfortunately altering the symbol type to STT_NOTYPE for mapping symbols 
>>affects the output of disassembly from objdump. $a and $t were 
>>previously treated as functions. When objdump tried to find the closest 
>>symbol for possibly-symbol-relative offsets previously, it found those 
>>mapping symbols since compare_symbols places functions first in a sorted 
>>version of the symbol table. They were then rejected by the 
>>symbol_is_valid hook (arm_symbol_is_valid) from the disassemble_info 
>>struct, and the section name was printed instead.
>>
>>When the type of mapping symbols is changed to STT_NOTYPE, they are no 
>>longer placed first in the sorted symbol list, so another symbol is used 
>>instead. This causes test regressions, e.g. a symbol-offset address 
>>which was previously output as:
>>
>>   bl      8224 <.text-0xc>
>>
>>was output instead as:
>>
>>   bl      8224 <_start-0xc>
>>
>>In the interest of preserving existing behaviour, I have fixed this by 
>>adding a new disassemble_info hook which allows the symbol table used 
>>for disassembly to have a target-specific hook for altering each symbol 
>>(or remove it) in the remove_useless_symbols function. This sets the 
>>BSF_FUNCTION flag for mapping symbols, which makes things behave the way 
>>they used to, and possibly provides useful functionality for other 
>>platforms as well.
>>
>>It may be better to just change the expected test output instead. Thoughts?
>>
> 
> 
> I think the tests should be fixed.  Other targets (those that don't have
> mapping symbols) would almost certainly output _start in the example
> above, so the existing behaviour should be considered undesirable at
> best and probably just buggy.
> 
> That should allow you to simplify your patch so that you don't need to
> touch MI parts.

OK, this is a simpler version of the patch which alters the expected 
test output instead (only ARM-specific code is now touched).

Tested with cross to arm-none-eabi and arm-none-symbianelf, and with all 
targets on i686-pc-linux-gnu. OK to apply?

ChangeLog:

   * bfd/elf32-arm.c (arm_elf_find_function): Include STT_NOTYPE in test
   for mapping symbols.
   * gas/config/tc-arm.c (mapping_state): Update documentation in
   function comment. Change type of mapping symbols to BSF_NO_TYPE.
   (is_arm_mapping_symbol_name): New function.
   (arm_adjust_symtab): Don't change type of mapping symbols here.
   * gas/testsuite/gas/arm/mapping.d: Update expected output.
   * ld/testsuite/ld-arm/arm-app-abs32.d: Likewise.
   * ld/testsuite/ld-arm/arm-app.d: Likewise.
   * ld/testsuite/ld-arm/mixed-app.d: Likewise.
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: patch-4
URL: <https://sourceware.org/pipermail/binutils/attachments/20050330/9ea93174/attachment.ksh>


More information about the Binutils mailing list