]> git.ipfire.org Git - people/ms/gcc.git/blobdiff - libffi/src/pa/linux.S
libffi: Sync with libffi 3.4.2
[people/ms/gcc.git] / libffi / src / pa / linux.S
index 602690432c046214fa003a40bbc034a20952d8d6..33ef0b137a4118bcfce9bc1e4b1dc4335cb4f027 100644 (file)
@@ -1,7 +1,6 @@
 /* -----------------------------------------------------------------------
    linux.S - (c) 2003-2004 Randolph Chung <tausq@debian.org>
             (c) 2008 Red Hat, Inc.
-            (c) 2016 John David Anglin
 
    HPPA Foreign Function Interface
 
                               unsigned bytes,
                               unsigned flags,
                               unsigned *rvalue,
-                              void (*fn)(void),
-                              ffi_go_closure *closure);
+                              void (*fn)(void));
         */
 
        .export ffi_call_pa32,code
        .import ffi_prep_args_pa32,code
 
        .type ffi_call_pa32, @function
-       .cfi_startproc
+.LFB1:
 ffi_call_pa32:
        .proc
        .callinfo FRAME=64,CALLS,SAVE_RP,SAVE_SP,ENTRY_GR=4
        .entry
        stw %rp, -20(%sp)
        copy %r3, %r1
-        .cfi_offset 2, -20
-        .cfi_register 3, 1
+.LCFI11:
 
        copy %sp, %r3
-       .cfi_def_cfa_register 3
+.LCFI12:
 
        /* Setup the stack for calling prep_args...
           We want the stack to look like this:
@@ -73,8 +70,8 @@ ffi_call_pa32:
         */
 
        stwm %r1, 64(%sp)
-       .cfi_offset 3, 0
        stw %r4, 12(%r3)
+.LCFI13:
        copy %sp, %r4
 
        addl %arg2, %r4, %arg0      /* arg stack */
@@ -101,7 +98,6 @@ ffi_call_pa32:
           we need to give it a place to put the result.  */
        ldw -52(%r3), %ret0                     /* %ret0 <- rvalue */
        ldw -56(%r3), %r22                      /* %r22 <- function to call */
-       ldw -60(%r3), %ret1                     /* %ret1 <- closure */
        bl $$dyncall, %r31                      /* Call the user function */
        copy %r31, %rp
 
@@ -253,27 +249,27 @@ ffi_call_pa32:
        nop
        .exit
        .procend
-       .cfi_endproc
+.LFE1:
 
        /* void ffi_closure_pa32(void);
-          Called with ffi_closure argument in %r21.  */
+          Called with closure argument in %r19 */
        .export ffi_closure_pa32,code
        .import ffi_closure_inner_pa32,code
+
        .type ffi_closure_pa32, @function
-       .cfi_startproc
+.LFB2:
 ffi_closure_pa32:
        .proc
        .callinfo FRAME=64,CALLS,SAVE_RP,SAVE_SP,ENTRY_GR=3
        .entry
 
        stw %rp, -20(%sp)
+.LCFI20:
        copy %r3, %r1
-       .cfi_offset 2, -20
-       .cfi_register 3, 1
+.LCFI21:
        copy %sp, %r3
-       .cfi_def_cfa_register 3
+.LCFI22:
        stwm %r1, 64(%sp)
-       .cfi_offset 3, 0
 
        /* Put arguments onto the stack and call ffi_closure_inner.  */
        stw %arg0, -36(%r3)
@@ -281,9 +277,9 @@ ffi_closure_pa32:
        stw %arg2, -44(%r3)
        stw %arg3, -48(%r3)
 
-       /* Closure type 0.  */
-       copy %r21, %arg0
-       copy %r0, %arg2
+       /* Retrieve closure pointer and real gp.  */
+       copy    %r19, %arg0
+       ldw     8(%r19), %r19
        bl ffi_closure_inner_pa32, %r2
        copy %r3, %arg1
 
@@ -295,46 +291,90 @@ ffi_closure_pa32:
 
        .exit
        .procend
