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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 健身后小腿粗了怎么办 背心式内衣大了怎么办 运动文胸买大了怎么办 喝碳酸饮料胖了怎么办 奥鹏学费迟交了怎么办 侧乌鸦做不起来怎么办 发烧很难受怎么办 知乎 上班后奶水越来越少怎么办 孕晚期胖的厉害怎么办 怀孕后猛长胖怎么办啊 怀孕坐了按摩椅怎么办 怀孕8个月胎位不正怎么办 缓刑期间被打了怎么办 非法集资人跑了怎么办 玩游戏恶心想吐怎么办 中奖了填了信息怎么办 穿开衫老是溜肩怎么办 开车开久了腰疼怎么办 西药吃了胃难受怎么办 铁海棠叶子变黄怎么办 四季海棠根烂了怎么办 水银弄到皮肤上怎么办 头条指数下降了怎么办 下面长泡泡破了怎么办 期望工资说低了怎么办 机票买了后降价怎么办 刚谈对象没话说怎么办 微信好友太少怎么办 qq头像不显示了怎么办 找借口不出去玩怎么办 老婆不花我的钱怎么办 家里养兔子很臭怎么办 养兔子家里好臭怎么办 昌硕辞职不批怎么办 昌硕怎么办自离手续 别人注册了35类,怎么办 id忘了密码知道怎么办 id的密码忘了怎么办 电脑忘记密码怎么办u盘 微博用户名忘了怎么办 苹果ad密码忘记了怎么办