old-cross-binutils/ld/testsuite/ld-elf/eh4.s
Jakub Jelinek ac685e6adf * elf-bfd.h (struct eh_cie_fde): Add set_loc pointer.
* 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.
2006-10-03 13:15:39 +00:00

92 lines
2 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