Detect ARM MOVW/MOVT relocations in shared library links
来源:互联网 发布:恒韵琴行 淘宝 编辑:程序博客网 时间:2024/05/21 16:59
binutils 组的一个讨论
https://sourceware.org/ml/binutils/2009-04/msg00426.html
Detect ARM MOVW/MOVT relocations in shared library links
- From: "Joseph S. Myers" <joseph at codesourcery dot com>
- To: binutils at sourceware dot org
- Date: Mon, 27 Apr 2009 22:06:39 +0000 (UTC)
- Subject: Detect ARM MOVW/MOVT relocations in shared library links
ARMv7 has MOVW and MOVT instructions for loading constants withoutneeding a constant pool, and associated relocations for when thoseconstants are symbol addresses.Of course PIC code can't use these instructions to load absolutesymbol addresses. This patch adds linker checks for linking objectsusing the relevant relocations into shared libraries, to detect thecommon mistake (for people coming from x86) of building objectswithout -fPIC and linking them into a shared library; the previousbehavior was silently dropping the relocations and so generating abroken shared library, which is obviously undesirable.Tested with no regressions with cross to arm-none-eabi. OK to commit?This certainly does not fix every case of ARM relocations that areeither always unsafe for objects linked into shared libraries, orunsafe for such objects if the symbol referenced might not be resolvedwithin the library at runtime; there are many other cases that mayhave similar issues, but these are the ones observed to cause problemsin practice. ("Unsafe" means not fully resolved at static link timeand not converted to a dynamic relocation or no suitable dynamicrelocation available to which to convert the relocation.)bfd:2009-04-27 Joseph Myers <joseph@codesourcery.com>* elf32-arm.c (elf32_arm_check_relocs): Give errors for absoluteMOVW and MOVT relocations in a shared library linkld/testsuite:2009-04-27 Joseph Myers <joseph@codesourcery.com>* ld-arm/movw-shared-1.d, ld-arm/movw-shared-1.s,ld-arm/movw-shared-2.d, ld-arm/movw-shared-2.s,ld-arm/movw-shared-3.d, ld-arm/movw-shared-3.s,ld-arm/movw-shared-4.d, ld-arm/movw-shared-4.s: New tests.* ld-arm/arm-elf.exp: Run these new tests.Index: bfd/elf32-arm.c===================================================================RCS file: /cvs/src/src/bfd/elf32-arm.c,vretrieving revision 1.189diff -u -r1.189 elf32-arm.c--- bfd/elf32-arm.c22 Apr 2009 14:01:30 -00001.189+++ bfd/elf32-arm.c27 Apr 2009 21:45:11 -0000@@ -9808,16 +9808,27 @@ needs_plt = 1; goto normal_reloc; + case R_ARM_MOVW_ABS_NC:+ case R_ARM_MOVT_ABS:+ case R_ARM_THM_MOVW_ABS_NC:+ case R_ARM_THM_MOVT_ABS:+ if (info->shared)+ {+(*_bfd_error_handler)+ (_("%B: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC"),+ abfd, elf32_arm_howto_table_1[r_type].name,+ (h) ? h->root.root.string : "a local symbol");+bfd_set_error (bfd_error_bad_value);+return FALSE;+ }++ /* Fall through. */ case R_ARM_ABS32: case R_ARM_ABS32_NOI: case R_ARM_REL32: case R_ARM_REL32_NOI:- case R_ARM_MOVW_ABS_NC:- case R_ARM_MOVT_ABS: case R_ARM_MOVW_PREL_NC: case R_ARM_MOVT_PREL:- case R_ARM_THM_MOVW_ABS_NC:- case R_ARM_THM_MOVT_ABS: case R_ARM_THM_MOVW_PREL_NC: case R_ARM_THM_MOVT_PREL: needs_plt = 0;Index: ld/testsuite/ld-arm/arm-elf.exp===================================================================RCS file: /cvs/src/src/ld/testsuite/ld-arm/arm-elf.exp,vretrieving revision 1.54diff -u -r1.54 arm-elf.exp--- ld/testsuite/ld-arm/arm-elf.exp17 Apr 2009 13:04:41 -00001.54+++ ld/testsuite/ld-arm/arm-elf.exp27 Apr 2009 21:45:11 -0000@@ -187,6 +187,10 @@ run_dump_test "thumb2-bl-undefweak" run_dump_test "thumb2-bl-undefweak1" run_dump_test "emit-relocs1"+run_dump_test "movw-shared-1"+run_dump_test "movw-shared-2"+run_dump_test "movw-shared-3"+run_dump_test "movw-shared-4" # Exclude non-ARM-EABI targets. Index: ld/testsuite/ld-arm/movw-shared-1.d===================================================================RCS file: ld/testsuite/ld-arm/movw-shared-1.ddiff -N ld/testsuite/ld-arm/movw-shared-1.d--- /dev/null1 Jan 1970 00:00:00 -0000+++ ld/testsuite/ld-arm/movw-shared-1.d27 Apr 2009 21:45:11 -0000@@ -0,0 +1,4 @@+#name: MOVW/MOVT shared libraries test 1+#source: movw-shared-1.s+#ld: -shared+#error: .*: relocation R_ARM_MOVW_ABS_NC against `a' can not be used when making a shared object; recompile with -fPICIndex: ld/testsuite/ld-arm/movw-shared-1.s===================================================================RCS file: ld/testsuite/ld-arm/movw-shared-1.sdiff -N ld/testsuite/ld-arm/movw-shared-1.s--- /dev/null1 Jan 1970 00:00:00 -0000+++ ld/testsuite/ld-arm/movw-shared-1.s27 Apr 2009 21:45:11 -0000@@ -0,0 +1,5 @@+.arch armv7-a+.text+.syntax unified+f:+movw r0, #:lower16:aIndex: ld/testsuite/ld-arm/movw-shared-2.d===================================================================RCS file: ld/testsuite/ld-arm/movw-shared-2.ddiff -N ld/testsuite/ld-arm/movw-shared-2.d--- /dev/null1 Jan 1970 00:00:00 -0000+++ ld/testsuite/ld-arm/movw-shared-2.d27 Apr 2009 21:45:11 -0000@@ -0,0 +1,4 @@+#name: MOVW/MOVT shared libraries test 2+#source: movw-shared-2.s+#ld: -shared+#error: .*: relocation R_ARM_MOVT_ABS against `b' can not be used when making a shared object; recompile with -fPICIndex: ld/testsuite/ld-arm/movw-shared-2.s===================================================================RCS file: ld/testsuite/ld-arm/movw-shared-2.sdiff -N ld/testsuite/ld-arm/movw-shared-2.s--- /dev/null1 Jan 1970 00:00:00 -0000+++ ld/testsuite/ld-arm/movw-shared-2.s27 Apr 2009 21:45:11 -0000@@ -0,0 +1,5 @@+.arch armv7-a+.text+.syntax unified+f:+movt r0, #:upper16:bIndex: ld/testsuite/ld-arm/movw-shared-3.d===================================================================RCS file: ld/testsuite/ld-arm/movw-shared-3.ddiff -N ld/testsuite/ld-arm/movw-shared-3.d--- /dev/null1 Jan 1970 00:00:00 -0000+++ ld/testsuite/ld-arm/movw-shared-3.d27 Apr 2009 21:45:11 -0000@@ -0,0 +1,4 @@+#name: MOVW/MOVT shared libraries test 3+#source: movw-shared-3.s+#ld: -shared+#error: .*: relocation R_ARM_THM_MOVW_ABS_NC against `c' can not be used when making a shared object; recompile with -fPICIndex: ld/testsuite/ld-arm/movw-shared-3.s===================================================================RCS file: ld/testsuite/ld-arm/movw-shared-3.sdiff -N ld/testsuite/ld-arm/movw-shared-3.s--- /dev/null1 Jan 1970 00:00:00 -0000+++ ld/testsuite/ld-arm/movw-shared-3.s27 Apr 2009 21:45:11 -0000@@ -0,0 +1,6 @@+.arch armv7-a+.text+.syntax unified+f:+.thumb+movw r0, #:lower16:cIndex: ld/testsuite/ld-arm/movw-shared-4.d===================================================================RCS file: ld/testsuite/ld-arm/movw-shared-4.ddiff -N ld/testsuite/ld-arm/movw-shared-4.d--- /dev/null1 Jan 1970 00:00:00 -0000+++ ld/testsuite/ld-arm/movw-shared-4.d27 Apr 2009 21:45:11 -0000@@ -0,0 +1,4 @@+#name: MOVW/MOVT shared libraries test 4+#source: movw-shared-4.s+#ld: -shared+#error: .*: relocation R_ARM_THM_MOVT_ABS against `d' can not be used when making a shared object; recompile with -fPICIndex: ld/testsuite/ld-arm/movw-shared-4.s===================================================================RCS file: ld/testsuite/ld-arm/movw-shared-4.sdiff -N ld/testsuite/ld-arm/movw-shared-4.s--- /dev/null1 Jan 1970 00:00:00 -0000+++ ld/testsuite/ld-arm/movw-shared-4.s27 Apr 2009 21:45:11 -0000@@ -0,0 +1,6 @@+.arch armv7-a+.text+.syntax unified+f:+.thumb+movt r0, #:upper16:d-- Joseph S. Myersjoseph@codesourcery.com
0 0
- Detect ARM MOVW/MOVT relocations in shared library links
- movw与movt
- Shared Library in X86/ARM
- Face detect links
- Setting shared (dynamic) library in Eclipse C++ in Linux
- WebSphere Class Loaders and Shared Library, Part 3 (Class loader in WebSphre Portal + Shared Library )
- gcc option for looking for shared library in current path.
- How-to use a shared library in native-activity
- At least one valid code-source or import-shared-library element is required for shared-library "global.libraries" in /embedded-
- Qt 创建shared library,调用shared library
- Use MFC in a Static Library 和 use MFC in a Shared DLL 区别
- Use MFC in a Static Library 和 use MFC in a Shared DLL 的区别
- Solaris shared library FAQ
- Build Shared Library
- Shared Library Search Paths
- load shared library
- Qt创建shared library
- 创建shared library
- java实现文件下载的几种情况
- highcharter R语言
- FIRST集、FOLLOW集和SELECT集
- uva 10553 Treasure Map
- poj 3368 (线段树pascal)
- Detect ARM MOVW/MOVT relocations in shared library links
- HDOJ/HDU 1062 Text Reverse(字符串翻转~)
- ArcBall坐标旋转三维物体原理
- Android-onInterceptTouchEvent()和onTouchEvent()总结
- matlab图像处理基础知识0(双线性插值matlab实现--调整水平和垂直放大倍数)
- Mac - 终端报错 -bash: startup.sh: command not found
- 开源消息队列ActiveMQ使用 .net window
- ios JSON NSString to NSMutableDictionary
- 【转载】sql 如何判断一个表是否存在