aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristophe Lyon <christophe.lyon@st.com>2009-02-18 16:56:37 +0000
committerChristophe Lyon <christophe.lyon@st.com>2009-02-18 16:56:37 +0000
commit90d8a22ca2f2b04b42c5049d54d32e54081b74b4 (patch)
tree6f052e0025a6446c41c234264e5be19269e3e14f
parent121230679fd8a176e4d08340bf4ce9027426da81 (diff)
downloadgdb-90d8a22ca2f2b04b42c5049d54d32e54081b74b4.zip
gdb-90d8a22ca2f2b04b42c5049d54d32e54081b74b4.tar.gz
gdb-90d8a22ca2f2b04b42c5049d54d32e54081b74b4.tar.bz2
2009-02-18 Christophe Lyon <christophe.lyon@st.com>
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.
-rw-r--r--bfd/ChangeLog6
-rw-r--r--bfd/elf32-arm.c7
-rw-r--r--ld/testsuite/ChangeLog9
-rw-r--r--ld/testsuite/ld-arm/farcall-arm-arm-pic-veneer.d2
-rw-r--r--ld/testsuite/ld-arm/farcall-arm-thumb-blx-pic-veneer.d2
-rw-r--r--ld/testsuite/ld-arm/farcall-arm-thumb-pic-veneer.d2
-rw-r--r--ld/testsuite/ld-arm/farcall-thumb-arm-blx-pic-veneer.d2
-rw-r--r--ld/testsuite/ld-arm/farcall-thumb-thumb-blx-pic-veneer.d2
8 files changed, 25 insertions, 7 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 977c9ab..8111592 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,9 @@
+2009-02-18 Christophe Lyon <christophe.lyon@st.com>
+
+ * 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 <bjoern.m.haase@web.de>
PR 9841
diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c
index b1129d8..04f5405 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 e579742..c1ab26f 100644
--- a/ld/testsuite/ChangeLog
+++ b/ld/testsuite/ChangeLog
@@ -1,3 +1,12 @@
+2009-02-18 Christophe Lyon <christophe.lyon@st.com>
+
+ * 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 <joseph@codesourcery.com>
* 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 1fd79a7..39fb5c8 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 4fbba82..ede0c84 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 4fbba82..ede0c84 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 db4df3c..c824c5f 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 06107b7..b6e3371 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>: