summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Jacobowitz <dan@debian.org>2009-12-09 21:41:59 +0000
committerDaniel Jacobowitz <dan@debian.org>2009-12-09 21:41:59 +0000
commit247e308cead5284992513bdf289a3ff944a15faf (patch)
tree0fa03328a4c82245296b1b721fb7431d56adae2a
parent37914cfcc49adbd3008c7989d6402fddee6b8857 (diff)
downloadbinutils-redhat-247e308cead5284992513bdf289a3ff944a15faf.tar.gz
bfd/
* elf32-arm.c (elf32_arm_next_input_section): Skip sections without SEC_CODE. ld/testsuite/ * ld-arm/arm-elf.exp (armeabitests): Add farcall-data. * ld-arm/farcall-data.d, ld-arm/farcall-data.s: New. * lib/ld-lib.exp (run_ld_link_tests, run_cc_link_tests): Correct regular expression for archives.
-rw-r--r--bfd/ChangeLog5
-rw-r--r--bfd/elf32-arm.c2
-rw-r--r--ld/testsuite/ChangeLog7
-rw-r--r--ld/testsuite/ld-arm/arm-elf.exp3
-rw-r--r--ld/testsuite/ld-arm/farcall-data.d19
-rw-r--r--ld/testsuite/ld-arm/farcall-data.s14
-rw-r--r--ld/testsuite/lib/ld-lib.exp4
7 files changed, 51 insertions, 3 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 6cbee4ac7b..2591260428 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,8 @@
+2009-12-09 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * elf32-arm.c (elf32_arm_next_input_section): Skip sections without
+ SEC_CODE.
+
2009-12-08 Alan Modra <amodra@bigpond.net.au>
* elf.c (write_zeros): New function.
diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c
index 21f92a4235..2168fc04f4 100644
--- a/bfd/elf32-arm.c
+++ b/bfd/elf32-arm.c
@@ -3785,7 +3785,7 @@ elf32_arm_next_input_section (struct bfd_link_info *info,
{
asection **list = htab->input_list + isec->output_section->index;
- if (*list != bfd_abs_section_ptr)
+ if (*list != bfd_abs_section_ptr && (isec->flags & SEC_CODE) != 0)
{
/* Steal the link_sec pointer for our list. */
#define PREV_SEC(sec) (htab->stub_group[(sec)->id].link_sec)
diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog
index 537c2d6e8e..1bd1edadae 100644
--- a/ld/testsuite/ChangeLog
+++ b/ld/testsuite/ChangeLog
@@ -1,3 +1,10 @@
+2009-12-09 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * ld-arm/arm-elf.exp (armeabitests): Add farcall-data.
+ * ld-arm/farcall-data.d, ld-arm/farcall-data.s: New.
+ * lib/ld-lib.exp (run_ld_link_tests, run_cc_link_tests): Correct
+ regular expression for archives.
+
2009-11-23 Paul Brook <paul@codesourcery.com>
* ld-arm/script-type.sym: New test.
diff --git a/ld/testsuite/ld-arm/arm-elf.exp b/ld/testsuite/ld-arm/arm-elf.exp
index 8fbf8df29f..23728449e2 100644
--- a/ld/testsuite/ld-arm/arm-elf.exp
+++ b/ld/testsuite/ld-arm/arm-elf.exp
@@ -422,6 +422,9 @@ set armeabitests {
{{objdump -fdw farcall-mixed-lib.d}}
"farcall-mixed-lib.so"}
+ {"Long branch with mixed text and data" "-T arm.ld" "" {farcall-data.s}
+ {{objdump -dr farcall-data.d}}
+ "farcall-data"}
}
run_ld_link_tests $armeabitests
diff --git a/ld/testsuite/ld-arm/farcall-data.d b/ld/testsuite/ld-arm/farcall-data.d
new file mode 100644
index 0000000000..a8b231c512
--- /dev/null
+++ b/ld/testsuite/ld-arm/farcall-data.d
@@ -0,0 +1,19 @@
+.*: file format .*
+
+Disassembly of section .text:
+
+00008000 <_start>:
+ 8000: ea000000 b 8008 <__far_veneer>
+ 8004: 00000000 andeq r0, r0, r0
+
+00008008 <__far_veneer>:
+ 8008: e51ff004 ldr pc, \[pc, #-4\] ; 800c <__far_veneer\+0x4>
+ 800c: 12340000 \.word 0x12340000
+
+00008010 <after>:
+ 8010: 11111111 \.word 0x11111111
+
+Disassembly of section \.far:
+
+12340000 <far>:
+12340000: e12fff1e bx lr
diff --git a/ld/testsuite/ld-arm/farcall-data.s b/ld/testsuite/ld-arm/farcall-data.s
new file mode 100644
index 0000000000..ed661990be
--- /dev/null
+++ b/ld/testsuite/ld-arm/farcall-data.s
@@ -0,0 +1,14 @@
+ .syntax unified
+ .text
+ .global _start
+ .type _start, %function
+_start:
+ b far
+
+.section .after
+after:
+ .word 0x11111111
+
+ .section .far, "ax"
+ .type far, %function
+far: bx lr
diff --git a/ld/testsuite/lib/ld-lib.exp b/ld/testsuite/lib/ld-lib.exp
index a738747d91..65a5ffb116 100644
--- a/ld/testsuite/lib/ld-lib.exp
+++ b/ld/testsuite/lib/ld-lib.exp
@@ -1227,7 +1227,7 @@ proc run_ld_link_tests { ldtests } {
continue
}
- if { [regexp ".*a$" $binfile] } {
+ if { [regexp ".*\\.a$" $binfile] } {
if { ![ar_simple_create $ar $ld_options $binfile "$objfiles"] } {
fail $testname
set failed 1
@@ -1538,7 +1538,7 @@ proc run_cc_link_tests { ldtests } {
set cc_cmd $CC
}
- if { [regexp ".*a$" $binfile] } {
+ if { [regexp ".*\\.a$" $binfile] } {
if { ![ar_simple_create $ar $ldflags $binfile "$objfiles"] } {
fail $testname
set failed 1