public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
* [RFA/gold] Patch to workaround ARM1176 BLX(immediate) Thumb to ARM issue
@ 2011-09-26 15:10 Matthew Gretton-Dann
  2011-09-26 18:41 ` Doug Kwan (關振德)
  2011-11-03  3:39 ` Ian Lance Taylor
  0 siblings, 2 replies; 9+ messages in thread
From: Matthew Gretton-Dann @ 2011-09-26 15:10 UTC (permalink / raw)
  To: binutils; +Cc: ian

[-- Attachment #1: Type: text/plain, Size: 1287 bytes --]

All,

The attached patch adds the options --[no-]fix-arm1176 to Gold in a 
similar manner to that done to Ld earlier this year (see 
http://sourceware.org/ml/binutils/2011-07/msg00235.html).

When --fix-arm1176 is turned on (the default) ARM v5T interworking 
instructions are only available for ARM v6T2 and later architectures.

Further details on the erratum can be found on ARM's documentation website:
     http://infocenter.arm.com/
       User Assistance Notes
         ARM11 Processors
           ARM1176JZ-S and ARM1176JFZ-S Programmer Advice Note

This patch depends on my recently posted fixes to v4T/v5T interworking 
in gold (http://sourceware.org/ml/binutils/2011-09/msg00186.html).

Please can someone review.

Thanks,

Matt

gold/ChangeLog
2011-09-26  Matthew Gretton-Dann<matthew.gretton-dann@arm.com>

	* arm.cc (Target_arm::may_use_v5t_interworking): Check whether
	we are working around the ARM1176 Erratum.
	* options.h (General_options::fix_arm1176): Add option.
	* testsuite/Makefile.am: Add testcases, and keep current ones
	working.
	* testsuite/Makefile.in: Regenerate.
	* testsuite/arm_fix_1176.s: New file.
	* testsuite/arm_fix_1176.sh: Likewise.

-- 
Matthew Gretton-Dann
Principal Engineer, PD Software - Tools, ARM Ltd

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0002-Add-fix-arm1176-option.patch --]
[-- Type: text/x-patch; name=0002-Add-fix-arm1176-option.patch, Size: 27683 bytes --]

diff --git a/gold/arm.cc b/gold/arm.cc
index c0a2049..200c371 100644
--- a/gold/arm.cc
+++ b/gold/arm.cc
@@ -2262,9 +2262,16 @@ class Target_arm : public Sized_target<32, big_endian>
     Object_attribute* attr =
       this->get_aeabi_object_attribute(elfcpp::Tag_CPU_arch);
     int arch = attr->int_value();
-    return (arch != elfcpp::TAG_CPU_ARCH_PRE_V4
-	    && arch != elfcpp::TAG_CPU_ARCH_V4
-	    && arch != elfcpp::TAG_CPU_ARCH_V4T);
+    if (parameters->options().fix_arm1176())
+      return (arch == elfcpp::TAG_CPU_ARCH_V6T2
+	      || arch == elfcpp::TAG_CPU_ARCH_V7
+	      || arch == elfcpp::TAG_CPU_ARCH_V6_M
+	      || arch == elfcpp::TAG_CPU_ARCH_V6S_M
+	      || arch == elfcpp::TAG_CPU_ARCH_V7E_M);
+    else
+      return (arch != elfcpp::TAG_CPU_ARCH_PRE_V4
+	      && arch != elfcpp::TAG_CPU_ARCH_V4
+	      && arch != elfcpp::TAG_CPU_ARCH_V4T);
   }
   
   // Process the relocations to determine unreferenced sections for 
diff --git a/gold/options.h b/gold/options.h
index 427e957..768df9c 100644
--- a/gold/options.h
+++ b/gold/options.h
@@ -771,6 +771,10 @@ class General_options
 	      N_("(ARM only) Fix binaries for Cortex-A8 erratum."),
 	      N_("(ARM only) Do not fix binaries for Cortex-A8 erratum."));
 
+  DEFINE_bool(fix_arm1176, options::TWO_DASHES, '\0', true,
+	      N_("(ARM only) Fix binaries for ARM1176 erratum."),
+	      N_("(ARM only) Do not fix binaries for ARM1176 erratum."));
+
   DEFINE_bool(merge_exidx_entries, options::TWO_DASHES, '\0', true,
 	      N_("(ARM only) Merge exidx entries in debuginfo."),
 	      N_("(ARM only) Do not merge exidx entries in debuginfo."));
diff --git a/gold/testsuite/Makefile.am b/gold/testsuite/Makefile.am
index 75cd272..5596d40 100644
--- a/gold/testsuite/Makefile.am
+++ b/gold/testsuite/Makefile.am
@@ -2167,7 +2167,7 @@ thumb_bl_in_range.stdout: thumb_bl_in_range
 	$(TEST_OBJDUMP) -D $< > $@
 
 thumb_bl_in_range: thumb_bl_in_range.o ../ld-new
-	../ld-new -T $(srcdir)/thumb_branch_range.t -o $@ $<
+	../ld-new --no-fix-arm1176 -T $(srcdir)/thumb_branch_range.t -o $@ $<
 
 thumb_bl_in_range.o: thumb_bl_in_range.s
 	$(TEST_AS) -o $@ -march=armv5te $<
@@ -2176,7 +2176,7 @@ thumb_bl_out_of_range.stdout: thumb_bl_out_of_range
 	$(TEST_OBJDUMP) -D $< > $@
 
 thumb_bl_out_of_range: thumb_bl_out_of_range.o ../ld-new
-	../ld-new -T $(srcdir)/thumb_branch_range.t -o $@ $<
+	../ld-new --no-fix-arm1176 -T $(srcdir)/thumb_branch_range.t -o $@ $<
 
 thumb_bl_out_of_range.o: thumb_bl_out_of_range.s
 	$(TEST_AS) -o $@ -march=armv5te $<
@@ -2203,7 +2203,7 @@ thumb_blx_in_range.stdout: thumb_blx_in_range
 	$(TEST_OBJDUMP) -D $< > $@
 
 thumb_blx_in_range: thumb_blx_in_range.o ../ld-new