-       .cfi_endproc
-
-       /* void ffi_go_closure_pa32(void);
-          Called with ffi_go_closure argument in %ret1.  */
-       .export ffi_go_closure_pa32,code
-       .import ffi_closure_inner_pa32,code
-       .type ffi_go_closure_pa32, @function
-       .cfi_startproc
-ffi_go_closure_pa32:
-       .proc
-       .callinfo FRAME=64,CALLS,SAVE_RP,SAVE_SP,ENTRY_GR=3
-       .entry
-
-       stw %rp, -20(%sp)
-       copy %r3, %r1
-       .cfi_offset 2, -20
-       .cfi_register 3, 1
-       copy %sp, %r3
-       .cfi_def_cfa_register 3
-       stwm %r1, 64(%sp)
-       .cfi_offset 3, 0
-
-       /* Put arguments onto the stack and call ffi_closure_inner.  */
-       stw %arg0, -36(%r3)
-       stw %arg1, -40(%r3)
-       stw %arg2, -44(%r3)
-       stw %arg3, -48(%r3)
-
-       /* Closure type 1.  */
-       copy %ret1, %arg0
-       ldi 1, %arg2
-       bl ffi_closure_inner_pa32, %r2
-       copy %r3, %arg1
+.LFE2:
+
+       .section        ".eh_frame",EH_FRAME_FLAGS,@progbits
+.Lframe1:
+       .word   .LECIE1-.LSCIE1 ;# Length of Common Information Entry
+.LSCIE1:
+       .word   0x0     ;# CIE Identifier Tag
+       .byte   0x1     ;# CIE Version
+#ifdef __PIC__
+       .ascii  "zR\0"  ;# CIE Augmentation: 'z' - data, 'R' - DW_EH_PE_... data
+#else
+       .ascii "\0"     ;# CIE Augmentation
+#endif
+       .uleb128 0x1    ;# CIE Code Alignment Factor
+       .sleb128 4      ;# CIE Data Alignment Factor
+       .byte   0x2     ;# CIE RA Column
+#ifdef __PIC__
+       .uleb128 0x1    ;# Augmentation size
+       .byte   0x1b    ;# FDE Encoding (DW_EH_PE_pcrel|DW_EH_PE_sdata4)
+#endif
+       .byte   0xc     ;# DW_CFA_def_cfa
+       .uleb128 0x1e
+       .uleb128 0x0
+       .align 4
+.LECIE1:
+.LSFDE1:
+       .word   .LEFDE1-.LASFDE1        ;# FDE Length
+.LASFDE1:
+       .word   .LASFDE1-.Lframe1       ;# FDE CIE offset
+#ifdef __PIC__
+       .word   .LFB1-. ;# FDE initial location
+#else
+       .word   .LFB1   ;# FDE initial location
+#endif
+       .word   .LFE1-.LFB1     ;# FDE address range
+#ifdef __PIC__
+       .uleb128 0x0    ;# Augmentation size: no data
+#endif
+       .byte   0x4     ;# DW_CFA_advance_loc4
+       .word   .LCFI11-.LFB1
+       .byte   0x83    ;# DW_CFA_offset, column 0x3
+       .uleb128 0x0
+       .byte   0x11    ;# DW_CFA_offset_extended_sf; save r2 at [r30-20]
+       .uleb128 0x2
+       .sleb128 -5
+
+       .byte   0x4     ;# DW_CFA_advance_loc4
+       .word   .LCFI12-.LCFI11
+       .byte   0xd     ;# DW_CFA_def_cfa_register = r3
+       .uleb128 0x3
+
+       .byte   0x4     ;# DW_CFA_advance_loc4
+       .word   .LCFI13-.LCFI12
+       .byte   0x84    ;# DW_CFA_offset, column 0x4
+       .uleb128 0x3
 
-       ldwm -64(%sp), %r3
-       ldw -20(%sp), %rp
-       ldw -36(%sp), %ret0
-       bv %r0(%r2)
-       ldw -40(%sp), %ret1
+       .align 4
+.LEFDE1:
+
+.LSFDE2:
+       .word   .LEFDE2-.LASFDE2        ;# FDE Length
+.LASFDE2:
+       .word   .LASFDE2-.Lframe1       ;# FDE CIE offset
+#ifdef __PIC__
+       .word   .LFB2-. ;# FDE initial location
+#else
+       .word   .LFB2   ;# FDE initial location
+#endif
+       .word   .LFE2-.LFB2     ;# FDE address range
+#ifdef __PIC__
+       .uleb128 0x0    ;# Augmentation size: no data
+#endif
+       .byte   0x4     ;# DW_CFA_advance_loc4
+       .word   .LCFI21-.LFB2
+       .byte   0x83    ;# DW_CFA_offset, column 0x3
+       .uleb128 0x0
+       .byte   0x11    ;# DW_CFA_offset_extended_sf
+       .uleb128 0x2
+       .sleb128 -5
+
+       .byte   0x4     ;# DW_CFA_advance_loc4
+       .word   .LCFI22-.LCFI21
+       .byte   0xd     ;# DW_CFA_def_cfa_register = r3
+       .uleb128 0x3
 
-       .exit
-       .procend
-       .cfi_endproc
+       .align 4
+.LEFDE2: