summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Brook <paul@codesourcery.com>2006-10-29 00:03:03 +0000
committerPaul Brook <paul@codesourcery.com>2006-10-29 00:03:03 +0000
commit4d758c08530edc1df3e0c43a5ade8e24798f9a8b (patch)
tree40666f6f23e6e7482a85101f5a7b3f168c5fd390
parentad52e71348f7702878ed7930aed2faf4e61364d4 (diff)
downloadgdb-4d758c08530edc1df3e0c43a5ade8e24798f9a8b.tar.gz
2006-10-28 Paul Brook <paul@codesourcery.com>binutils-csl-sourcerygxx-4_1-25
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.
-rw-r--r--ChangeLog.csl9
-rw-r--r--bfd/elf32-arm.c25
2 files changed, 24 insertions, 10 deletions
diff --git a/ChangeLog.csl b/ChangeLog.csl
index e4ce5dce367..dbe5cc8d220 100644
--- a/ChangeLog.csl
+++ b/ChangeLog.csl
@@ -1,3 +1,12 @@
+2006-10-28 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.
+
2006-10-28 Kazu Hirata <kazu@codesourcery.com>
include/opcode/
diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c
index 9859b65dc4a..fa9867ec8ea 100644
--- a/bfd/elf32-arm.c
+++ b/bfd/elf32-arm.c
@@ -5997,8 +5997,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;
@@ -6129,17 +6129,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. */
@@ -6164,8 +6165,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;
@@ -6217,7 +6221,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