From 96c23d596607cc7143e0ea1f4fee260977aec18b Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Thu, 30 Apr 2009 00:01:11 +0000 Subject: [PATCH] bfd: * elf32-arm.c (elf32_arm_check_relocs): Give errors for absolute MOVW and MOVT relocations in a shared library link. ld/testsuite: * 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. --- bfd/ChangeLog | 5 +++++ bfd/elf32-arm.c | 19 +++++++++++++++---- ld/testsuite/ChangeLog | 8 ++++++++ ld/testsuite/ld-arm/arm-elf.exp | 4 ++++ ld/testsuite/ld-arm/movw-shared-1.d | 4 ++++ ld/testsuite/ld-arm/movw-shared-1.s | 5 +++++ ld/testsuite/ld-arm/movw-shared-2.d | 4 ++++ ld/testsuite/ld-arm/movw-shared-2.s | 5 +++++ ld/testsuite/ld-arm/movw-shared-3.d | 4 ++++ ld/testsuite/ld-arm/movw-shared-3.s | 6 ++++++ ld/testsuite/ld-arm/movw-shared-4.d | 4 ++++ ld/testsuite/ld-arm/movw-shared-4.s | 6 ++++++ 12 files changed, 70 insertions(+), 4 deletions(-) create mode 100644 ld/testsuite/ld-arm/movw-shared-1.d create mode 100644 ld/testsuite/ld-arm/movw-shared-1.s create mode 100644 ld/testsuite/ld-arm/movw-shared-2.d create mode 100644 ld/testsuite/ld-arm/movw-shared-2.s create mode 100644 ld/testsuite/ld-arm/movw-shared-3.d create mode 100644 ld/testsuite/ld-arm/movw-shared-3.s create mode 100644 ld/testsuite/ld-arm/movw-shared-4.d create mode 100644 ld/testsuite/ld-arm/movw-shared-4.s diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 51f059bcadc..25c21ef69e6 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2009-04-30 Joseph Myers + + * elf32-arm.c (elf32_arm_check_relocs): Give errors for absolute + MOVW and MOVT relocations in a shared library link. + 2009-04-27 Anthony Green * verilog.c: New file. diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c index d94744a6129..831f458f635 100644 --- a/bfd/elf32-arm.c +++ b/bfd/elf32-arm.c @@ -9808,16 +9808,27 @@ elf32_arm_check_relocs (bfd *abfd, struct bfd_link_info *info, 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; diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index dec4cbba102..4542a246149 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2009-04-30 Joseph Myers + + * 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. + 2009-04-29 Chris Demetriou * ld-elfvers/vers.exp (vers4b): New test to verify that diff --git a/ld/testsuite/ld-arm/arm-elf.exp b/ld/testsuite/ld-arm/arm-elf.exp index b524cceef89..04bbcf2a84a 100644 --- a/ld/testsuite/ld-arm/arm-elf.exp +++ b/ld/testsuite/ld-arm/arm-elf.exp @@ -187,6 +187,10 @@ run_dump_test "group-relocs-ldc-bad" 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. diff --git a/ld/testsuite/ld-arm/movw-shared-1.d b/ld/testsuite/ld-arm/movw-shared-1.d new file mode 100644 index 00000000000..5a058185b59 --- /dev/null +++ b/ld/testsuite/ld-arm/movw-shared-1.d @@ -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 -fPIC diff --git a/ld/testsuite/ld-arm/movw-shared-1.s b/ld/testsuite/ld-arm/movw-shared-1.s new file mode 100644 index 00000000000..512946a2562 --- /dev/null +++ b/ld/testsuite/ld-arm/movw-shared-1.s @@ -0,0 +1,5 @@ +.arch armv7-a +.text +.syntax unified +f: +movw r0, #:lower16:a diff --git a/ld/testsuite/ld-arm/movw-shared-2.d b/ld/testsuite/ld-arm/movw-shared-2.d new file mode 100644 index 00000000000..08ceaf07bd5 --- /dev/null +++ b/ld/testsuite/ld-arm/movw-shared-2.d @@ -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 -fPIC diff --git a/ld/testsuite/ld-arm/movw-shared-2.s b/ld/testsuite/ld-arm/movw-shared-2.s new file mode 100644 index 00000000000..bd70b7699d1 --- /dev/null +++ b/ld/testsuite/ld-arm/movw-shared-2.s @@ -0,0 +1,5 @@ +.arch armv7-a +.text +.syntax unified +f: +movt r0, #:upper16:b diff --git a/ld/testsuite/ld-arm/movw-shared-3.d b/ld/testsuite/ld-arm/movw-shared-3.d new file mode 100644 index 00000000000..90b9cf148e1 --- /dev/null +++ b/ld/testsuite/ld-arm/movw-shared-3.d @@ -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 -fPIC diff --git a/ld/testsuite/ld-arm/movw-shared-3.s b/ld/testsuite/ld-arm/movw-shared-3.s new file mode 100644 index 00000000000..a4db9a96220 --- /dev/null +++ b/ld/testsuite/ld-arm/movw-shared-3.s @@ -0,0 +1,6 @@ +.arch armv7-a +.text +.syntax unified +f: +.thumb +movw r0, #:lower16:c diff --git a/ld/testsuite/ld-arm/movw-shared-4.d b/ld/testsuite/ld-arm/movw-shared-4.d new file mode 100644 index 00000000000..cc7a418b525 --- /dev/null +++ b/ld/testsuite/ld-arm/movw-shared-4.d @@ -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 -fPIC diff --git a/ld/testsuite/ld-arm/movw-shared-4.s b/ld/testsuite/ld-arm/movw-shared-4.s new file mode 100644 index 00000000000..09f2952364a --- /dev/null +++ b/ld/testsuite/ld-arm/movw-shared-4.s @@ -0,0 +1,6 @@ +.arch armv7-a +.text +.syntax unified +f: +.thumb +movt r0, #:upper16:d -- 2.30.2