mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-25 04:49:54 +08:00
Add cantunwind when unwind info does not match start of section.
bfd * elf32-arm.c (elf32_arm_fix_exidx_coverage): Insert cantunwind when address in first unwind entry does not match start of section. tests * ld-arm/arm-elf.exp: New test. * ld-arm/unwind-mix.d: New file. * ld-arm/unwind-mix1.s: New file. * ld-arm/unwind-mix2.s: New file.
This commit is contained in:

committed by
Nick Clifton

parent
ce5e165eae
commit
ac06903dcf
@ -1,3 +1,9 @@
|
|||||||
|
2016-01-12 Yury Usishchev <y.usishchev@samsung.com>
|
||||||
|
|
||||||
|
* elf32-arm.c (elf32_arm_fix_exidx_coverage): Insert cantunwind
|
||||||
|
when address in first unwind entry does not match start of
|
||||||
|
section.
|
||||||
|
|
||||||
2016-01-08 Richard Sandiford <richard.sandiford@arm.com>
|
2016-01-08 Richard Sandiford <richard.sandiford@arm.com>
|
||||||
Jiong Wang <jiong.wang@arm.com>
|
Jiong Wang <jiong.wang@arm.com>
|
||||||
|
|
||||||
|
@ -11740,6 +11740,18 @@ elf32_arm_fix_exidx_coverage (asection **text_section_order,
|
|||||||
/* An error? */
|
/* An error? */
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
if (last_unwind_type > 0)
|
||||||
|
{
|
||||||
|
unsigned int first_word = bfd_get_32 (ibfd, contents);
|
||||||
|
/* Add cantunwind if first unwind item does not match section
|
||||||
|
start. */
|
||||||
|
if (first_word != sec->vma)
|
||||||
|
{
|
||||||
|
insert_cantunwind_after (last_text_sec, last_exidx_sec);
|
||||||
|
last_unwind_type = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for (j = 0; j < hdr->sh_size; j += 8)
|
for (j = 0; j < hdr->sh_size; j += 8)
|
||||||
{
|
{
|
||||||
unsigned int second_word = bfd_get_32 (ibfd, contents + j + 4);
|
unsigned int second_word = bfd_get_32 (ibfd, contents + j + 4);
|
||||||
|
@ -1,3 +1,10 @@
|
|||||||
|
2016-01-12 Yury Usishchev <y.usishchev@samsung.com>
|
||||||
|
|
||||||
|
* testsuite/ld-arm/arm-elf.exp: New test.
|
||||||
|
* testsuite/ld-arm/unwind-mix.d: New file.
|
||||||
|
* testsuite/ld-arm/unwind-mix1.s: New file.
|
||||||
|
* testsuite/ld-arm/unwind-mix2.s: New file.
|
||||||
|
|
||||||
2016-01-08 Jiong Wang <jiong.wang@arm.com>
|
2016-01-08 Jiong Wang <jiong.wang@arm.com>
|
||||||
|
|
||||||
PR ld/19368
|
PR ld/19368
|
||||||
|
@ -964,5 +964,8 @@ set arm_unwind_tests {
|
|||||||
{"unwind-rel" "-r -Tarm.ld" "" "" {unwind-rel1.s unwind-rel2.s unwind-rel3.s}
|
{"unwind-rel" "-r -Tarm.ld" "" "" {unwind-rel1.s unwind-rel2.s unwind-rel3.s}
|
||||||
{{readelf -ur unwind-rel.d}}
|
{{readelf -ur unwind-rel.d}}
|
||||||
"unwind-rel"}
|
"unwind-rel"}
|
||||||
|
{"unwind-mix" "-Tarm.ld" "" "" {unwind-mix1.s unwind-mix2.s}
|
||||||
|
{{readelf -u unwind-mix.d}}
|
||||||
|
"unwind-mix"}
|
||||||
}
|
}
|
||||||
run_ld_link_tests $arm_unwind_tests
|
run_ld_link_tests $arm_unwind_tests
|
||||||
|
20
ld/testsuite/ld-arm/unwind-mix.d
Normal file
20
ld/testsuite/ld-arm/unwind-mix.d
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
|
||||||
|
Unwind table index '\.ARM\.exidx' at offset .* contains 4 entries:
|
||||||
|
|
||||||
|
0x8004 <_start>: @0x8010
|
||||||
|
Compact model index: 1
|
||||||
|
0xc9 0x40 pop {D4}
|
||||||
|
0xc9 0x00 pop {D0}
|
||||||
|
0xa8 pop {r4, r14}
|
||||||
|
0xb0 finish
|
||||||
|
|
||||||
|
0x8008 <__aeabi_unwind_cpp_pr1>: 0x1 \[cantunwind\]
|
||||||
|
|
||||||
|
0x800c <end>: 0x80a8b0b0
|
||||||
|
Compact model index: 0
|
||||||
|
0xa8 pop {r4, r14}
|
||||||
|
0xb0 finish
|
||||||
|
0xb0 finish
|
||||||
|
|
||||||
|
0x8010 <end\+0x4>: 0x1 \[cantunwind\]
|
||||||
|
|
16
ld/testsuite/ld-arm/unwind-mix1.s
Normal file
16
ld/testsuite/ld-arm/unwind-mix1.s
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
.syntax unified
|
||||||
|
.text
|
||||||
|
.global __aeabi_unwind_cpp_pr0
|
||||||
|
.type __aeabi_unwind_cpp_pr0, %function
|
||||||
|
__aeabi_unwind_cpp_pr0:
|
||||||
|
bx lr
|
||||||
|
|
||||||
|
.global _start
|
||||||
|
.type _start, %function
|
||||||
|
_start:
|
||||||
|
.fnstart
|
||||||
|
.save {r4, lr}
|
||||||
|
.vsave {d0}
|
||||||
|
.vsave {d4}
|
||||||
|
bx lr
|
||||||
|
.fnend
|
15
ld/testsuite/ld-arm/unwind-mix2.s
Normal file
15
ld/testsuite/ld-arm/unwind-mix2.s
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
.syntax unified
|
||||||
|
.text
|
||||||
|
.global __aeabi_unwind_cpp_pr1
|
||||||
|
.type __aeabi_unwind_cpp_pr1, %function
|
||||||
|
__aeabi_unwind_cpp_pr1:
|
||||||
|
bx lr
|
||||||
|
|
||||||
|
.global end
|
||||||
|
.type end, %function
|
||||||
|
end:
|
||||||
|
.fnstart
|
||||||
|
.save {r4, lr}
|
||||||
|
bx lr
|
||||||
|
.fnend
|
||||||
|
|
Reference in New Issue
Block a user