From a747059210fbec5946a62431e8774190059d901d Mon Sep 17 00:00:00 2001 From: Daniel Jacobowitz Date: Wed, 9 Dec 2009 21:42:00 +0000 Subject: [PATCH] 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. --- bfd/ChangeLog | 5 +++++ bfd/elf32-arm.c | 2 +- ld/testsuite/ChangeLog | 7 +++++++ ld/testsuite/ld-arm/arm-elf.exp | 3 +++ ld/testsuite/ld-arm/farcall-data.d | 19 +++++++++++++++++++ ld/testsuite/ld-arm/farcall-data.s | 14 ++++++++++++++ ld/testsuite/lib/ld-lib.exp | 4 ++-- 7 files changed, 51 insertions(+), 3 deletions(-) create mode 100644 ld/testsuite/ld-arm/farcall-data.d create mode 100644 ld/testsuite/ld-arm/farcall-data.s diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 6cbee4ac7b3..25912604288 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2009-12-09 Daniel Jacobowitz + + * elf32-arm.c (elf32_arm_next_input_section): Skip sections without + SEC_CODE. + 2009-12-08 Alan Modra * elf.c (write_zeros): New function. diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c index 21f92a4235a..2168fc04f47 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 537c2d6e8ea..1bd1edadae6 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2009-12-09 Daniel Jacobowitz + + * 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 * 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 8fbf8df29f9..23728449e20 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 00000000000..a8b231c5126 --- /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 : + 8010: 11111111 \.word 0x11111111 + +Disassembly of section \.far: + +12340000 : +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 00000000000..ed661990be4 --- /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 a738747d910..65a5ffb116a 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 -- 2.30.2