-	../ld-new -T $(srcdir)/thumb_branch_range.t -o $@ $<
+	../ld-new --no-fix-arm1176 -T $(srcdir)/thumb_branch_range.t -o $@ $<
 
 thumb_blx_in_range.o: thumb_blx_in_range.s
 	$(TEST_AS) -o $@ -march=armv5te $<
@@ -2212,7 +2212,7 @@ thumb_blx_out_of_range.stdout: thumb_blx_out_of_range
 	$(TEST_OBJDUMP) -D $< > $@
 
 thumb_blx_out_of_range: thumb_blx_out_of_range.o ../ld-new
-	../ld-new -T $(srcdir)/thumb_branch_range.t -o $@ $<
+	../ld-new --no-fix-arm1176 -T $(srcdir)/thumb_branch_range.t -o $@ $<
 
 thumb_blx_out_of_range.o: thumb_blx_out_of_range.s
 	$(TEST_AS) -o $@ -march=armv5te $<
@@ -2239,7 +2239,7 @@ thumb_bl_out_of_range_local.stdout: thumb_bl_out_of_range_local
 	$(TEST_OBJDUMP) -D $< > $@
 
 thumb_bl_out_of_range_local: thumb_bl_out_of_range_local.o ../ld-new
-	../ld-new -T $(srcdir)/thumb_branch_range.t -o $@ $<
+	../ld-new --no-fix-arm1176 -T $(srcdir)/thumb_branch_range.t -o $@ $<
 
 thumb_bl_out_of_range_local.o: thumb_bl_out_of_range_local.s
 	$(TEST_AS) -o $@ -march=armv5te $<
@@ -2276,7 +2276,7 @@ arm_fix_v4bx.stdout: arm_fix_v4bx
 	$(TEST_OBJDUMP) -D -j.text $< > $@
 
 arm_fix_v4bx: arm_fix_v4bx.o ../ld-new
-	../ld-new --fix-v4bx -o $@ $<
+	../ld-new --no-fix-arm1176 --fix-v4bx -o $@ $<
 
 arm_fix_v4bx.o: arm_fix_v4bx.s
 	$(TEST_AS) -o $@ $<
@@ -2285,13 +2285,13 @@ arm_fix_v4bx_interworking.stdout: arm_fix_v4bx_interworking
 	$(TEST_OBJDUMP) -D -j.text $< > $@
 
 arm_fix_v4bx_interworking: arm_fix_v4bx.o ../ld-new
-	../ld-new --fix-v4bx-interworking -o $@ $<
+	../ld-new --no-fix-arm1176 --fix-v4bx-interworking -o $@ $<
 
 arm_no_fix_v4bx.stdout: arm_no_fix_v4bx
 	$(TEST_OBJDUMP) -D -j.text $< > $@
 
 arm_no_fix_v4bx: arm_fix_v4bx.o ../ld-new
-	../ld-new -o $@ $<
+	../ld-new --no-fix-arm1176 -o $@ $<
 
 MOSTLYCLEANFILES += arm_fix_v4bx arm_fix_v4bx_interworking arm_no_fix_v4bx
 
@@ -2331,6 +2331,69 @@ arm_attr_merge_7b.o: arm_attr_merge_7b.s
 
 MOSTLYCLEANFILES += arm_attr_merge_6 arm_attr_merge_6r arm_attr_merge_7
 
+# ARM1176 workaround test.
+check_SCRIPTS += arm_fix_1176.sh
+check_DATA += arm_fix_1176_default_v6z.stdout arm_fix_1176_on_v6z.stdout \
+	arm_fix_1176_off_v6z.stdout arm_fix_1176_default_v5te.stdout \
+	arm_fix_1176_default_v7a.stdout arm_fix_1176_default_1156t2f_s.stdout
+
+arm_fix_1176_default_v6z.stdout: arm_fix_1176_default_v6z
+	$(TEST_OBJDUMP) -D -j.foo $< > $@
+
+arm_fix_1176_default_v6z: arm_fix_1176_default_v6z.o ../ld-new
+	../ld-new --section-start=.foo=0x2001014 -o $@ $<
+
+arm_fix_1176_default_v6z.o: arm_fix_1176.s
+	$(TEST_AS) -march=armv6z -o $@ $<
+
+arm_fix_1176_on_v6z.stdout: arm_fix_1176_on_v6z
+	$(TEST_OBJDUMP) -D -j.foo $< > $@
+
+arm_fix_1176_on_v6z: arm_fix_1176_on_v6z.o ../ld-new
+	../ld-new --section-start=.foo=0x2001014 --fix-arm1176 -o $@ $<
+
+arm_fix_1176_on_v6z.o: arm_fix_1176.s
+	$(TEST_AS) -march=armv6z -o $@ $<
+
+arm_fix_1176_off_v6z.stdout: arm_fix_1176_off_v6z
+	$(TEST_OBJDUMP) -D -j.foo $< > $@
+
+arm_fix_1176_off_v6z: arm_fix_1176_off_v6z.o ../ld-new
+	../ld-new --section-start=.foo=0x2001014 --no-fix-arm1176 -o $@ $<
+
+arm_fix_1176_off_v6z.o: arm_fix_1176.s
+	$(TEST_AS) -march=armv6z -o $@ $<
+
+arm_fix_1176_default_v5te.stdout: arm_fix_1176_default_v5te
+	$(TEST_OBJDUMP) -D -j.foo $< > $@
+
+arm_fix_1176_default_v5te: arm_fix_1176_default_v5te.o ../ld-new
+	../ld-new --section-start=.foo=0x2001014 -o $@ $<
+
+arm_fix_1176_default_v5te.o: arm_fix_1176.s
+	$(TEST_AS) -march=armv5te -o $@ $<
+
+arm_fix_1176_default_v7a.stdout: arm_fix_1176_default_v7a
+	$(TEST_OBJDUMP) -D -j.foo $< > $@
+
+arm_fix_1176_default_v7a: arm_fix_1176_default_v7a.o ../ld-new
+	../ld-new --section-start=.foo=0x2001014 -o $@ $<
+
+arm_fix_1176_default_v7a.o: arm_fix_1176.s
+	$(TEST_AS) -march=armv7-a -o $@ $<
+
+arm_fix_1176_default_1156t2f_s.stdout: arm_fix_1176_default_1156t2f_s
+	$(TEST_OBJDUMP) -D -j.foo $< > $@
+
+arm_fix_1176_default_1156t2f_s: arm_fix_1176_default_1156t2f_s.o ../ld-new
+	../ld-new --section-start=.foo=0x2001014 -o $@ $<
+
+arm_fix_1176_default_1156t2f_s.o: arm_fix_1176.s
+	$(TEST_AS) -mcpu=arm1156t2f-s -o $@ $<
+
+MOSTLYCLEANFILES += arm_fix_1176_default_v6z arm_fix_1176_on_v6z arm_fix_1176_off_v6z \
+	arm_fix_1176_default_v5te arm_fix_1176_default_v7a arm_fix_1176_default_1156t2f_s
+
 # Cortex-A8 workaround test.
 
 check_SCRIPTS += arm_cortex_a8.sh
@@ -2445,7 +2508,7 @@ arm_farcall_arm_arm.stdout: arm_farcall_arm_arm
 	$(TEST_OBJDUMP) -d $< > $@
 
 arm_farcall_arm_arm: arm_farcall_arm_arm.o ../ld-new
-	../ld-new --section-start .text=0x1000 --section-start .foo=0x2001020 -o $@ $<
+	../ld-new --no-fix-arm1176 --section-start .text=0x1000 --section-start .foo=0x2001020 -o $@ $<
 
 arm_farcall_arm_arm.o: arm_farcall_arm_arm.s
 	$(TEST_AS) -o $@ $<
@@ -2470,7 +2533,7 @@ arm_farcall_arm_thumb_5t.stdout: arm_farcall_arm_thumb_5t
 	$(TEST_OBJDUMP) -D $< > $@
 
 arm_farcall_arm_thumb_5t: arm_farcall_arm_thumb_5t.o ../ld-new
-	../ld-new --section-start .text=0x1000 --section-start .foo=0x2001014 -o $@ $<
+	../ld-new --no-fix-arm1176 --section-start .text=0x1000 --section-start .foo=0x2001014 -o $@ $<
 
 arm_farcall_arm_thumb_5t.o: arm_farcall_arm_thumb.s
 	$(TEST_AS) -march=armv5t -o $@ $<
@@ -2498,7 +2561,7 @@ arm_farcall_thumb_thumb_5t.stdout: arm_farcall_thumb_thumb_5t
 	$(TEST_OBJDUMP) -D $< > $@
 
 arm_farcall_thumb_thumb_5t: arm_farcall_thumb_thumb_5t.o ../ld-new
-	../ld-new --section-start .text=0x1000 --section-start .foo=0x2001014 -o $@ $<
+	../ld-new --no-fix-arm1176 --section-start .text=0x1000 --section-start .foo=0x2001014 -o $@ $<
 
 arm_farcall_thumb_thumb_5t.o: arm_farcall_thumb_thumb.s
 	$(TEST_AS) -march=armv5t -o $@ $<
@@ -2543,7 +2606,7 @@ arm_farcall_thumb_arm_5t.stdout: arm_farcall_thumb_arm_5t
 	$(TEST_OBJDUMP) -D $< > $@
 
 arm_farcall_thumb_arm_5t: arm_farcall_thumb_arm_5t.o ../ld-new
-	../ld-new --section-start .text=0x1c01010 --section-start .foo=0x2001014 -o $@ $<
+	../ld-new --no-fix-arm1176 --section-start .text=0x1c01010 --section-start .foo=0x2001014 -o $@ $<
 
 arm_farcall_thumb_arm_5t.o: arm_farcall_thumb_arm.s
 	$(TEST_AS) -march=armv5t -o $@ $<
diff --git a/gold/testsuite/Makefile.in b/gold/testsuite/Makefile.in
index 0226275..f4dcfc8 100644
--- a/gold/testsuite/Makefile.in
+++ b/gold/testsuite/Makefile.in
@@ -502,6 +502,8 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
 @DEFAULT_TARGET_X86_64_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	split_x86_64_4 split_x86_64_r
 
 
+# ARM1176 workaround test.
+
 # Cortex-A8 workaround test.
 
 # Check ARM to ARM farcall veneers
@@ -516,6 +518,7 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	arm_branch_out_of_range.sh \
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	arm_fix_v4bx.sh \
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	arm_attr_merge.sh \
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	arm_fix_1176.sh \
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	arm_cortex_a8.sh \
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	arm_exidx_test.sh \
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	pr12826.sh \
@@ -544,6 +547,12 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	arm_attr_merge_6.stdout \
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	arm_attr_merge_6r.stdout \
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	arm_attr_merge_7.stdout \
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	arm_fix_1176_default_v6z.stdout \
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	arm_fix_1176_on_v6z.stdout \
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	arm_fix_1176_off_v6z.stdout \
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	arm_fix_1176_default_v5te.stdout \
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	arm_fix_1176_default_v7a.stdout \
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	arm_fix_1176_default_1156t2f_s.stdout \
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	arm_cortex_a8_b_cond.stdout \
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	arm_cortex_a8_b.stdout \
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	arm_cortex_a8_bl.stdout \
@@ -582,6 +591,12 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	arm_attr_merge_6 \
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	arm_attr_merge_6r \
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	arm_attr_merge_7 \
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	arm_fix_1176_default_v6z \
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	arm_fix_1176_on_v6z \
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	arm_fix_1176_off_v6z \
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	arm_fix_1176_default_v5te \
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	arm_fix_1176_default_v7a \
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	arm_fix_1176_default_1156t2f_s \
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	arm_cortex_a8_b_cond \
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	arm_cortex_a8_b \
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	arm_cortex_a8_bl \
@@ -3666,6 +3681,8 @@ arm_fix_v4bx.sh.log: arm_fix_v4bx.sh
 	@p='arm_fix_v4bx.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post)
 arm_attr_merge.sh.log: arm_attr_merge.sh
 	@p='arm_attr_merge.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post)
+arm_fix_1176.sh.log: arm_fix_1176.sh
+	@p='arm_fix_1176.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post)
 arm_cortex_a8.sh.log: arm_cortex_a8.sh
 	@p='arm_cortex_a8.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post)
 arm_exidx_test.sh.log: arm_exidx_test.sh
@@ -5113,7 +5130,7 @@ uninstall-am:
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	$(TEST_OBJDUMP) -D $< > $@
 
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@thumb_bl_in_range: thumb_bl_in_range.o ../ld-new
-@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	../ld-new -T $(srcdir)/thumb_branch_range.t -o $@ $<
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	../ld-new --no-fix-arm1176 -T $(srcdir)/thumb_branch_range.t -o $@ $<
 
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@thumb_bl_in_range.o: thumb_bl_in_range.s
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	$(TEST_AS) -o $@ -march=armv5te $<
@@ -5122,7 +5139,7 @@ uninstall-am:
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	$(TEST_OBJDUMP) -D $< > $@
 
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@thumb_bl_out_of_range: thumb_bl_out_of_range.o ../ld-new
-@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	../ld-new -T $(srcdir)/thumb_branch_range.t -o $@ $<
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	../ld-new --no-fix-arm1176 -T $(srcdir)/thumb_branch_range.t -o $@ $<
 
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@thumb_bl_out_of_range.o: thumb_bl_out_of_range.s
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	$(TEST_AS) -o $@ -march=armv5te $<
@@ -5149,7 +5166,7 @@ uninstall-am:
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	$(TEST_OBJDUMP) -D $< > $@
 
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@thumb_blx_in_range: thumb_blx_in_range.o ../ld-new
-@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	../ld-new -T $(srcdir)/thumb_branch_range.t -o $@ $<
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	../ld-new --no-fix-arm1176 -T $(srcdir)/thumb_branch_range.t -o $@ $<
 
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@thumb_blx_in_range.o: thumb_blx_in_range.s
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	$(TEST_AS) -o $@ -march=armv5te $<
@@ -5158,7 +5175,7 @@ uninstall-am:
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	$(TEST_OBJDUMP) -D $< > $@
 
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@thumb_blx_out_of_range: thumb_blx_out_of_range.o ../ld-new
-@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	../ld-new -T $(srcdir)/thumb_branch_range.t -o $@ $<
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	../ld-new --no-fix-arm1176 -T $(srcdir)/thumb_branch_range.t -o $@ $<
 
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@thumb_blx_out_of_range.o: thumb_blx_out_of_range.s
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	$(TEST_AS) -o $@ -march=armv5te $<
@@ -5185,7 +5202,7 @@ uninstall-am:
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	$(TEST_OBJDUMP) -D $< > $@
 
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@thumb_bl_out_of_range_local: thumb_bl_out_of_range_local.o ../ld-new
-@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	../ld-new -T $(srcdir)/thumb_branch_range.t -o $@ $<
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	../ld-new --no-fix-arm1176 -T $(srcdir)/thumb_branch_range.t -o $@ $<
 
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@thumb_bl_out_of_range_local.o: thumb_bl_out_of_range_local.s
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	$(TEST_AS) -o $@ -march=armv5te $<
@@ -5212,7 +5229,7 @@ uninstall-am:
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	$(TEST_OBJDUMP) -D -j.text $< > $@
 
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_fix_v4bx: arm_fix_v4bx.o ../ld-new
-@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	../ld-new --fix-v4bx -o $@ $<
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	../ld-new --no-fix-arm1176 --fix-v4bx -o $@ $<
 
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_fix_v4bx.o: arm_fix_v4bx.s
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	$(TEST_AS) -o $@ $<
@@ -5221,13 +5238,13 @@ uninstall-am:
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	$(TEST_OBJDUMP) -D -j.text $< > $@
 
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_fix_v4bx_interworking: arm_fix_v4bx.o ../ld-new
-@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	../ld-new --fix-v4bx-interworking -o $@ $<
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	../ld-new --no-fix-arm1176 --fix-v4bx-interworking -o $@ $<
 
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_no_fix_v4bx.stdout: arm_no_fix_v4bx
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	$(TEST_OBJDUMP) -D -j.text $< > $@
 
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_no_fix_v4bx: arm_fix_v4bx.o ../ld-new
-@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	../ld-new -o $@ $<
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	../ld-new --no-fix-arm1176 -o $@ $<
 
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_attr_merge_6.stdout: arm_attr_merge_6
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	$(TEST_READELF) -A $< > $@
@@ -5259,6 +5276,60 @@ uninstall-am:
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_attr_merge_7b.o: arm_attr_merge_7b.s
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	$(TEST_AS) -o $@ $<
 
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_fix_1176_default_v6z.stdout: arm_fix_1176_default_v6z
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	$(TEST_OBJDUMP) -D -j.foo $< > $@
+
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_fix_1176_default_v6z: arm_fix_1176_default_v6z.o ../ld-new
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	../ld-new --section-start=.foo=0x2001014 -o $@ $<
+
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_fix_1176_default_v6z.o: arm_fix_1176.s
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	$(TEST_AS) -march=armv6z -o $@ $<
+
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_fix_1176_on_v6z.stdout: arm_fix_1176_on_v6z
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	$(TEST_OBJDUMP) -D -j.foo $< > $@
+
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_fix_1176_on_v6z: arm_fix_1176_on_v6z.o ../ld-new
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	../ld-new --section-start=.foo=0x2001014 --fix-arm1176 -o $@ $<
+
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_fix_1176_on_v6z.o: arm_fix_1176.s
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	$(TEST_AS) -march=armv6z -o $@ $<
+
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_fix_1176_off_v6z.stdout: arm_fix_1176_off_v6z
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	$(TEST_OBJDUMP) -D -j.foo $< > $@
+
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_fix_1176_off_v6z: arm_fix_1176_off_v6z.o ../ld-new
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	../ld-new --section-start=.foo=0x2001014 --no-fix-arm1176 -o $@ $<
+
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_fix_1176_off_v6z.o: arm_fix_1176.s
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	$(TEST_AS) -march=armv6z -o $@ $<
+
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_fix_1176_default_v5te.stdout: arm_fix_1176_default_v5te
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	$(TEST_OBJDUMP) -D -j.foo $< > $@
+
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_fix_1176_default_v5te: arm_fix_1176_default_v5te.o ../ld-new
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	../ld-new --section-start=.foo=0x2001014 -o $@ $<
+
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_fix_1176_default_v5te.o: arm_fix_1176.s
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	$(TEST_AS) -march=armv5te -o $@ $<
+
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_fix_1176_default_v7a.stdout: arm_fix_1176_default_v7a
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	$(TEST_OBJDUMP) -D -j.foo $< > $@
+
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_fix_1176_default_v7a: arm_fix_1176_default_v7a.o ../ld-new
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	../ld-new --section-start=.foo=0x2001014 -o $@ $<
+
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_fix_1176_default_v7a.o: arm_fix_1176.s
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	$(TEST_AS) -march=armv7-a -o $@ $<
+
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_fix_1176_default_1156t2f_s.stdout: arm_fix_1176_default_1156t2f_s
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	$(TEST_OBJDUMP) -D -j.foo $< > $@
+
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_fix_1176_default_1156t2f_s: arm_fix_1176_default_1156t2f_s.o ../ld-new
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	../ld-new --section-start=.foo=0x2001014 -o $@ $<
+
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_fix_1176_default_1156t2f_s.o: arm_fix_1176.s
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	$(TEST_AS) -mcpu=arm1156t2f-s -o $@ $<
+
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_cortex_a8_b_cond.stdout: arm_cortex_a8_b_cond
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	$(TEST_OBJDUMP) -D -j.text $< > $@
 
@@ -5347,7 +5418,7 @@ uninstall-am:
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	$(TEST_OBJDUMP) -d $< > $@
 
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_farcall_arm_arm: arm_farcall_arm_arm.o ../ld-new
-@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	../ld-new --section-start .text=0x1000 --section-start .foo=0x2001020 -o $@ $<
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	../ld-new --no-fix-arm1176 --section-start .text=0x1000 --section-start .foo=0x2001020 -o $@ $<
 
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_farcall_arm_arm.o: arm_farcall_arm_arm.s
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	$(TEST_AS) -o $@ $<
@@ -5365,7 +5436,7 @@ uninstall-am:
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	$(TEST_OBJDUMP) -D $< > $@
 
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_farcall_arm_thumb_5t: arm_farcall_arm_thumb_5t.o ../ld-new
-@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	../ld-new --section-start .text=0x1000 --section-start .foo=0x2001014 -o $@ $<
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	../ld-new --no-fix-arm1176 --section-start .text=0x1000 --section-start .foo=0x2001014 -o $@ $<
 
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_farcall_arm_thumb_5t.o: arm_farcall_arm_thumb.s
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	$(TEST_AS) -march=armv5t -o $@ $<
@@ -5383,7 +5454,7 @@ uninstall-am:
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	$(TEST_OBJDUMP) -D $< > $@
 
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_farcall_thumb_thumb_5t: arm_farcall_thumb_thumb_5t.o ../ld-new
-@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	../ld-new --section-start .text=0x1000 --section-start .foo=0x2001014 -o $@ $<
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	../ld-new --no-fix-arm1176 --section-start .text=0x1000 --section-start .foo=0x2001014 -o $@ $<
 
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_farcall_thumb_thumb_5t.o: arm_farcall_thumb_thumb.s
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	$(TEST_AS) -march=armv5t -o $@ $<
@@ -5419,7 +5490,7 @@ uninstall-am:
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	$(TEST_OBJDUMP) -D $< > $@
 
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_farcall_thumb_arm_5t: arm_farcall_thumb_arm_5t.o ../ld-new
-@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	../ld-new --section-start .text=0x1c01010 --section-start .foo=0x2001014 -o $@ $<
+@DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	../ld-new --no-fix-arm1176 --section-start .text=0x1c01010 --section-start .foo=0x2001014 -o $@ $<
 
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@arm_farcall_thumb_arm_5t.o: arm_farcall_thumb_arm.s
 @DEFAULT_TARGET_ARM_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@	$(TEST_AS) -march=armv5t -o $@ $<
diff --git a/gold/testsuite/arm_fix_1176.s b/gold/testsuite/arm_fix_1176.s
new file mode 100644
index 0000000..96e0328
--- /dev/null
+++ b/gold/testsuite/arm_fix_1176.s
@@ -0,0 +1,15 @@
+	.syntax unified
+	.globl _start
+	.globl func_to_branch_to
+
+	.arm
+	.text
+func_to_branch_to:
+	bx lr
+
+	.thumb
+	.section .foo, "xa"
+	.thumb_func
+_start:
+	bl func_to_branch_to
+
diff --git a/gold/testsuite/arm_fix_1176.sh b/gold/testsuite/arm_fix_1176.sh
new file mode 100755
index 0000000..152b0a3
--- /dev/null
+++ b/gold/testsuite/arm_fix_1176.sh
@@ -0,0 +1,61 @@
+#!/bin/sh
+
+# arm_fix_1176.sh -- a test case for the ARM1176 workaround.
+
+# Copyright 2010, 2011, Free Software Foundation, Inc.
+# Written by Matthew Gretton-Dann <matthew.gretton-dann@arm.com>
+# Based upon arm_cortex_a8.sh
+# Written by Doug Kwan <dougkwan@google.com>.
+
+# This file is part of gold.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+# This file goes with arm_v4bx.s, an ARM assembly source file constructed to
+# have test the handling of R_ARM_V4BX relocation.
+
+check()
+{
+    if ! grep -q "$2" "$1"
+    then
+	echo "Did not find expected instruction in $1:"
+	echo "   $2"
+	echo ""
+	echo "Actual instructions below:"
+	cat "$1"
+	exit 1
+    fi
+}
+
+# Check for fix default state on v6Z.
+check arm_fix_1176_default_v6z.stdout "2001014:	.*	bl	2001018 <.*>"
+
+# Check for fix explicitly on on v6Z.
+check arm_fix_1176_on_v6z.stdout "2001014:	.*	bl	2001018 <.*>"
+
+# Check for explicitly off on v6Z
+check arm_fix_1176_off_v6z.stdout "2001014:	.*	blx	2001018 <.*>"
+
+# Check for fix default state on v5TE
+check arm_fix_1176_default_v5te.stdout "2001014:	.*	bl	2001018 <.*>"
+
+# Check for fix default state on v7A
+check arm_fix_1176_default_v7a.stdout "2001014:	.*	blx	2001018 <.*>"
+
+# Check for fix default state on ARM1156T2F-S
+check arm_fix_1176_default_1156t2f_s.stdout "2001014:	.*	blx	2001018 <.*>"
+
+exit 0
-- 
1.7.0.4

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [RFA/gold] Patch to workaround ARM1176 BLX(immediate) Thumb to ARM issue
  2011-09-26 15:10 [RFA/gold] Patch to workaround ARM1176 BLX(immediate) Thumb to ARM issue Matthew Gretton-Dann
