unwind_test_x86.s   [plain text]



#
# This is a generic function to test that restoring registers during unwinding work correctly.
# 

	.text
.globl _unwind_tester
_unwind_tester:
LFB2:
	pushl	%ebp
LCFI0:
	movl	%esp, %ebp
LCFI1:
	subl	$56, %esp
LCFI2:
	movl	%ebx, -12(%ebp)
LCFI3:
	movl	%esi, -8(%ebp)
LCFI4:
	movl	%edi, -4(%ebp)
LCFI5:
	# load magic values into non-volatile registers
	movl	$0x12344321, %ebx
	movl	$0x56788765, %esi
	movl	$0xABCDDCBA, %edi
	# call test function which will invoke unwinder which "returns" here
	call	*8(%ebp)
	# verify that non-volatile registers still contain magic values
	cmpl	$0x12344321, %ebx
	jne	L2
	cmpl	$0x56788765, %esi
	jne	L2
	cmpl	$0xABCDDCBA, %edi
	jne	L2
	movl	$0, %eax
	jmp		L3
L2: movl	$1, %eax
L3: 		
	movl	-12(%ebp), %ebx
	movl	-8(%ebp), %esi
	movl	-4(%ebp), %edi
	leave
	ret
LFE2:



	.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support
EH_frame1:
	.set L$set$0,LECIE1-LSCIE1
	.long L$set$0	# Length of Common Information Entry
LSCIE1:
	.long	0x0	# CIE Identifier Tag
	.byte	0x1	# CIE Version
	.ascii "zR\0"	# CIE Augmentation
	.byte	0x1	# uleb128 0x1; CIE Code Alignment Factor
	.byte	0x7c	# sleb128 -4; CIE Data Alignment Factor
	.byte	0x8	# CIE RA Column
	.byte	0x1	# uleb128 0x1; Augmentation size
	.byte	0x10	# FDE Encoding (pcrel)
	.byte	0xc	# DW_CFA_def_cfa
	.byte	0x5	# uleb128 0x5
	.byte	0x4	# uleb128 0x4
	.byte	0x88	# DW_CFA_offset, column 0x8
	.byte	0x1	# uleb128 0x1
	.align 2
LECIE1:

.globl _unwind_tester.eh
_unwind_tester.eh:
LSFDE1:
	.set L$set$1,LEFDE1-LASFDE1
	.long L$set$1	# FDE Length
LASFDE1:
	.long	LASFDE1-EH_frame1	# FDE CIE offset
	.long	LFB2-.	# FDE initial location
	.set L$set$2,LFE2-LFB2
	.long L$set$2	# FDE address range
	.byte	0x0	# uleb128 0x0; Augmentation size
	.byte	0x4	# DW_CFA_advance_loc4
	.set L$set$3,LCFI0-LFB2
	.long L$set$3
	.byte	0xe	# DW_CFA_def_cfa_offset
	.byte	0x8	# uleb128 0x8
	.byte	0x84	# DW_CFA_offset, column 0x4
	.byte	0x2	# uleb128 0x2
	.byte	0x4	# DW_CFA_advance_loc4
	.set L$set$4,LCFI1-LCFI0
	.long L$set$4
	.byte	0xd	# DW_CFA_def_cfa_register
	.byte	0x4	# uleb128 0x4
	.byte	0x4	# DW_CFA_advance_loc4
	.set L$set$5,LCFI5-LCFI1
	.long L$set$5
	.byte	0x87	# DW_CFA_offset, column 0x7
	.byte	0x3	# uleb128 0x3
	.byte	0x86	# DW_CFA_offset, column 0x6
	.byte	0x4	# uleb128 0x4
	.byte	0x83	# DW_CFA_offset, column 0x3
	.byte	0x5	# uleb128 0x5
	.align 2
LEFDE1: