diff options
author | Paul Brook <paul@codesourcery.com> | 2006-11-29 15:50:06 +0000 |
---|---|---|
committer | Paul Brook <paul@codesourcery.com> | 2006-11-29 15:50:06 +0000 |
commit | 004ae5266b670985b6aa2acb181c62f4104f853c (patch) | |
tree | d6e4dd7ac4264bbc2f22714276d28baa7b4a44cc /bfd/elf32-arm.c | |
parent | a217f3f54323e5983492b8200de0eeafe2d4fd94 (diff) | |
download | gdb-004ae5266b670985b6aa2acb181c62f4104f853c.zip gdb-004ae5266b670985b6aa2acb181c62f4104f853c.tar.gz gdb-004ae5266b670985b6aa2acb181c62f4104f853c.tar.bz2 |
2006-11-29 Paul Brook <paul@codesourcery.com>
Julian Brown <julian@codesourcery.com>
bfd/
* elf32-arm.c (copy_eabi_attributes): Correct starting offset.
(elf32_arm_merge_eabi_attributes): Mark output as initialized.
Only set Tag_CPU_name and Tag_ABI_PCS_R9_use if input attribute
is present.
Diffstat (limited to 'bfd/elf32-arm.c')
-rw-r--r-- | bfd/elf32-arm.c | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c index dc784db..86e8bff 100644 --- a/bfd/elf32-arm.c +++ b/bfd/elf32-arm.c @@ -6040,8 +6040,8 @@ copy_eabi_attributes (bfd *ibfd, bfd *obfd) aeabi_attribute_list *list; int i; - in_attr = elf32_arm_tdata (ibfd)->known_eabi_attributes; - out_attr = elf32_arm_tdata (obfd)->known_eabi_attributes; + in_attr = &elf32_arm_tdata (ibfd)->known_eabi_attributes[4]; + out_attr = &elf32_arm_tdata (obfd)->known_eabi_attributes[4]; for (i = 4; i < NUM_KNOWN_ATTRIBUTES; i++) { out_attr->i = in_attr->i; @@ -6172,17 +6172,18 @@ elf32_arm_merge_eabi_attributes (bfd *ibfd, bfd *obfd) static const int order_312[3] = {3, 1, 2}; int i; - if (!elf32_arm_tdata (ibfd)->known_eabi_attributes[0].i) + if (!elf32_arm_tdata (obfd)->known_eabi_attributes[0].i) { /* This is the first object. Copy the attributes. */ copy_eabi_attributes (ibfd, obfd); + + /* Use the Tag_null value to indicate the attributes have been + initialized. */ + elf32_arm_tdata (obfd)->known_eabi_attributes[0].i = 1; + return TRUE; } - /* Use the Tag_null value to indicate the attributes have been - initialized. */ - elf32_arm_tdata (ibfd)->known_eabi_attributes[0].i = 1; - in_attr = elf32_arm_tdata (ibfd)->known_eabi_attributes; out_attr = elf32_arm_tdata (obfd)->known_eabi_attributes; /* This needs to happen before Tag_ABI_FP_number_model is merged. */ @@ -6207,8 +6208,11 @@ elf32_arm_merge_eabi_attributes (bfd *ibfd, bfd *obfd) { case Tag_CPU_raw_name: case Tag_CPU_name: - /* Use whichever has the greatest architecture requirements. */ - if (in_attr[Tag_CPU_arch].i > out_attr[Tag_CPU_arch].i) + /* Use whichever has the greatest architecture requirements. We + won't necessarily have both the above tags, so make sure input + name is non-NULL. */ + if (in_attr[Tag_CPU_arch].i > out_attr[Tag_CPU_arch].i + && in_attr[i].s) out_attr[i].s = attr_strdup(obfd, in_attr[i].s); break; @@ -6260,7 +6264,8 @@ elf32_arm_merge_eabi_attributes (bfd *ibfd, bfd *obfd) } break; case Tag_ABI_PCS_R9_use: - if (out_attr[i].i != AEABI_R9_unused + if (in_attr[i].i != out_attr[i].i + && out_attr[i].i != AEABI_R9_unused && in_attr[i].i != AEABI_R9_unused) { _bfd_error_handler |