@ 2011-09-26 18:41 ` Doug Kwan (關振德)
       [not found]   ` <CAH9SEo6aeeuvp_5aFzudSy3kKcirui-pW6LR0o0ad-LjS9VdDg@mail.gmail.com>
  2011-11-03  3:39 ` Ian Lance Taylor
  1 sibling, 1 reply; 9+ messages in thread
From: Doug Kwan (關振德) @ 2011-09-26 18:41 UTC (permalink / raw)
  To: Matthew Gretton-Dann; +Cc: binutils, ian

Hi Matthew,

   Thanks for fixing that.  That patch looks okay. My only concern is
that may_use_v*t_interworking are called repeatedly and their values
are constant.  Can you cache the values just like may_use_blx?

-Doug

On Mon, Sep 26, 2011 at 8:09 AM, Matthew Gretton-Dann
<matthew.gretton-dann@arm.com> wrote:
> All,
>
> The attached patch adds the options --[no-]fix-arm1176 to Gold in a similar
> manner to that done to Ld earlier this year (see
> http://sourceware.org/ml/binutils/2011-07/msg00235.html).
>
> When --fix-arm1176 is turned on (the default) ARM v5T interworking
> instructions are only available for ARM v6T2 and later architectures.
>
> Further details on the erratum can be found on ARM's documentation website:
>    http://infocenter.arm.com/
>      User Assistance Notes
>        ARM11 Processors
>          ARM1176JZ-S and ARM1176JFZ-S Programmer Advice Note
>
> This patch depends on my recently posted fixes to v4T/v5T interworking in
> gold (http://sourceware.org/ml/binutils/2011-09/msg00186.html).
>
> Please can someone review.
>
> Thanks,
>
> Matt
>
> gold/ChangeLog
> 2011-09-26  Matthew Gretton-Dann<matthew.gretton-dann@arm.com>
>
>        * arm.cc (Target_arm::may_use_v5t_interworking): Check whether
>        we are working around the ARM1176 Erratum.
>        * options.h (General_options::fix_arm1176): Add option.
>        * testsuite/Makefile.am: Add testcases, and keep current ones
>        working.
>        * testsuite/Makefile.in: Regenerate.
>        * testsuite/arm_fix_1176.s: New file.
>        * testsuite/arm_fix_1176.sh: Likewise.
>
> --
> Matthew Gretton-Dann
> Principal Engineer, PD Software - Tools, ARM Ltd

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PING] Re: [RFA/gold] Patch to workaround ARM1176 BLX(immediate) Thumb to ARM issue
       [not found]   ` <CAH9SEo6aeeuvp_5aFzudSy3kKcirui-pW6LR0o0ad-LjS9VdDg@mail.gmail.com>
@ 2011-11-02 10:44     ` Matthew Gretton-Dann
  2011-11-02 19:04       ` Doug Kwan (關振德)
  0 siblings, 1 reply; 9+ messages in thread
From: Matthew Gretton-Dann @ 2011-11-02 10:44 UTC (permalink / raw)
  To: "Doug Kwan (關振德)"; +Cc: binutils, ian

Ping.

