mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-18 14:53:32 +08:00
ac685e6adf
* elf-eh-frame.c (skip_cfa_op): Fix handling of DW_CFA_advance_loc. Handle DW_CFA_{remember,restore}_state, DW_CFA_GNU_window_save, DW_CFA_val_{offset{,_sf},expression}. (skip_non_nops): Record number of DW_CFA_set_loc ops. (_bfd_elf_discard_section_eh_frame): Require skip_non_nops recognizes all ops. If there are any DW_CFA_set_loc ops and they are pcrel or going to be pcrel, compute set_loc array. (_bfd_elf_eh_frame_section_offset): If make_relative, kill relocations against DW_CFA_set_loc operands. (_bfd_elf_write_section_eh_frame): Handle DW_CFA_set_loc adjusting. * ld-elf/eh4.d: New test. * ld-elf/eh4.s: New file. * ld-elf/eh4a.s: New file.
93 lines
2.0 KiB
ArmAsm
93 lines
2.0 KiB
ArmAsm
.text
|
|
.align 512
|
|
.globl foo
|
|
.type foo, @function
|
|
foo:
|
|
.LFB1:
|
|
subq $72, %rsp
|
|
.LCFI1:
|
|
xorl %eax, %eax
|
|
movq %rsp, %rdi
|
|
call bar@PLT
|
|
addq $72, %rsp
|
|
ret
|
|
.LFE1:
|
|
.size foo, .-foo
|
|
.globl bar
|
|
.type bar, @function
|
|
bar:
|
|
.LFB2:
|
|
subq $72, %rsp
|
|
.LCFI2:
|
|
xorl %eax, %eax
|
|
movq %rsp, %rdi
|
|
call bar@PLT
|
|
addq $72, %rsp
|
|
ret
|
|
.LFE2:
|
|
.size bar, .-bar
|
|
.section .eh_frame,"a",@progbits
|
|
.Lframe1:
|
|
.long .LECIE1-.LSCIE1 # Length of Common Information Entry
|
|
.LSCIE1:
|
|
.long 0x0 # CIE Identifier Tag
|
|
.byte 0x1 # CIE Version
|
|
.ascii "zR\0" # CIE Augmentation
|
|
.uleb128 0x1 # CIE Code Alignment Factor
|
|
.sleb128 -8 # CIE Data Alignment Factor
|
|
.byte 0x10 # CIE RA Column
|
|
.uleb128 0x1 # Augmentation size
|
|
.byte 0x1b # FDE Encoding (pcrel sdata4)
|
|
.byte 0xc # DW_CFA_def_cfa
|
|
.uleb128 0x7
|
|
.uleb128 0x8
|
|
.byte 0x90 # DW_CFA_offset, column 0x10
|
|
.uleb128 0x1
|
|
.align 8
|
|
.LECIE1:
|
|
.LSFDE1:
|
|
.long .LEFDE1-.LASFDE1 # FDE Length
|
|
.LASFDE1:
|
|
.long .LASFDE1-.Lframe1 # FDE CIE offset
|
|
.long .LFB1-. # FDE initial location
|
|
.long .LFE1-.LFB1 # FDE address range
|
|
.uleb128 0x0 # Augmentation size
|
|
.byte 0x1 # DW_CFA_set_loc
|
|
.long .LCFI1-.
|
|
.byte 0xe # DW_CFA_def_cfa_offset
|
|
.uleb128 0x50
|
|
.align 8
|
|
.LEFDE1:
|
|
.Lframe2:
|
|
.long .LECIE2-.LSCIE2 # Length of Common Information Entry
|
|
.LSCIE2:
|
|
.long 0x0 # CIE Identifier Tag
|
|
.byte 0x1 # CIE Version
|
|
.ascii "zR\0" # CIE Augmentation
|
|
.uleb128 0x1 # CIE Code Alignment Factor
|
|
.sleb128 -8 # CIE Data Alignment Factor
|
|
.byte 0x10 # CIE RA Column
|
|
.uleb128 0x1 # Augmentation size
|
|
.byte 0x1b # FDE Encoding (pcrel sdata4)
|
|
.byte 0xc # DW_CFA_def_cfa
|
|
.uleb128 0x7
|
|
.uleb128 0x8
|
|
.byte 0x90 # DW_CFA_offset, column 0x10
|
|
.uleb128 0x1
|
|
.align 8
|
|
.LECIE2:
|
|
.LSFDE2:
|
|
.long .LEFDE2-.LASFDE2 # FDE Length
|
|
.LASFDE2:
|
|
.long .LASFDE2-.Lframe2 # FDE CIE offset
|
|
.long .LFB2-. # FDE initial location
|
|
.long .LFE2-.LFB2 # FDE address range
|
|
.uleb128 0x0 # Augmentation size
|
|
.byte 0x1 # DW_CFA_set_loc
|
|
.long .LCFI2-.
|
|
.byte 0xe # DW_CFA_def_cfa_offset
|
|
.uleb128 0x50
|
|
.align 8
|
|
.LEFDE2:
|
|
.section .note.GNU-stack,"",@progbits
|