mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-27 04:52:05 +08:00
2468f9c95d
bfd/ * bfd-in.h (elf32_arm_fix_exidx_coverage): Add prototype. * bfd-in2.h: Regenerate. * elf32-arm.c (arm_unwind_edit_type, arm_unwind_table_edit): Define. (_arm_elf_section_data): Add text and exidx fields. (add_unwind_table_edit, get_arm_elf_section_data, adjust_exidx_size, insert_cantunwind_after, elf32_arm_fix_exidx_coverage, offset_prel31, copy_exidx_entry): New functions. (elf32_arm_write_section): Fixup .ARM.exidx contents. ld/ * emultempl/armelf.em (compare_output_sec_vma): New function. (gld${EMULATION_NAME}_finish): Add exidx munging code. ld/testsuite/ * ld-arm/arm.ld: Add .ARM.exidx and .ARM.extab. * ld-arm/arm-elf.exp: Add unwind-[1-4]. * ld-arm/unwind-1.d: New test. * ld-arm/unwind-1.s: New test. * ld-arm/unwind-2.d: New test. * ld-arm/unwind-2.s: New test. * ld-arm/unwind-3.d: New test. * ld-arm/unwind-3.s: New test. * ld-arm/unwind-4.d: New test. * ld-arm/unwind-4.s: New test.
50 lines
833 B
ArmAsm
50 lines
833 B
ArmAsm
.syntax unified
|
|
.text
|
|
@ out of line table entry
|
|
.global _start
|
|
.type _start, %function
|
|
_start:
|
|
.fnstart
|
|
.save {r4, lr}
|
|
.vsave {d0}
|
|
.vsave {d4}
|
|
bl _before
|
|
.fnend
|
|
|
|
@ entry that can be merged
|
|
.fnstart
|
|
.save {r4, lr}
|
|
bx lr
|
|
.fnend
|
|
|
|
@ Section that will be placed first
|
|
.section .before, "xa"
|
|
.type _before, %function
|
|
_before:
|
|
.fnstart
|
|
.save {r4, lr}
|
|
bx lr
|
|
.fnend
|
|
|
|
@ section that will be placed last
|
|
.section .after, "xa"
|
|
.global __aeabi_unwind_cpp_pr0
|
|
.type __aeabi_unwind_cpp_pr0, %function
|
|
__aeabi_unwind_cpp_pr0:
|
|
.fnstart
|
|
.save {r4, lr}
|
|
bx lr
|
|
.fnend
|
|
@ final function is cantunwind, so output table size is smaller
|
|
@ than sum of input sections
|
|
.global __aeabi_unwind_cpp_pr1
|
|
.type __aeabi_unwind_cpp_pr1, %function
|
|
__aeabi_unwind_cpp_pr1:
|
|
.fnstart
|
|
.cantunwind
|
|
bx lr
|
|
.fnend
|
|
|
|
.section .far
|
|
.word 0
|