From 90d8a22ca2f2b04b42c5049d54d32e54081b74b4 Mon Sep 17 00:00:00 2001 From: Christophe Lyon Date: Wed, 18 Feb 2009 16:56:37 +0000 Subject: [PATCH] 2009-02-18 Christophe Lyon bfd/ * elf32-arm.c (arm_build_one_stub): Fix relocation target for pic stub. Catch default case error. (arm_map_one_stub): Add missing Thumb mapping symbol. testsuite/ * ld-arm/farcall-arm-arm-pic-veneer.d, ld-arm/farcall-arm-thumb-blx-pic-veneer.d, ld-arm/farcall-arm-thumb-pic-veneer.d, ld-arm/farcall-thumb-arm-blx-pic-veneer.d, ld-arm/farcall-thumb-thumb-blx-pic-veneer.d: Fix expected stub target. --- bfd/ChangeLog | 6 ++++++ bfd/elf32-arm.c | 7 +++++-- ld/testsuite/ChangeLog | 9 +++++++++ ld/testsuite/ld-arm/farcall-arm-arm-pic-veneer.d | 2 +- ld/testsuite/ld-arm/farcall-arm-thumb-blx-pic-veneer.d | 2 +- ld/testsuite/ld-arm/farcall-arm-thumb-pic-veneer.d | 2 +- ld/testsuite/ld-arm/farcall-thumb-arm-blx-pic-veneer.d | 2 +- ld/testsuite/ld-arm/farcall-thumb-thumb-blx-pic-veneer.d | 2 +- 8 files changed, 25 insertions(+), 7 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 977c9ab962d..81115920e92 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2009-02-18 Christophe Lyon + + * elf32-arm.c (arm_build_one_stub): Fix relocation target for pic + stub. Catch default case error. + (arm_map_one_stub): Add missing Thumb mapping symbol. + 2009-02-18 Bjoern Haase PR 9841 diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c index b1129d8b465..04f54054915 100644 --- a/bfd/elf32-arm.c +++ b/bfd/elf32-arm.c @@ -2069,7 +2069,7 @@ static const bfd_vma elf32_arm_stub_long_branch_any_any_pic[] = { 0xe59fc000, /* ldr r12, [pc] */ 0xe08ff00c, /* add pc, pc, ip */ - 0x00000000, /* dcd R_ARM_REL32(X) */ + 0x00000000, /* dcd R_ARM_REL32(X-4) */ }; /* Section name for stubs is the associated section name plus this @@ -3208,9 +3208,10 @@ arm_build_one_stub (struct bfd_hash_entry *gen_entry, start of the stub. */ _bfd_final_link_relocate (elf32_arm_howto_from_type (R_ARM_REL32), stub_bfd, stub_sec, stub_sec->contents, - stub_entry->stub_offset + 8, sym_value, 0); + stub_entry->stub_offset + 8, sym_value, -4); break; default: + BFD_FAIL(); break; } @@ -11704,6 +11705,8 @@ arm_map_one_stub (struct bfd_hash_entry * gen_entry, case arm_stub_short_branch_v4t_thumb_arm: if (!elf32_arm_output_stub_sym (osi, stub_name, addr | 1, 8)) return FALSE; + if (!elf32_arm_output_map_sym (osi, ARM_MAP_THUMB, addr)) + return FALSE; if (!elf32_arm_output_map_sym (osi, ARM_MAP_ARM, addr + 4)) return FALSE; break; diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index e579742200c..c1ab26fa76e 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,12 @@ +2009-02-18 Christophe Lyon + + * ld-arm/farcall-arm-arm-pic-veneer.d, + ld-arm/farcall-arm-thumb-blx-pic-veneer.d, + ld-arm/farcall-arm-thumb-pic-veneer.d, + ld-arm/farcall-thumb-arm-blx-pic-veneer.d, + ld-arm/farcall-thumb-thumb-blx-pic-veneer.d: Fix expected stub + target. + 2009-02-06 Joseph Myers * lib/ld-lib.exp (check_gc_sections_available): Return 0 for diff --git a/ld/testsuite/ld-arm/farcall-arm-arm-pic-veneer.d b/ld/testsuite/ld-arm/farcall-arm-arm-pic-veneer.d index 1fd79a7e690..39fb5c89ce6 100644 --- a/ld/testsuite/ld-arm/farcall-arm-arm-pic-veneer.d +++ b/ld/testsuite/ld-arm/farcall-arm-arm-pic-veneer.d @@ -5,7 +5,7 @@ Disassembly of section .text: 00001000 <__bar_veneer>: 1000: e59fc000 ldr ip, \[pc, #0\] ; 1008 <__bar_veneer\+0x8> 1004: e08ff00c add pc, pc, ip - 1008: 02000018 .word 0x02000018 + 1008: 02000014 .word 0x02000014 100c: 00000000 .word 0x00000000 00001010 <_start>: diff --git a/ld/testsuite/ld-arm/farcall-arm-thumb-blx-pic-veneer.d b/ld/testsuite/ld-arm/farcall-arm-thumb-blx-pic-veneer.d index 4fbba82bd3e..ede0c84e431 100644 --- a/ld/testsuite/ld-arm/farcall-arm-thumb-blx-pic-veneer.d +++ b/ld/testsuite/ld-arm/farcall-arm-thumb-blx-pic-veneer.d @@ -5,7 +5,7 @@ Disassembly of section .text: 00001000 <__bar_from_arm>: 1000: e59fc000 ldr ip, \[pc, #0\] ; 1008 <__bar_from_arm\+0x8> 1004: e08ff00c add pc, pc, ip - 1008: 0200000d .word 0x0200000d + 1008: 02000009 .word 0x02000009 100c: 00000000 .word 0x00000000 00001010 <_start>: diff --git a/ld/testsuite/ld-arm/farcall-arm-thumb-pic-veneer.d b/ld/testsuite/ld-arm/farcall-arm-thumb-pic-veneer.d index 4fbba82bd3e..ede0c84e431 100644 --- a/ld/testsuite/ld-arm/farcall-arm-thumb-pic-veneer.d +++ b/ld/testsuite/ld-arm/farcall-arm-thumb-pic-veneer.d @@ -5,7 +5,7 @@ Disassembly of section .text: 00001000 <__bar_from_arm>: 1000: e59fc000 ldr ip, \[pc, #0\] ; 1008 <__bar_from_arm\+0x8> 1004: e08ff00c add pc, pc, ip - 1008: 0200000d .word 0x0200000d + 1008: 02000009 .word 0x02000009 100c: 00000000 .word 0x00000000 00001010 <_start>: diff --git a/ld/testsuite/ld-arm/farcall-thumb-arm-blx-pic-veneer.d b/ld/testsuite/ld-arm/farcall-thumb-arm-blx-pic-veneer.d index db4df3cdf97..c824c5f0f82 100644 --- a/ld/testsuite/ld-arm/farcall-thumb-arm-blx-pic-veneer.d +++ b/ld/testsuite/ld-arm/farcall-thumb-arm-blx-pic-veneer.d @@ -5,7 +5,7 @@ Disassembly of section .text: 00001000 <__bar_from_thumb>: 1000: e59fc000 ldr ip, \[pc, #0\] ; 1008 <__bar_from_thumb\+0x8> 1004: e08ff00c add pc, pc, ip - 1008: 0200000c .word 0x0200000c + 1008: 02000008 .word 0x02000008 100c: 00000000 .word 0x00000000 00001010 <_start>: diff --git a/ld/testsuite/ld-arm/farcall-thumb-thumb-blx-pic-veneer.d b/ld/testsuite/ld-arm/farcall-thumb-thumb-blx-pic-veneer.d index 06107b7170b..b6e337169fd 100644 --- a/ld/testsuite/ld-arm/farcall-thumb-thumb-blx-pic-veneer.d +++ b/ld/testsuite/ld-arm/farcall-thumb-thumb-blx-pic-veneer.d @@ -5,7 +5,7 @@ Disassembly of section .text: 00001000 <__bar_veneer>: 1000: e59fc000 ldr ip, \[pc, #0\] ; 1008 <__bar_veneer\+0x8> 1004: e08ff00c add pc, pc, ip - 1008: 0200000d .word 0x0200000d + 1008: 02000009 .word 0x02000009 100c: 00000000 .word 0x00000000 00001010 <_start>: -- 2.30.2