From 49ff2dedb5b9b364b03fd75e886c15d2318d5313 Mon Sep 17 00:00:00 2001 From: aph Date: Sun, 3 Jun 2001 14:05:38 +0000 Subject: [PATCH] 2001-06-03 Andrew Haley * src/alpha/osf.S: Add unwind info. * src/powerpc/sysv.S: Add unwind info. * src/powerpc/ppc_closure.S: Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@42828 138bc75d-0d04-0410-961f-82ee72b054a4 --- libffi/ChangeLog | 6 ++++ libffi/src/alpha/osf.S | 71 +++++++++++++++++++++++++++++++++++++++- libffi/src/powerpc/ppc_closure.S | 39 ++++++++++++++++++++-- libffi/src/powerpc/sysv.S | 54 ++++++++++++++++++++++++++++++ 4 files changed, 166 insertions(+), 4 deletions(-) diff --git a/libffi/ChangeLog b/libffi/ChangeLog index 8ae49a3471c..3194d1d4ccf 100644 --- a/libffi/ChangeLog +++ b/libffi/ChangeLog @@ -1,3 +1,9 @@ +2001-06-03 Andrew Haley + + * src/alpha/osf.S: Add unwind info. + * src/powerpc/sysv.S: Add unwind info. + * src/powerpc/ppc_closure.S: Likewise. + 2000-05-31 Jeff Sturm * configure.in: Fix AC_ARG_ENABLE usage. diff --git a/libffi/src/alpha/osf.S b/libffi/src/alpha/osf.S index b3dc477fec0..5605669194c 100644 --- a/libffi/src/alpha/osf.S +++ b/libffi/src/alpha/osf.S @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------- - osf.S - Copyright (c) 1998 Cygnus Solutions + osf.S - Copyright (c) 1998, 2001 Red Hat Alpha/OSF Foreign Function Interface @@ -42,12 +42,16 @@ ffi_call_osf: .frame $15, 32, $26, 0 .mask 0x4008000, -32 +$LFB1: addq $16,$17,$1 mov $16, $30 stq $26, 0($1) +$LCFI0: stq $15, 8($1) +$LCFI1: stq $18, 16($1) mov $1, $15 +$LCFI2: .prologue 0 stq $19, 24($1) @@ -108,6 +112,7 @@ $retdouble: nop ldq $15, 8($15) ret +$LFE1: .end ffi_call_osf @@ -121,9 +126,12 @@ $retdouble: ffi_closure_osf: .frame $30, 16*8, $26, 0 .mask 0x4000000, -16*8 +$LFB2: ldgp $29, 0($27) subq $30, 16*8, $30 +$LCFI5: stq $26, 0($30) +$LCFI6: .prologue 1 # Store all of the potential argument registers in va_list format. @@ -237,6 +245,7 @@ $load_64: nop addq $30, 16*8, $30 ret +$LFE2: .end ffi_closure_osf @@ -275,3 +284,63 @@ $load_table: || FFI_TYPE_LAST != 14 #error "osf.S out of sync with ffi.h" #endif + + .section .eh_frame,"aw",@progbits +__FRAME_BEGIN__: + .4byte $LECIE1-$LSCIE1 # Length of Common Information Entry +$LSCIE1: + .4byte 0x0 # CIE Identifier Tag + .byte 0x1 # CIE Version + .ascii "zR\0" # CIE Augmentation + .byte 0x1 # uleb128 0x1; CIE Code Alignment Factor + .byte 0x78 # sleb128 -8; CIE Data Alignment Factor + .byte 0x1a # CIE RA Column + .byte 0x1 # uleb128 0x1; Augmentation size + .byte 0x1b # FDE Encoding (pcrel sdata4) + .byte 0xc # DW_CFA_def_cfa + .byte 0x1e # uleb128 0x1e + .byte 0x0 # uleb128 0x0 + .align 3 +$LECIE1: +$LSFDE1: + .4byte $LEFDE1-$LASFDE1 # FDE Length +$LASFDE1: + .4byte $LASFDE1-__FRAME_BEGIN__ # FDE CIE offset + .4byte $LFB1-. # FDE initial location + .4byte $LFE1-$LFB1 # FDE address range + .byte 0x0 # uleb128 0x0; Augmentation size + .byte 0x4 # DW_CFA_advance_loc4 + .4byte $LCFI0-$LFB1 + .byte 0xe # DW_CFA_def_cfa_offset + .byte 0x30 # uleb128 0x30 + .byte 0x4 # DW_CFA_advance_loc4 + .4byte $LCFI1-$LCFI0 + .byte 0x9a # DW_CFA_offset, column 0x1a + .byte 0x6 # uleb128 0x6 + .byte 0x8f # DW_CFA_offset, column 0xf + .byte 0x5 # uleb128 0x5 + .byte 0x4 # DW_CFA_advance_loc4 + .4byte $LCFI2-$LCFI1 + .byte 0xc # DW_CFA_def_cfa + .byte 0xf # uleb128 0xf + .byte 0x30 # uleb128 0x30 + .align 3 +$LEFDE1: + +$LSFDE3: + .4byte $LEFDE3-$LASFDE3 # FDE Length +$LASFDE3: + .4byte $LASFDE3-__FRAME_BEGIN__ # FDE CIE offset + .4byte $LFB2-. # FDE initial location + .4byte $LFE2-$LFB2 # FDE address range + .byte 0x0 # uleb128 0x0; Augmentation size + .byte 0x4 # DW_CFA_advance_loc4 + .4byte $LCFI5-$LFB2 + .byte 0xe # DW_CFA_def_cfa_offset + .byte 0x90,0x1 # uleb128 0x90 + .byte 0x4 # DW_CFA_advance_loc4 + .4byte $LCFI6-$LCFI5 + .byte 0x9a # DW_CFA_offset, column 0x1a + .byte 0x12 # uleb128 0x12 + .align 3 +$LEFDE3: diff --git a/libffi/src/powerpc/ppc_closure.S b/libffi/src/powerpc/ppc_closure.S index 311857724cc..a9ea9c7ee52 100644 --- a/libffi/src/powerpc/ppc_closure.S +++ b/libffi/src/powerpc/ppc_closure.S @@ -4,9 +4,12 @@ .globl ffi_closure_helper_SYSV ENTRY(ffi_closure_SYSV) +.LFB1: stwu %r1,-144(%r1) +.LCFI0: mflr %r0 stw %r31,140(%r1) +.LCFI1: stw %r0,148(%r1) # we want to build up an areas for the parameters passed @@ -67,6 +70,7 @@ ENTRY(ffi_closure_SYSV) add %r3,%r3,%r4 # add contents of table to table address mtctr %r3 bctr # jump to it +.LFE1: .align 2 .L60: .long .L44-.L60 # FFI_TYPE_VOID @@ -143,6 +147,35 @@ ENTRY(ffi_closure_SYSV) blr END(ffi_closure_SYSV) - - - + .section ".eh_frame","aw" +__FRAME_BEGIN__: + .4byte .LECIE1-.LSCIE1 # Length of Common Information Entry +.LSCIE1: + .4byte 0x0 # CIE Identifier Tag + .byte 0x1 # CIE Version + .ascii "\0" # CIE Augmentation + .byte 0x1 # uleb128 0x1; CIE Code Alignment Factor + .byte 0x7c # sleb128 -4; CIE Data Alignment Factor + .byte 0x41 # CIE RA Column + .byte 0xc # DW_CFA_def_cfa + .byte 0x1 # uleb128 0x1 + .byte 0x0 # uleb128 0x0 + .align 2 +.LECIE1: +.LSFDE1: + .4byte .LEFDE1-.LASFDE1 # FDE Length +.LASFDE1: + .4byte .LASFDE1-__FRAME_BEGIN__ # FDE CIE offset + .4byte .LFB1 # FDE initial location + .4byte .LFE1-.LFB1 # FDE address range + .byte 0x4 # DW_CFA_advance_loc4 + .4byte .LCFI0-.LFB1 + .byte 0xe # DW_CFA_def_cfa_offset + .byte 144,1 # uleb128 144 + .byte 0x4 # DW_CFA_advance_loc4 + .4byte .LCFI1-.LCFI0 + .byte 0x2f # DW_CFA_GNU_negative_offset_extended + .byte 0x41 # uleb128 0x41 + .byte 0x1 # uleb128 0x1 + .align 2 +.LEFDE1: diff --git a/libffi/src/powerpc/sysv.S b/libffi/src/powerpc/sysv.S index 88b037844f3..538ffa83bdb 100644 --- a/libffi/src/powerpc/sysv.S +++ b/libffi/src/powerpc/sysv.S @@ -31,24 +31,32 @@ .globl ffi_prep_args ENTRY(ffi_call_SYSV) +.LFB1: /* Save the old stack pointer as AP. */ mr %r8,%r1 +.LCFI0: /* Allocate the stack space we need. */ stwux %r1,%r1,%r4 /* Save registers we use. */ mflr %r9 stw %r28,-16(%r8) +.LCFI1: stw %r29,-12(%r8) +.LCFI2: stw %r30, -8(%r8) +.LCFI3: stw %r31, -4(%r8) +.LCFI4: stw %r9, 4(%r8) +.LCFI5: /* Save arguments over call... */ mr %r31,%r5 /* flags, */ mr %r30,%r6 /* rvalue, */ mr %r29,%r7 /* function address, */ mr %r28,%r8 /* our AP. */ +.LCFI6: /* Call ffi_prep_args. */ mr %r4,%r1 @@ -116,4 +124,50 @@ L(fp_return_value): L(float_return_value): stfs %f1,0(%r30) b L(done_return_value) +.LFE1: END(ffi_call_SYSV) + + .section ".eh_frame","aw" +__FRAME_BEGIN__: + .4byte .LECIE1-.LSCIE1 /* Length of Common Information Entry */ +.LSCIE1: + .4byte 0x0 /* CIE Identifier Tag */ + .byte 0x1 /* CIE Version */ + .ascii "\0" /* CIE Augmentation */ + .byte 0x1 /* uleb128 0x1; CIE Code Alignment Factor */ + .byte 0x7c /* sleb128 -4; CIE Data Alignment Factor */ + .byte 0x41 /* CIE RA Column */ + .byte 0xc /* DW_CFA_def_cfa */ + .byte 0x1 /* uleb128 0x1 */ + .byte 0x0 /* uleb128 0x0 */ + .align 2 +.LECIE1: +.LSFDE1: + .4byte .LEFDE1-.LASFDE1 /* FDE Length */ +.LASFDE1: + .4byte .LASFDE1-__FRAME_BEGIN__ /* FDE CIE offset */ + .4byte .LFB1 /* FDE initial location */ + .4byte .LFE1-.LFB1 /* FDE address range */ + .byte 0x4 /* DW_CFA_advance_loc4 */ + .4byte .LCFI0-.LFB1 + .byte 0xd /* DW_CFA_def_cfa_register */ + .byte 0x08 /* uleb128 0x08 */ + .byte 0x4 /* DW_CFA_advance_loc4 */ + .4byte .LCFI5-.LCFI0 + .byte 0x2f /* DW_CFA_GNU_negative_offset_extended */ + .byte 0x41 /* uleb128 0x41 */ + .byte 0x1 /* uleb128 0x1 */ + .byte 0x9f /* DW_CFA_offset, column 0x1f */ + .byte 0x1 /* uleb128 0x1 */ + .byte 0x9e /* DW_CFA_offset, column 0x1e */ + .byte 0x2 /* uleb128 0x2 */ + .byte 0x9d /* DW_CFA_offset, column 0x1d */ + .byte 0x3 /* uleb128 0x3 */ + .byte 0x9c /* DW_CFA_offset, column 0x1c */ + .byte 0x4 /* uleb128 0x4 */ + .byte 0x4 /* DW_CFA_advance_loc4 */ + .4byte .LCFI6-.LCFI5 + .byte 0xd /* DW_CFA_def_cfa_register */ + .byte 0x1c /* uleb128 0x1c */ + .align 2 +.LEFDE1: -- 2.11.0