On 26/09/11 20:52, Doug Kwan (關振德) wrote:
> The main patch also looks okay.  You can check both in if Ian is okay
> with that.
>
> -Doug
>
> On Mon, Sep 26, 2011 at 11:41 AM, Doug Kwan (關振德)
> <dougkwan@google.com <mailto:dougkwan@google.com>> wrote:
>
>     Hi Matthew,
>
>        Thanks for fixing that.  That patch looks okay. My only concern is
>     that may_use_v*t_interworking are called repeatedly and their values
>     are constant.  Can you cache the values just like may_use_blx?
>
>     -Doug
>
>     On Mon, Sep 26, 2011 at 8:09 AM, Matthew Gretton-Dann
>     <matthew.gretton-dann@arm.com <mailto:matthew.gretton-dann@arm.com>>
>     wrote:
>      > All,
>      >
>      > The attached patch adds the options --[no-]fix-arm1176 to Gold in
>     a similar
>      > manner to that done to Ld earlier this year (see
>      > http://sourceware.org/ml/binutils/2011-07/msg00235.html).
>      >
>      > When --fix-arm1176 is turned on (the default) ARM v5T interworking
>      > instructions are only available for ARM v6T2 and later architectures.
>      >
>      > Further details on the erratum can be found on ARM's
>     documentation website:
>      > http://infocenter.arm.com/
>      >      User Assistance Notes
>      >        ARM11 Processors
>      >          ARM1176JZ-S and ARM1176JFZ-S Programmer Advice Note
>      >
>      > This patch depends on my recently posted fixes to v4T/v5T
>     interworking in
>      > gold (http://sourceware.org/ml/binutils/2011-09/msg00186.html).
>      >
>      > Please can someone review.
>      >
>      > Thanks,
>      >
>      > Matt
>      >
>      > gold/ChangeLog
>      > 2011-09-26  Matthew Gretton-Dann<matthew.gretton-dann@arm.com
>     <mailto:matthew.gretton-dann@arm.com>>
>      >
>      >        * arm.cc (Target_arm::may_use_v5t_interworking): Check whether
>      >        we are working around the ARM1176 Erratum.
>      >        * options.h (General_options::fix_arm1176): Add option.
>      >        * testsuite/Makefile.am: Add testcases, and keep current ones
>      >        working.
>      >        * testsuite/Makefile.in: Regenerate.
>      >        * testsuite/arm_fix_1176.s: New file.
>      >        * testsuite/arm_fix_1176.sh: Likewise.
>      >
>      > --
>      > Matthew Gretton-Dann
>      > Principal Engineer, PD Software - Tools, ARM Ltd
>
>

-- 
Matthew Gretton-Dann
Principal Engineer, PD Software - Tools, ARM Ltd

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PING] Re: [RFA/gold] Patch to workaround ARM1176 BLX(immediate) Thumb to ARM issue
  2011-11-02 10:44     ` [PING] " Matthew Gretton-Dann
@ 2011-11-02 19:04       ` Doug Kwan (關振德)
  0 siblings, 0 replies; 9+ messages in thread
From: Doug Kwan (關振德) @ 2011-11-02 19:04 UTC (permalink / raw)
  To: Matthew Gretton-Dann; +Cc: binutils, ian

I am fine with your patch but Ian has to approve.

-Doug

On Wed, Nov 2, 2011 at 3:44 AM, Matthew Gretton-Dann
<matthew.gretton-dann@arm.com> wrote:
> Ping.
>
> On 26/09/11 20:52, Doug Kwan (關振德) wrote:
>>
>> The main patch also looks okay.  You can check both in if Ian is okay
>> with that.
>>
>> -Doug
>>
>> On Mon, Sep 26, 2011 at 11:41 AM, Doug Kwan (關振德)
>> <dougkwan@google.com <mailto:dougkwan@google.com>> wrote:
>>
>>    Hi Matthew,
>>
>>       Thanks for fixing that.  That patch looks okay. My only concern is
>>    that may_use_v*t_interworking are called repeatedly and their values
>>    are constant.  Can you cache the values just like may_use_blx?
>>
>>    -Doug
>>
>>    On Mon, Sep 26, 2011 at 8:09 AM, Matthew Gretton-Dann
>>    <matthew.gretton-dann@arm.com <mailto:matthew.gretton-dann@arm.com>>
>>    wrote:
>>     > All,
>>     >
>>     > The attached patch adds the options --[no-]fix-arm1176 to Gold in
>>    a similar
>>     > manner to that done to Ld earlier this year (see
>>     > http://sourceware.org/ml/binutils/2011-07/msg00235.html).
>>     >
>>     > When --fix-arm1176 is turned on (the default) ARM v5T interworking
>>     > instructions are only available for ARM v6T2 and later
>> architectures.
>>     >
>>     > Further details on the erratum can be found on ARM's
>>    documentation website:
>>     > http://infocenter.arm.com/
>>     >      User Assistance Notes
>>     >        ARM11 Processors
>>     >          ARM1176JZ-S and ARM1176JFZ-S Programmer Advice Note
>>     >
>>     > This patch depends on my recently posted fixes to v4T/v5T
>>    interworking in
>>     > gold (http://sourceware.org/ml/binutils/2011-09/msg00186.html).
>>     >
>>     > Please can someone review.
>>     >
>>     > Thanks,
>>     >
>>     > Matt
>>     >
>>     > gold/ChangeLog
>>     > 2011-09-26  Matthew Gretton-Dann<matthew.gretton-dann@arm.com
>>    <mailto:matthew.gretton-dann@arm.com>>
>>     >
>>     >        * arm.cc (Target_arm::may_use_v5t_interworking): Check
>> whether
>>     >        we are working around the ARM1176 Erratum.
>>     >        * options.h (General_options::fix_arm1176): Add option.
>>     >        * testsuite/Makefile.am: Add testcases, and keep current ones
>>     >        working.
>>     >        * testsuite/Makefile.in: Regenerate.
>>     >        * testsuite/arm_fix_1176.s: New file.
>>     >        * testsuite/arm_fix_1176.sh: Likewise.
>>     >
>>     > --
>>     > Matthew Gretton-Dann
>>     > Principal Engineer, PD Software - Tools, ARM Ltd
>>
>>
>
> --
> Matthew Gretton-Dann
> Principal Engineer, PD Software - Tools, ARM Ltd
>
>

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [RFA/gold] Patch to workaround ARM1176 BLX(immediate) Thumb to ARM issue
  2011-09-26 15:10 [RFA/gold] Patch to workaround ARM1176 BLX(immediate) Thumb to ARM issue Matthew Gretton-Dann
  2011-09-26 18:41 ` Doug Kwan (關振德)
@ 2011-11-03  3:39 ` Ian Lance Taylor
  2011-11-10 11:29   ` Matthew Gretton-Dann
  1 sibling, 1 reply; 9+ messages in thread
From: Ian Lance Taylor @ 2011-11-03  3:39 UTC (permalink / raw)
  To: Matthew Gretton-Dann; +Cc: binutils

Matthew Gretton-Dann <matthew.gretton-dann@arm.com> writes:

> 2011-09-26  Matthew Gretton-Dann<matthew.gretton-dann@arm.com>
>
> 	* arm.cc (Target_arm::may_use_v5t_interworking): Check whether
> 	we are working around the ARM1176 Erratum.
> 	* options.h (General_options::fix_arm1176): Add option.
> 	* testsuite/Makefile.am: Add testcases, and keep current ones
> 	working.
> 	* testsuite/Makefile.in: Regenerate.
> 	* testsuite/arm_fix_1176.s: New file.
> 	* testsuite/arm_fix_1176.sh: Likewise.

Committed.

Thanks.

Ian

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [RFA/gold] Patch to workaround ARM1176 BLX(immediate) Thumb to ARM issue
  2011-11-03  3:39 ` Ian Lance Taylor
@ 2011-11-10 11:29   ` Matthew Gretton-Dann
  2011-11-10 14:33     ` Tristan Gingold
  2011-11-10 18:30     ` Ian Lance Taylor
  0 siblings, 2 replies; 9+ messages in thread
From: Matthew Gretton-Dann @ 2011-11-10 11:29 UTC (permalink / raw)
  To: Ian Lance Taylor; +Cc: binutils, gingold

Ian, Tristan,

On 03/11/11 03:38, Ian Lance Taylor wrote:
> Matthew Gretton-Dann<matthew.gretton-dann@arm.com>  writes:
>
>> 2011-09-26  Matthew Gretton-Dann<matthew.gretton-dann@arm.com>
>>
>> 	* arm.cc (Target_arm::may_use_v5t_interworking): Check whether
>> 	we are working around the ARM1176 Erratum.
>> 	* options.h (General_options::fix_arm1176): Add option.
>> 	* testsuite/Makefile.am: Add testcases, and keep current ones
>> 	working.
>> 	* testsuite/Makefile.in: Regenerate.
>> 	* testsuite/arm_fix_1176.s: New file.
>> 	* testsuite/arm_fix_1176.sh: Likewise.
>
> Committed.
>
> Thanks.

Are you happy for this to be backported to the 2.22 branch?

Thanks,

Matt


-- 
Matthew Gretton-Dann
Principal Engineer, PD Software - Tools, ARM Ltd

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [RFA/gold] Patch to workaround ARM1176 BLX(immediate) Thumb to ARM issue
  2011-11-10 11:29   ` Matthew Gretton-Dann
@ 2011-11-10 14:33     ` Tristan Gingold
  2011-11-10 18:30     ` Ian Lance Taylor
  1 sibling, 0 replies; 9+ messages in thread
From: Tristan Gingold @ 2011-11-10 14:33 UTC (permalink / raw)
  To: Matthew Gretton-Dann; +Cc: Ian Lance Taylor, binutils


On Nov 10, 2011, at 12:28 PM, Matthew Gretton-Dann wrote:

> Ian, Tristan,
> 
> On 03/11/11 03:38, Ian Lance Taylor wrote:
>> Matthew Gretton-Dann<matthew.gretton-dann@arm.com>  writes:
>> 
>>> 2011-09-26  Matthew Gretton-Dann<matthew.gretton-dann@arm.com>
>>> 
>>> 	* arm.cc (Target_arm::may_use_v5t_interworking): Check whether
>>> 	we are working around the ARM1176 Erratum.
>>> 	* options.h (General_options::fix_arm1176): Add option.
>>> 	* testsuite/Makefile.am: Add testcases, and keep current ones
>>> 	working.
>>> 	* testsuite/Makefile.in: Regenerate.
>>> 	* testsuite/arm_fix_1176.s: New file.
>>> 	* testsuite/arm_fix_1176.sh: Likewise.
>> 
>> Committed.
>> 
>> Thanks.
> 
> Are you happy for this to be backported to the 2.22 branch?

Fine with me.

> 
> Thanks,
> 
> Matt
> 
> 
> -- 
> Matthew Gretton-Dann
> Principal Engineer, PD Software - Tools, ARM Ltd
> 

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [RFA/gold] Patch to workaround ARM1176 BLX(immediate) Thumb to ARM issue
  2011-11-10 11:29   ` Matthew Gretton-Dann
  2011-11-10 14:33     ` Tristan Gingold
@ 2011-11-10 18:30     ` Ian Lance Taylor
  2011-11-15 15:35       ` Matthew Gretton-Dann
  1 sibling, 1 reply; 9+ messages in thread
From: Ian Lance Taylor @ 2011-11-10 18:30 UTC (permalink / raw)
  To: Matthew Gretton-Dann; +Cc: binutils, gingold

Matthew Gretton-Dann <matthew.gretton-dann@arm.com> writes:

> Ian, Tristan,
>
> On 03/11/11 03:38, Ian Lance Taylor wrote:
>> Matthew Gretton-Dann<matthew.gretton-dann@arm.com>  writes:
>>
>>> 2011-09-26  Matthew Gretton-Dann<matthew.gretton-dann@arm.com>
>>>
>>> 	* arm.cc (Target_arm::may_use_v5t_interworking): Check whether
>>> 	we are working around the ARM1176 Erratum.
>>> 	* options.h (General_options::fix_arm1176): Add option.
>>> 	* testsuite/Makefile.am: Add testcases, and keep current ones
>>> 	working.
>>> 	* testsuite/Makefile.in: Regenerate.
>>> 	* testsuite/arm_fix_1176.s: New file.
>>> 	* testsuite/arm_fix_1176.sh: Likewise.
>>
>> Committed.
>>
>> Thanks.
>
> Are you happy for this to be backported to the 2.22 branch?

Fine with me.

Ian

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [RFA/gold] Patch to workaround ARM1176 BLX(immediate) Thumb to ARM issue
  2011-11-10 18:30     ` Ian Lance Taylor
@ 2011-11-15 15:35       ` Matthew Gretton-Dann
  0 siblings, 0 replies; 9+ messages in thread
From: Matthew Gretton-Dann @ 2011-11-15 15:35 UTC (permalink / raw)
  To: Ian Lance Taylor; +Cc: binutils, gingold

On 10/11/11 18:30, Ian Lance Taylor wrote:
> Matthew Gretton-Dann<matthew.gretton-dann@arm.com>  writes:
>
>> Ian, Tristan,
>>
>> On 03/11/11 03:38, Ian Lance Taylor wrote:
>>> Matthew Gretton-Dann<matthew.gretton-dann@arm.com>   writes:
>>>
>>>> 2011-09-26  Matthew Gretton-Dann<matthew.gretton-dann@arm.com>
>>>>
>>>> 	* arm.cc (Target_arm::may_use_v5t_interworking): Check whether
>>>> 	we are working around the ARM1176 Erratum.
>>>> 	* options.h (General_options::fix_arm1176): Add option.
>>>> 	* testsuite/Makefile.am: Add testcases, and keep current ones
>>>> 	working.
>>>> 	* testsuite/Makefile.in: Regenerate.
>>>> 	* testsuite/arm_fix_1176.s: New file.
>>>> 	* testsuite/arm_fix_1176.sh: Likewise.
>>>
>>> Committed.
>>>
>>> Thanks.
>>
>> Are you happy for this to be backported to the 2.22 branch?
>
> Fine with me.

I have now done this both for this patch and the 'Fix gold's 
understanding of ARM v4T/v5T interworking' patch.

Thanks,

Matt

-- 
Matthew Gretton-Dann
Principal Engineer, PD Software - Tools, ARM Ltd

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2011-11-15 15:35 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-09-26 15:10 [RFA/gold] Patch to workaround ARM1176 BLX(immediate) Thumb to ARM issue Matthew Gretton-Dann
2011-09-26 18:41 ` Doug Kwan (關振德)
     [not found]   ` <CAH9SEo6aeeuvp_5aFzudSy3kKcirui-pW6LR0o0ad-LjS9VdDg@mail.gmail.com>
2011-11-02 10:44     ` [PING] " Matthew Gretton-Dann
2011-11-02 19:04       ` Doug Kwan (關振德)
2011-11-03  3:39 ` Ian Lance Taylor
2011-11-10 11:29   ` Matthew Gretton-Dann
2011-11-10 14:33     ` Tristan Gingold
2011-11-10 18:30     ` Ian Lance Taylor
2011-11-15 15:35       ` Matthew Gretton-Dann

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).