aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bfd/ChangeLog5
-rw-r--r--bfd/elf32-arm.c19
-rw-r--r--binutils/ChangeLog5
-rw-r--r--binutils/readelf.c10
-rw-r--r--ld/testsuite/ChangeLog7
-rw-r--r--ld/testsuite/ld-arm/arm-elf.exp1
-rw-r--r--ld/testsuite/ld-arm/attr-merge-arch-2.d5
-rw-r--r--ld/testsuite/ld-arm/attr-merge-arch-2a.s18
-rw-r--r--ld/testsuite/ld-arm/attr-merge-arch-2b.s8
9 files changed, 68 insertions, 10 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index fcfdead..7076ff4 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,8 @@
+2014-09-16 Terry Guo <terry.guo@arm.com>
+
+ * elf32-arm.c (elf32_arm_merge_eabi_attributes): Return false if
+ failed to merge.
+
2014-09-16 Kuan-Lin Chen <kuanlinchentw@gmail.com>
* bfd-in2.h: Regenerate.
diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c
index 89d51c1..08aa3f9 100644
--- a/bfd/elf32-arm.c
+++ b/bfd/elf32-arm.c
@@ -11778,7 +11778,9 @@ elf32_arm_merge_eabi_attributes (bfd *ibfd, bfd *obfd)
{
int secondary_compat = -1, secondary_compat_out = -1;
unsigned int saved_out_attr = out_attr[i].i;
- static const char *name_table[] = {
+ int arch_attr;
+ static const char *name_table[] =
+ {
/* These aren't real CPU names, but we can't guess
that from the architecture version alone. */
"Pre v4",
@@ -11800,10 +11802,17 @@ elf32_arm_merge_eabi_attributes (bfd *ibfd, bfd *obfd)
/* Merge Tag_CPU_arch and Tag_also_compatible_with. */
secondary_compat = get_secondary_compatible_arch (ibfd);
secondary_compat_out = get_secondary_compatible_arch (obfd);
- out_attr[i].i = tag_cpu_arch_combine (ibfd, out_attr[i].i,
- &secondary_compat_out,
- in_attr[i].i,
- secondary_compat);
+ arch_attr = tag_cpu_arch_combine (ibfd, out_attr[i].i,
+ &secondary_compat_out,
+ in_attr[i].i,
+ secondary_compat);
+
+ /* Return with error if failed to merge. */
+ if (arch_attr == -1)
+ return FALSE;
+
+ out_attr[i].i = arch_attr;
+
set_secondary_compatible_arch (obfd, secondary_compat_out);
/* Merge Tag_CPU_name and Tag_CPU_raw_name. */
diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index c55382e..223bf11 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,3 +1,8 @@
+2014-09-16 Nick Clifton <nickc@redhat.com>
+
+ * readelf.c (display_arm_attribute): Use unsigned int type for
+ tag, val and type variables.
+
2014-09-16 Kuan-Lin Chen <kuanlinchentw@gmail.com>
* readelf.c (decode_NDS32_machine_flags): Display ABI2 FP+.
diff --git a/binutils/readelf.c b/binutils/readelf.c
index ef3a68d..d9c12cc 100644
--- a/binutils/readelf.c
+++ b/binutils/readelf.c
@@ -11548,10 +11548,10 @@ display_tag_value (int tag,
/* ARM EABI attributes section. */
typedef struct
{
- int tag;
+ unsigned int tag;
const char * name;
/* 0 = special, 1 = string, 2 = uleb123, > 0x80 == table lookup. */
- int type;
+ unsigned int type;
const char ** table;
} arm_attr_public_tag;
@@ -11669,12 +11669,12 @@ static unsigned char *
display_arm_attribute (unsigned char * p,
const unsigned char * const end)
{
- int tag;
+ unsigned int tag;
unsigned int len;
- int val;
+ unsigned int val;
arm_attr_public_tag * attr;
unsigned i;
- int type;
+ unsigned int type;
tag = read_uleb128 (p, &len, end);
p += len;
diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog
index f5aef2a..556ee1a 100644
--- a/ld/testsuite/ChangeLog
+++ b/ld/testsuite/ChangeLog
@@ -1,3 +1,10 @@
+2014-09-16 Terry Guo <terry.guo@arm.com>
+
+ * ld-arm/attr-merge-arch-2.d: New test case.
+ * ld-arm/attr-merge-arch-2a.s: New test case source file.
+ * ld-arm/attr-merge-arch-2b.s: Likewise.
+ * ld-arm/arm-elf.exp: Run new test case.
+
2014-09-12 Andrew Bennett <andrew.bennett@imgtec.com>
* ld-mips-elf/mips-elf.exp: Add support for mips*-img-elf* target
diff --git a/ld/testsuite/ld-arm/arm-elf.exp b/ld/testsuite/ld-arm/arm-elf.exp
index f971afc..3c8cc68 100644
--- a/ld/testsuite/ld-arm/arm-elf.exp
+++ b/ld/testsuite/ld-arm/arm-elf.exp
@@ -878,6 +878,7 @@ run_dump_test "attr-merge-vfp-6r"
run_dump_test "attr-merge-vfp-7"
run_dump_test "attr-merge-vfp-7r"
run_dump_test "attr-merge-incompatible"
+run_dump_test "attr-merge-arch-2"
run_dump_test "unresolved-1"
if { ![istarget "arm*-*-nacl*"] } {
run_dump_test "unresolved-1-dyn"
diff --git a/ld/testsuite/ld-arm/attr-merge-arch-2.d b/ld/testsuite/ld-arm/attr-merge-arch-2.d
new file mode 100644
index 0000000..0e98edb
--- /dev/null
+++ b/ld/testsuite/ld-arm/attr-merge-arch-2.d
@@ -0,0 +1,5 @@
+#source: attr-merge-arch-2a.s
+#source: attr-merge-arch-2b.s
+#as:
+#ld: -e main
+#error: Conflicting CPU architectures 13/0
diff --git a/ld/testsuite/ld-arm/attr-merge-arch-2a.s b/ld/testsuite/ld-arm/attr-merge-arch-2a.s
new file mode 100644
index 0000000..6235a3e
--- /dev/null
+++ b/ld/testsuite/ld-arm/attr-merge-arch-2a.s
@@ -0,0 +1,18 @@
+ .syntax unified
+ .cpu cortex-m4
+ .fpu softvfp
+ .thumb
+ .file "m.c"
+ .text
+ .align 2
+ .global main
+ .thumb
+ .thumb_func
+ .type main, %function
+main:
+ push {r7, lr}
+ add r7, sp, #0
+ bl foo
+ mov r3, r0
+ mov r0, r3
+ pop {r7, pc}
diff --git a/ld/testsuite/ld-arm/attr-merge-arch-2b.s b/ld/testsuite/ld-arm/attr-merge-arch-2b.s
new file mode 100644
index 0000000..5771835
--- /dev/null
+++ b/ld/testsuite/ld-arm/attr-merge-arch-2b.s
@@ -0,0 +1,8 @@
+ .eabi_attribute 6, 0 @Tag_CPU_arch, 0 means pre-v4.
+ .file "f.c"
+ .text
+ .align 2
+ .global foo
+ .type foo, %function
+foo:
+ bx lr