aboutsummaryrefslogtreecommitdiff
path: root/ld/testsuite
diff options
context:
space:
mode:
authorYuri Gribov <y.gribov@samsung.com>2014-02-27 14:35:37 +0000
committerNick Clifton <nickc@redhat.com>2014-02-27 14:35:37 +0000
commit1db37fe62781b677a37acbe801c1e69d8912a124 (patch)
tree48caffe8619eea72d91b80bb71ca0a6632bc5a63 /ld/testsuite
parentfa96cb382c12b099675c5cc238aaa7352a3fd3d7 (diff)
downloadgdb-1db37fe62781b677a37acbe801c1e69d8912a124.zip
gdb-1db37fe62781b677a37acbe801c1e69d8912a124.tar.gz
gdb-1db37fe62781b677a37acbe801c1e69d8912a124.tar.bz2
This patch adds support for ARM PLT entries that support a full 32-bit offset range.
Enabled via the use of a new linker command line option: --long-plt. * bfd-in.h: Add export of bfd_elf32_arm_use_long_plt. * bfd-in2.h: Regenerate. * elf32-arm.c (elf32_arm_plt_entry_long): New array. (elf32_arm_link_hash_table_create): Set plt_entry_size to 16 if using long PLT entries. (bfd_elf32_arm_use_long_plt): New function. (elf32_arm_populate_plt_entry): Add support for long PLT entries. * emultempl/armelf.em (OPTION_LONG_PLT): Define. (PARSE_AND_LIST_LONGOPTS): Add long-plt. (PARSE_AND_LIST_OPTIONS): Likewise. (PARSE_AND_LIST_ARGS_CASES): Handle long-plt. * ld.texinfo: Document --long-plt. * ld-arm/long-plt-format.s: New test case. * ld-arm/long-plt-format.d: Expected disassembly. * ld-arm/arm-elf.exp: Run the new test.
Diffstat (limited to 'ld/testsuite')
-rw-r--r--ld/testsuite/ChangeLog6
-rw-r--r--ld/testsuite/ld-arm/arm-elf.exp6
-rw-r--r--ld/testsuite/ld-arm/long-plt-format.d15
-rw-r--r--ld/testsuite/ld-arm/long-plt-format.s7
4 files changed, 33 insertions, 1 deletions
diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog
index 1af8109..84ca6b1 100644
--- a/ld/testsuite/ChangeLog
+++ b/ld/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2014-02-27 Yuri Gribov <y.gribov@samsung.com>
+
+ * ld-arm/long-plt-format.s: New test case.
+ * ld-arm/long-plt-format.d: Expected disassembly.
+ * ld-arm/arm-elf.exp: Run the new test.
+
2014-02-27 Nick Clifton <nickc@redhat.com>
* ld-pe/longsecn-1.d: Allow for extra sections.
diff --git a/ld/testsuite/ld-arm/arm-elf.exp b/ld/testsuite/ld-arm/arm-elf.exp
index 4c0f802..ec569ca 100644
--- a/ld/testsuite/ld-arm/arm-elf.exp
+++ b/ld/testsuite/ld-arm/arm-elf.exp
@@ -1,5 +1,5 @@
# Expect script for various ARM ELF tests.
-# Copyright 2002-2013 Free Software Foundation, Inc.
+# Copyright 2002-2014 Free Software Foundation, Inc.
#
# This file is part of the GNU Binutils.
#
@@ -188,6 +188,10 @@ set armelftests_common {
"" {exec-got-1b.s}
{{readelf --relocs exec-got-1.d}}
"exec-got-1"}
+ {"Long PLT entries in executables" "--long-plt -shared --section-start=.plt=0x200 --section-start=.got=0xf0000300" ""
+ "" {long-plt-format.s}
+ {{objdump "-d -j .plt" long-plt-format.d}}
+ "long-plt-format"}
{"abs call" "-T arm.ld" "" "" {abs-call-1.s}
{{objdump -d abs-call-1.d}}
"abs-call-1"}
diff --git a/ld/testsuite/ld-arm/long-plt-format.d b/ld/testsuite/ld-arm/long-plt-format.d
new file mode 100644
index 0000000..c08cb71
--- /dev/null
+++ b/ld/testsuite/ld-arm/long-plt-format.d
@@ -0,0 +1,15 @@
+.*: file format elf32-.*
+
+
+Disassembly of section .plt:
+
+00000200 <.plt>:
+ 200: .*
+ 204: .*
+ 208: .*
+ 20c: .*
+ 210: .* .word .*
+ 214: .* add ip, pc, #-268435456 ; 0xf0000000
+ 218: .* add ip, ip, #0, 12
+ 21c: .* add ip, ip, #0, 20
+ 220: .* ldr pc, [ip, #[0-9]*]! ; 0x.*
diff --git a/ld/testsuite/ld-arm/long-plt-format.s b/ld/testsuite/ld-arm/long-plt-format.s
new file mode 100644
index 0000000..bb0c3a2
--- /dev/null
+++ b/ld/testsuite/ld-arm/long-plt-format.s
@@ -0,0 +1,7 @@
+ .globl _start
+ .type _start,%function
+ .globl foo
+_start:
+ bl foo(PLT)
+ .size _start,.-_start
+