diff options
author | Julian Brown <julian@codesourcery.com> | 2005-03-30 17:28:28 +0000 |
---|---|---|
committer | Julian Brown <julian@codesourcery.com> | 2005-03-30 17:28:28 +0000 |
commit | 5db1eb022012f321e403daea5866ae7c8d7ad881 (patch) | |
tree | 93ffaa9f5a1cc9759cfceb36fa81c41b43dd7208 | |
parent | f4b5533473dc6fd9479a4a0df8d5dc422df1794f (diff) | |
download | gdb-5db1eb022012f321e403daea5866ae7c8d7ad881.zip gdb-5db1eb022012f321e403daea5866ae7c8d7ad881.tar.gz gdb-5db1eb022012f321e403daea5866ae7c8d7ad881.tar.bz2 |
* bfd/bfd-in.h (bfd_is_arm_mapping_symbol_name): Add prototype.binutils-csl-arm-2005q1a
* bfd/bfd-in2.h: Regenerate.
* bfd/elf32-arm.c (elf32_arm_is_target_special_symbol): Rename call to
bfd_is_arm_mapping_symbol_name.
(elf32_arm_output_symbol_hook): Likewise.
(arm_elf_find_function): Likewise, and include STT_NOTYPE in test for
mapping symbols.
(is_arm_mapping_symbol_name): Function moved from here...
* bfd/cpu-arm.c (bfd_is_arm_mapping_symbol_name): ...to here,
renamed and made global.
* gas/config/tc-arm.c (mapping_state): Change documentation in
function comment to cross-reference spec instead. Change type of
mapping symbols to BSF_NO_TYPE.
(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.
-rw-r--r-- | bfd/ChangeLog | 13 | ||||
-rw-r--r-- | bfd/bfd-in.h | 4 | ||||
-rw-r--r-- | bfd/bfd-in2.h | 4 | ||||
-rw-r--r-- | bfd/cpu-arm.c | 10 | ||||
-rw-r--r-- | bfd/elf32-arm.c | 17 | ||||
-rw-r--r-- | gas/ChangeLog | 7 | ||||
-rw-r--r-- | gas/config/tc-arm.c | 100 | ||||
-rw-r--r-- | gas/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gas/testsuite/gas/arm/mapping.d | 8 | ||||
-rw-r--r-- | ld/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | ld/testsuite/ld-arm/arm-app-abs32.d | 2 | ||||
-rw-r--r-- | ld/testsuite/ld-arm/arm-app.d | 4 | ||||
-rw-r--r-- | ld/testsuite/ld-arm/mixed-app.d | 6 |
13 files changed, 81 insertions, 106 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index b29e7c6..9efe3cf 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,16 @@ +2005-03-30 Julian Brown <julian@codesourcery.com> + + * bfd-in.h (bfd_is_arm_mapping_symbol_name): Add prototype. + * bfd-in2.h: Regenerate. + * elf32-arm.c (elf32_arm_is_target_special_symbol): Rename call to + bfd_is_arm_mapping_symbol_name. + (elf32_arm_output_symbol_hook): Likewise. + (arm_elf_find_function): Likewise, and include STT_NOTYPE in test for + mapping symbols. + (is_arm_mapping_symbol_name): Function moved from here... + * cpu-arm.c (bfd_is_arm_mapping_symbol_name): ...to here, renamed and + made global. + 2005-03-22 Bob Wilson <bob.wilson@acm.org> * xtensa-isa.c (xtensa_opcode_lookup, xtensa_state_lookup, diff --git a/bfd/bfd-in.h b/bfd/bfd-in.h index 37c6386..32764d7 100644 --- a/bfd/bfd-in.h +++ b/bfd/bfd-in.h @@ -821,6 +821,10 @@ extern bfd_boolean bfd_elf32_arm_get_bfd_for_interworking extern bfd_boolean bfd_elf32_arm_add_glue_sections_to_bfd (bfd *, struct bfd_link_info *); +/* ELF ARM mapping symbol support */ +extern bfd_boolean bfd_is_arm_mapping_symbol_name + (const char * name); + /* ARM Note section processing. */ extern bfd_boolean bfd_arm_merge_machines (bfd *, bfd *); diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h index ad89096..6a80f74 100644 --- a/bfd/bfd-in2.h +++ b/bfd/bfd-in2.h @@ -828,6 +828,10 @@ extern bfd_boolean bfd_elf32_arm_get_bfd_for_interworking extern bfd_boolean bfd_elf32_arm_add_glue_sections_to_bfd (bfd *, struct bfd_link_info *); +/* ELF ARM mapping symbol support */ +extern bfd_boolean bfd_is_arm_mapping_symbol_name + (const char * name); + /* ARM Note section processing. */ extern bfd_boolean bfd_arm_merge_machines (bfd *, bfd *); diff --git a/bfd/cpu-arm.c b/bfd/cpu-arm.c index cd7c7a6..8cc52e5 100644 --- a/bfd/cpu-arm.c +++ b/bfd/cpu-arm.c @@ -400,3 +400,13 @@ bfd_arm_get_mach_from_notes (bfd *abfd, const char *note_section) free (buffer); return bfd_mach_arm_unknown; } + +bfd_boolean +bfd_is_arm_mapping_symbol_name (const char * name) +{ + return (name != NULL) + && (name[0] == '$') + && ((name[1] == 'a') || (name[1] == 't') || (name[1] == 'd')) + && (name[2] == 0); +} + diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c index 7a2afe9..d2d5134 100644 --- a/bfd/elf32-arm.c +++ b/bfd/elf32-arm.c @@ -4719,21 +4719,12 @@ elf32_arm_check_relocs (bfd *abfd, struct bfd_link_info *info, return TRUE; } -static bfd_boolean -is_arm_mapping_symbol_name (const char * name) -{ - return (name != NULL) - && (name[0] == '$') - && ((name[1] == 'a') || (name[1] == 't') || (name[1] == 'd')) - && (name[2] == 0); -} - /* Treat mapping symbols as special target symbols. */ static bfd_boolean elf32_arm_is_target_special_symbol (bfd * abfd ATTRIBUTE_UNUSED, asymbol * sym) { - return is_arm_mapping_symbol_name (sym->name); + return bfd_is_arm_mapping_symbol_name (sym->name); } /* This is a copy of elf_find_function() from elf.c except that @@ -4768,12 +4759,12 @@ arm_elf_find_function (bfd * abfd ATTRIBUTE_UNUSED, break; case STT_FUNC: case STT_ARM_TFUNC: + case STT_NOTYPE: /* Skip $a and $t symbols. */ if ((q->symbol.flags & BSF_LOCAL) - && is_arm_mapping_symbol_name (q->symbol.name)) + && bfd_is_arm_mapping_symbol_name (q->symbol.name)) continue; /* Fall through. */ - case STT_NOTYPE: if (bfd_get_section (&q->symbol) == section && q->symbol.value >= low_func && q->symbol.value <= offset) @@ -6098,7 +6089,7 @@ elf32_arm_output_symbol_hook (struct bfd_link_info *info, return TRUE; /* We only want mapping symbols. */ - if (! is_arm_mapping_symbol_name (name)) + if (! bfd_is_arm_mapping_symbol_name (name)) return TRUE; mapcount = ++(elf32_arm_section_data (input_sec)->mapcount); diff --git a/gas/ChangeLog b/gas/ChangeLog index 5bef95e..949a3ca 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,10 @@ +2005-03-30 Julian Brown <julian@codesourcery.com> + + * config/tc-arm.c (mapping_state): Change documentation in function + comment to cross-reference spec instead. Change type of mapping symbols + to BSF_NO_TYPE. + (arm_adjust_symtab): Don't change type of mapping symbols here. + 2005-03-29 Julian Brown <julian@codesourcery.com> * config/tc-arm.c (marked_pr_dependency): New bitmap, bit N indicates diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c index 78d126c..298468f 100644 --- a/gas/config/tc-arm.c +++ b/gas/config/tc-arm.c @@ -1243,78 +1243,9 @@ validate_offset_imm (unsigned int val, int hwse) #ifdef OBJ_ELF /* This code is to handle mapping symbols as defined in the ARM ELF spec. - (This text is taken from version B-02 of the spec): - - 4.4.7 Mapping and tagging symbols - - A section of an ARM ELF file can contain a mixture of ARM code, - Thumb code, and data. There are inline transitions between code - and data at literal pool boundaries. There can also be inline - transitions between ARM code and Thumb code, for example in - ARM-Thumb inter-working veneers. Linkers, machine-level - debuggers, profiling tools, and disassembly tools need to map - images accurately. For example, setting an ARM breakpoint on a - Thumb location, or in a literal pool, can crash the program - being debugged, ruining the debugging session. - - ARM ELF entities are mapped (see section 4.4.7.1 below) and - tagged (see section 4.4.7.2 below) using local symbols (with - binding STB_LOCAL). To assist consumers, mapping and tagging - symbols should be collated first in the symbol table, before - other symbols with binding STB_LOCAL. - - To allow properly collated mapping and tagging symbols to be - skipped by consumers that have no interest in them, the first - such symbol should have the name $m and its st_value field equal - to the total number of mapping and tagging symbols (including - the $m) in the symbol table. - - 4.4.7.1 Mapping symbols - - $a Labels the first byte of a sequence of ARM instructions. - Its type is STT_FUNC. - - $d Labels the first byte of a sequence of data items. - Its type is STT_OBJECT. - - $t Labels the first byte of a sequence of Thumb instructions. - Its type is STT_FUNC. - - This list of mapping symbols may be extended in the future. - - Section-relative mapping symbols - - Mapping symbols defined in a section define a sequence of - half-open address intervals that cover the address range of the - section. Each interval starts at the address defined by a - mapping symbol, and continues up to, but not including, the - address defined by the next (in address order) mapping symbol or - the end of the section. A corollary is that there must be a - mapping symbol defined at the beginning of each section. - Consumers can ignore the size of a section-relative mapping - symbol. Producers can set it to 0. - - Absolute mapping symbols - - Because of the need to crystallize a Thumb address with the - Thumb-bit set, absolute symbol of type STT_FUNC (symbols of type - STT_FUNC defined in section SHN_ABS) need to be mapped with $a - or $t. - - The extent of a mapping symbol defined in SHN_ABS is [st_value, - st_value + st_size), or [st_value, st_value + 1) if st_size = 0, - where [x, y) denotes the half-open address range from x, - inclusive, to y, exclusive. - - In the absence of a mapping symbol, a consumer can interpret a - function symbol with an odd value as the Thumb code address - obtained by clearing the least significant bit of the - value. This interpretation is deprecated, and it may not work in - the future. - - Note - the Tagging symbols ($b, $f, $p $m) have been dropped from - the EABI (which is still under development), so they are not - implemented here. */ + (See "Mapping symbols", section 4.5.5, ARM AAELF version 1.0). + Note that previously, $a and $t has type STT_FUNC (BSF_OBJECT flag), + and $d has type STT_OBJECT (BSF_OBJECT flag). Now all three are untyped. */ static enum mstate mapstate = MAP_UNDEFINED; @@ -1336,15 +1267,15 @@ mapping_state (enum mstate state) { case MAP_DATA: symname = "$d"; - type = BSF_OBJECT; + type = BSF_NO_FLAGS; break; case MAP_ARM: symname = "$a"; - type = BSF_FUNCTION; + type = BSF_NO_FLAGS; break; case MAP_THUMB: symname = "$t"; - type = BSF_FUNCTION; + type = BSF_NO_FLAGS; break; case MAP_UNDEFINED: return; @@ -13738,14 +13669,17 @@ arm_adjust_symtab (void) elf_sym = elf_symbol (symbol_get_bfdsym (sym)); bind = ELF_ST_BIND (elf_sym->internal_elf_sym.st_info); - /* If it's a .thumb_func, declare it as so, - otherwise tag label as .code 16. */ - if (THUMB_IS_FUNC (sym)) - elf_sym->internal_elf_sym.st_info = - ELF_ST_INFO (bind, STT_ARM_TFUNC); - else - elf_sym->internal_elf_sym.st_info = - ELF_ST_INFO (bind, STT_ARM_16BIT); + if (! bfd_is_arm_mapping_symbol_name (elf_sym->symbol.name)) + { + /* If it's a .thumb_func, declare it as so, + otherwise tag label as .code 16. */ + if (THUMB_IS_FUNC (sym)) + elf_sym->internal_elf_sym.st_info = + ELF_ST_INFO (bind, STT_ARM_TFUNC); + else + elf_sym->internal_elf_sym.st_info = + ELF_ST_INFO (bind, STT_ARM_16BIT); + } } } #endif diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index 68f1667..e307a6d 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2005-03-30 Julian Brown <julian@codesourcery.com> + + * gas/arm/mapping.d: Update expected output due to mapping symbols + being untyped. + 2005-03-23 Alan Modra <amodra@bigpond.net.au> * gas/elf/section5.s: Don't start directives in first column. diff --git a/gas/testsuite/gas/arm/mapping.d b/gas/testsuite/gas/arm/mapping.d index 9a79759..3a0ac1a 100644 --- a/gas/testsuite/gas/arm/mapping.d +++ b/gas/testsuite/gas/arm/mapping.d @@ -9,10 +9,10 @@ SYMBOL TABLE: 0+00 l d .text 0+0 (|.text) 0+00 l d .data 0+0 (|.data) 0+00 l d .bss 0+0 (|.bss) -0+00 l F .text 0+0 \$a -0+08 l F .text 0+0 \$t -0+00 l O .data 0+0 \$d +0+00 l .text 0+0 \$a +0+08 l .text 0+0 \$t +0+00 l .data 0+0 \$d 0+00 l d foo 0+0 (|foo) -0+00 l F foo 0+0 \$t +0+00 l foo 0+0 \$t 0+00 g .text 0+0 mapping 0+08 g F .text 0+0 thumb_mapping diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index 5aa3a95..f245c01 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2005-03-30 Julian Brown <julian@codesourcery.com> + + * ld-arm/arm-app-abs32.d: Update expected output due to mapping symbols + being untyped. + * ld-arm/arm-app.d: Likewise. + * ld-arm/mixed-app.d: Likewise. + 2005-03-24 Mark Mitchell <mark@codesourcery.com> * config/default.exp: Do not load libpath.exp if it does not diff --git a/ld/testsuite/ld-arm/arm-app-abs32.d b/ld/testsuite/ld-arm/arm-app-abs32.d index f69ed8f..9a4da22 100644 --- a/ld/testsuite/ld-arm/arm-app-abs32.d +++ b/ld/testsuite/ld-arm/arm-app-abs32.d @@ -8,7 +8,7 @@ Disassembly of section .plt: .* <.plt>: .*: e52de004 str lr, \[sp, #-4\]! - .*: e59fe004 ldr lr, \[pc, #4\] ; .* <.plt\+0x10> + .*: e59fe004 ldr lr, \[pc, #4\] ; .* <_start-0x10> .*: e08fe00e add lr, pc, lr .*: e5bef008 ldr pc, \[lr, #8\]! .*: .* .* diff --git a/ld/testsuite/ld-arm/arm-app.d b/ld/testsuite/ld-arm/arm-app.d index 80bed98..207961e 100644 --- a/ld/testsuite/ld-arm/arm-app.d +++ b/ld/testsuite/ld-arm/arm-app.d @@ -8,7 +8,7 @@ Disassembly of section .plt: .* <.plt>: .*: e52de004 str lr, \[sp, #-4\]! - .*: e59fe004 ldr lr, \[pc, #4\] ; .* <.plt\+0x10> + .*: e59fe004 ldr lr, \[pc, #4\] ; .* <_start-0x10> .*: e08fe00e add lr, pc, lr .*: e5bef008 ldr pc, \[lr, #8\]! .*: .* @@ -27,7 +27,7 @@ Disassembly of section .text: .* <app_func>: .*: e1a0c00d mov ip, sp .*: e92dd800 stmdb sp!, {fp, ip, lr, pc} - .*: ebfffff4 bl .* <.text-0xc> + .*: ebfffff4 bl .* <_start-0xc> .*: e89d6800 ldmia sp, {fp, sp, lr} .*: e12fff1e bx lr diff --git a/ld/testsuite/ld-arm/mixed-app.d b/ld/testsuite/ld-arm/mixed-app.d index 0774f77..2386bb3 100644 --- a/ld/testsuite/ld-arm/mixed-app.d +++ b/ld/testsuite/ld-arm/mixed-app.d @@ -8,7 +8,7 @@ Disassembly of section .plt: .* <.plt>: .*: e52de004 str lr, \[sp, #-4\]! - .*: e59fe004 ldr lr, \[pc, #4\] ; .* <.plt\+0x10> + .*: e59fe004 ldr lr, \[pc, #4\] ; .* <_start-0x2c> .*: e08fe00e add lr, pc, lr .*: e5bef008 ldr pc, \[lr, #8\]! .*: .* @@ -34,7 +34,7 @@ Disassembly of section .text: .* <app_func>: .*: e1a0c00d mov ip, sp .*: e92dd800 stmdb sp!, {fp, ip, lr, pc} - .*: ebffffe. bl .* <.text-0x..> + .*: ebffffe. bl .* <_start-0x..> .*: e89d6800 ldmia sp, {fp, sp, lr} .*: e12fff1e bx lr .*: e1a00000 nop \(mov r0,r0\) @@ -49,7 +49,7 @@ Disassembly of section .text: .* <app_tfunc>: .*: b500 push {lr} - .*: (ffc.f7ff|f7ffffc.) bl .* <.text-0x..> + .*: (ffc.f7ff|f7ffffc.) bl .* <_start-0x..> .*: bd00 pop {pc} .*: 4770 bx lr .*: 46c0 nop \(mov r8, r8\) |