summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bfd/ChangeLog13
-rw-r--r--bfd/bfd-in.h4
-rw-r--r--bfd/bfd-in2.h4
-rw-r--r--bfd/cpu-arm.c10
-rw-r--r--bfd/elf32-arm.c17
-rw-r--r--gas/ChangeLog7
-rw-r--r--gas/config/tc-arm.c100
-rw-r--r--gas/testsuite/ChangeLog5
-rw-r--r--gas/testsuite/gas/arm/mapping.d8
-rw-r--r--ld/testsuite/ChangeLog7
-rw-r--r--ld/testsuite/ld-arm/arm-app-abs32.d2
-rw-r--r--ld/testsuite/ld-arm/arm-app.d4
-rw-r--r--ld/testsuite/ld-arm/mixed-app.d6
13 files changed, 81 insertions, 106 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index b29e7c6bfe..9efe3cf1a9 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 37c6386632..32764d7dff 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 ad8909699c..6a80f74d00 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 cd7c7a6557..8cc52e5ca0 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 7a2afe9cba..d2d51345a7 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 5bef95e7b4..949a3ca924 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 78d126c749..298468fd01 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 68f166783c..e307a6d7c4 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 9a79759789..3a0ac1a552 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 5aa3a95139..f245c01ddd 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 f69ed8f9ee..9a4da22b33 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 80bed981c7..207961ea0f 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 0774f7745c..2386bb3c75 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\)