summaryrefslogtreecommitdiff
path: root/bfd/cpu-arm.c
diff options
context:
space:
mode:
authorPaul Brook <paul@codesourcery.com>2006-05-15 19:57:35 +0000
committerPaul Brook <paul@codesourcery.com>2006-05-15 19:57:35 +0000
commit4c22ee9e337faa4f52bc20c643d265fcd129b82f (patch)
tree663e2abfb712c3dabe09ca168092a746b4868401 /bfd/cpu-arm.c
parent476a3e496bd7b1d05e8fbdcd2a1f11597c7ca8cb (diff)
downloadbinutils-redhat-4c22ee9e337faa4f52bc20c643d265fcd129b82f.tar.gz
2006-05-15 Paul Brook <paul@codesourcery.com>
bfd/ * cpu-arm.c (bfd_is_arm_mapping_symbol_name): Rename ... (bfd_is_arm_special_symbol_name): ... to this. Add type argument. Check symbol name is of specified type. * elf32-arm.c (elf32_arm_is_target_special_symbol, arm_elf_find_function, elf32_arm_output_symbol_hook): Use bfd_is_arm_special_symbol_name. * bfd-in.h (BFD_ARM_SPECIAL_SYM_TYPE_MAP, BFD_ARM_SPECIAL_SYM_TYPE_TAG, BFD_ARM_SPECIAL_SYM_TYPE_OTHER, BFD_ARM_SPECIAL_SYM_TYPE_ANY): Define. (bfd_is_arm_mapping_symbol_name): Remove prototype. (bfd_is_arm_special_symbol_name): Add prototype. * bfd-in2.h: Regenerate. gas/ * config/tc-arm.c (arm_adjust_symtab): Use bfd_is_arm_special_symbol_name. ld/testsuite/ * ld-arm/arm-be8.d: New test. * ld-arm/arm-be8.s: New test. * ld-arm/arm-elf.exp: Add arm-be8.
Diffstat (limited to 'bfd/cpu-arm.c')
-rw-r--r--bfd/cpu-arm.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/bfd/cpu-arm.c b/bfd/cpu-arm.c
index 0f0da06097..5c89296c08 100644
--- a/bfd/cpu-arm.c
+++ b/bfd/cpu-arm.c
@@ -402,14 +402,22 @@ bfd_arm_get_mach_from_notes (bfd *abfd, const char *note_section)
}
bfd_boolean
-bfd_is_arm_mapping_symbol_name (const char * name)
+bfd_is_arm_special_symbol_name (const char * name, int type)
{
/* The ARM compiler outputs several obsolete forms. Recognize them
in addition to the standard $a, $t and $d. We are somewhat loose
in what we accept here, since the full set is not documented. */
- return (name != NULL)
- && (name[0] == '$')
- && (name[1] >= 'a' && name[1] <= 'z')
- && (name[2] == 0 || name[2] == '.');
+ if (!name || name[0] != '$')
+ return FALSE;
+ if (name[1] == 'a' || name[1] == 't' || name[1] == 'd')
+ type &= BFD_ARM_SPECIAL_SYM_TYPE_MAP;
+ else if (name[1] == 'm' || name[1] == 'f' || name[1] == 'p')
+ type &= BFD_ARM_SPECIAL_SYM_TYPE_TAG;
+ else if (name[1] >= 'a' && name[1] <= 'z')
+ type &= BFD_ARM_SPECIAL_SYM_TYPE_OTHER;
+ else
+ return FALSE;
+
+ return (type != 0 && (name[2] == 0 || name[2] == '.'));
}