]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Add CFI information for MIPS assembly sources.
authorJoseph Myers <joseph@codesourcery.com>
Mon, 11 Feb 2013 18:19:14 +0000 (18:19 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Mon, 11 Feb 2013 18:19:14 +0000 (18:19 +0000)
20 files changed:
ports/ChangeLog.mips
ports/sysdeps/mips/include/sys/asm.h [new file with mode: 0644]
ports/sysdeps/mips/mips64/bsd-_setjmp.S
ports/sysdeps/mips/mips64/bsd-setjmp.S
ports/sysdeps/mips/mips64/setjmp.S
ports/sysdeps/mips/sys/asm.h
ports/sysdeps/unix/mips/mips32/sysdep.h
ports/sysdeps/unix/mips/mips64/n32/sysdep.h
ports/sysdeps/unix/mips/mips64/n64/sysdep.h
ports/sysdeps/unix/mips/sysdep.h
ports/sysdeps/unix/sysv/linux/mips/clone.S
ports/sysdeps/unix/sysv/linux/mips/getcontext.S
ports/sysdeps/unix/sysv/linux/mips/makecontext.S
ports/sysdeps/unix/sysv/linux/mips/mips64/n64/ioctl.S
ports/sysdeps/unix/sysv/linux/mips/mips64/nptl/sysdep-cancel.h
ports/sysdeps/unix/sysv/linux/mips/mips64/syscall.S
ports/sysdeps/unix/sysv/linux/mips/nptl/sysdep-cancel.h
ports/sysdeps/unix/sysv/linux/mips/setcontext.S
ports/sysdeps/unix/sysv/linux/mips/swapcontext.S
ports/sysdeps/unix/sysv/linux/mips/vfork.S

index c00275d24361961aacff2744d319a5500e5c512d..3dcac85d9a8dfb6eabb80c474cdbde587b8fb90b 100644 (file)
@@ -1,3 +1,48 @@
+2013-02-11  Joseph Myers  <joseph@codesourcery.com>
+
+       * sysdeps/mips/include/sys/asm.h: New file.
+       * sysdeps/mips/mips64/bsd-_setjmp.S (_setjmp): Use SETUP_GP64_REG
+       and RESTORE_GP64_REG.
+       * sysdeps/mips/mips64/bsd-setjmp.S (setjmp): Likewise.
+       * sysdeps/mips/mips64/setjmp.S (__sigsetjmp): Likewise.
+       * sysdeps/mips/sys/asm.h (__mips_cfi_startproc): Define to empty.
+       (__mips_cfi_endproc): Likewise.
+       (LEAF): Use __mips_cfi_startproc.
+       (NESTED): Likewise.
+       (END): Use __mips_cfi_endproc.
+       (EXPORT): Use __mips_cfi_startproc.
+       * sysdeps/unix/mips/mips32/sysdep.h (PSEUDO): Add CFI information
+       for error-handling code in both definitions.
+       * sysdeps/unix/mips/mips64/n32/sysdep.h (PSEUDO): Likewise.
+       * sysdeps/unix/mips/mips64/n64/sysdep.h (PSEUDO): Likewise.
+       * sysdeps/unix/mips/sysdep.h (ENTRY): Use cfi_startproc.
+       (END): Use cfi_endproc.
+       (PSEUDO_END): Likewise.
+       (PSEUDO_END_NOERRNO): Likewise.
+       (PSEUDO_END_ERRVAL): Likewise.
+       * sysdeps/unix/sysv/linux/mips/clone.S (__clone): Add CFI
+       information.  Use SETUP_GP64_STACK and RESTORE_GP64_STACK.
+       * sysdeps/unix/sysv/linux/mips/getcontext.S (__getcontext):
+       Likewise.
+       * sysdeps/unix/sysv/linux/mips/makecontext.S (__makecontext):
+       Likewise.
+       * sysdeps/unix/sysv/linux/mips/mips64/n64/ioctl.S (__ioctl): Use
+       SETUP_GP64_REG and RESTORE_GP64_REG.
+       * sysdeps/unix/sysv/linux/mips/mips64/nptl/sysdep-cancel.h
+       [(!NOT_IN_libc || IS_IN_libpthread || IS_IN_librt) && __PIC__]
+       (PSEUDO): Use cfi_endproc before ENTRY.
+       * sysdeps/unix/sysv/linux/mips/mips64/syscall.S (syscall): Add CFI
+       information.  Use SETUP_GP64_REG and RESTORE_GP64_REG.
+       * sysdeps/unix/sysv/linux/mips/nptl/sysdep-cancel.h [(!NOT_IN_libc
+       || IS_IN_libpthread || IS_IN_librt) && __PIC__] (PSEUDO): Use
+       cfi_endproc before ENTRY.
+       * sysdeps/unix/sysv/linux/mips/setcontext.S (__setcontext): Add
+       CFI information.  Use SETUP_GP64_STACK and RESTORE_GP64_STACK.
+       * sysdeps/unix/sysv/linux/mips/swapcontext.S (__swapcontext):
+       Likewise.
+       * sysdeps/unix/sysv/linux/mips/vfork.S (__vfork): Add CFI
+       information.  Use SETUP_GP64_REG and RESTORE_GP64_REG.
+
 2013-02-08  Joseph Myers  <joseph@codesourcery.com>
 
        [BZ #13550]
diff --git a/ports/sysdeps/mips/include/sys/asm.h b/ports/sysdeps/mips/include/sys/asm.h
new file mode 100644 (file)
index 0000000..7b356e1
--- /dev/null
@@ -0,0 +1,53 @@
+/* Copyright (C) 2013 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_ASM_H
+
+# include_next <sys/asm.h>
+
+# undef __mips_cfi_startproc
+# define __mips_cfi_startproc cfi_startproc
+# undef __mips_cfi_endproc
+# define __mips_cfi_endproc cfi_endproc
+
+# if _MIPS_SIM == _ABIO32
+#  define SETUP_GP64_REG_CFI(a)
+#  define SETUP_GP64_REG(a, b)
+#  define SETUP_GP64_STACK_CFI(a)
+#  define SETUP_GP64_STACK(a, b)
+#  define RESTORE_GP64_REG
+#  define RESTORE_GP64_STACK
+# else
+#  define SETUP_GP64_REG_CFI(gpsavereg)                \
+       cfi_register (gp, gpsavereg)
+#  define SETUP_GP64_REG(gpsavereg, proc)      \
+       SETUP_GP64 (gpsavereg, proc);           \
+       SETUP_GP64_REG_CFI (gpsavereg)
+#  define SETUP_GP64_STACK_CFI(gpoffset)       \
+       cfi_rel_offset (gp, gpoffset)
+#  define SETUP_GP64_STACK(gpoffset, proc)     \
+       SETUP_GP64 (gpoffset, proc);            \
+       SETUP_GP64_STACK_CFI (gpoffset)
+#  define RESTORE_GP64_REG                     \
+       RESTORE_GP64;                           \
+       cfi_restore (gp)
+#  define RESTORE_GP64_STACK                   \
+       RESTORE_GP64;                           \
+       cfi_restore (gp)
+# endif
+
+#endif
index 83b1264925084b1f6e9f7e9af22057afd785b67f..5d0f76c13c705c3dbc8c09f8bfed8557a0aa0bf6 100644 (file)
@@ -31,12 +31,12 @@ ENTRY (_setjmp)
 #ifdef __PIC__
        SETUP_GP
 #endif
-       SETUP_GP64 (v0, C_SYMBOL_NAME (_setjmp))
+       SETUP_GP64_REG (v0, C_SYMBOL_NAME (_setjmp))
        PTR_LA t9, C_SYMBOL_NAME (__sigsetjmp)
 #if _MIPS_SIM == _ABIO32
        nop
 #endif 
-       RESTORE_GP64
+       RESTORE_GP64_REG
        move    a1, zero                /* Pass a second argument of zero.  */
 #ifdef __PIC__
        jr      t9
index 15af26a82d6206f7477a214571e152b184090c28..784e16e33f4face539b34b16f21085a3aecccf1f 100644 (file)
@@ -31,12 +31,12 @@ ENTRY (setjmp)
 #ifdef __PIC__
        SETUP_GP
 #endif
-       SETUP_GP64 (v0, C_SYMBOL_NAME (setjmp))
+       SETUP_GP64_REG (v0, C_SYMBOL_NAME (setjmp))
        PTR_LA t9, C_SYMBOL_NAME (__sigsetjmp)
 #if _MIPS_SIM == _ABIO32
        nop
 #endif 
-       RESTORE_GP64
+       RESTORE_GP64_REG
        dli a1, 1               /* Pass a second argument of one.  */
 #ifdef __PIC__
        jr      t9
index 621e390fd0762e4f8eed2eaa51d64be7bd0a16a4..5afbbe7562ecd7aa68f4b30b9c2cbce3fa44a816 100644 (file)
@@ -29,14 +29,14 @@ ENTRY (__sigsetjmp)
 #ifdef __PIC__
        SETUP_GP
 #endif
-       SETUP_GP64 (v0, C_SYMBOL_NAME (__sigsetjmp))
+       SETUP_GP64_REG (v0, C_SYMBOL_NAME (__sigsetjmp))
        move a2, sp
        move a3, fp
        PTR_LA t9, __sigsetjmp_aux
 #if _MIPS_SIM == _ABIO32
        nop
 #endif 
-       RESTORE_GP64
+       RESTORE_GP64_REG
 #if _MIPS_SIM != _ABIO32
        move a4, gp
 #endif
index 605451a884d2279fc0a83bd419d231f366c41f25..293cf364e038ee3712db9a4cad4b455ba990f96f 100644 (file)
 # define CAT(str1,str2) __CAT(str1,str2)
 #endif
 
+/* Redefined as nonempty in the internal header.  */
+#define __mips_cfi_startproc /* Empty.  */
+#define __mips_cfi_endproc /* Empty.  */
+
 /*
  * Macros to handle different pointer/register sizes for 32/64-bit code
  *
@@ -147,7 +151,8 @@ l:                                                  \
                .align  2;                              \
                .type   symbol,@function;               \
                .ent    symbol,0;                       \
-symbol:                .frame  sp,0,ra
+symbol:                .frame  sp,0,ra;                        \
+               __mips_cfi_startproc
 
 /*
  * NESTED - declare nested routine entry point
@@ -157,13 +162,15 @@ symbol:           .frame  sp,0,ra
                .align  2;                              \
                .type   symbol,@function;               \
                .ent    symbol,0;                       \
-symbol:                .frame  sp, framesize, rpc
+symbol:                .frame  sp, framesize, rpc;             \
+               __mips_cfi_startproc
 
 /*
  * END - mark end of function
  */
 #ifndef END
 # define END(function)                                   \
+               __mips_cfi_endproc;                     \
                .end    function;                       \
                .size   function,.-function
 #endif
@@ -173,7 +180,7 @@ symbol:             .frame  sp, framesize, rpc
  */
 #define        EXPORT(symbol)                                  \
                .globl  symbol;                         \
-symbol:
+symbol:                __mips_cfi_startproc
 
 /*
  * ABS - export absolute symbol
index d7d389253d51e1ecec392f758bf4bf2b8cb3583c..5c5d7695d07f147e8a986bed2b79250b9c183ef7 100644 (file)
 #ifdef __PIC__
 #define PSEUDO(name, syscall_name, args) \
   .align 2;                                                                  \
+  cfi_startproc;                                                             \
   99: la t9,__syscall_error;                                                 \
   jr t9;                                                                     \
+  cfi_endproc;                                                               \
   ENTRY(name)                                                                \
   .set noreorder;                                                            \
   .cpload t9;                                                                \
@@ -38,8 +40,10 @@ L(syse1):
 #define PSEUDO(name, syscall_name, args) \
   .set noreorder;                                                            \
   .align 2;                                                                  \
+  cfi_startproc;                                                             \
   99: j __syscall_error;                                                     \
   nop;                                                                       \
+  cfi_endproc;                                                               \
   ENTRY(name)                                                                \
   .set noreorder;                                                            \
   li v0, SYS_ify(syscall_name);                                                      \
index 37a67a2e693cc731eece58cedd1857f8903297fc..49ae76991e19b5159708418fbb255c72f1e3efee 100644 (file)
 #ifdef __PIC__
 #define PSEUDO(name, syscall_name, args) \
   .align 2;                                                                  \
+  cfi_startproc;                                                             \
   99:;                                                                       \
   .set noat;                                                                 \
   .cpsetup t9, $1, name;                                                     \
+  cfi_register (gp, $1);                                                     \
   .set at;                                                                   \
   la t9,__syscall_error;                                                     \
   .cpreturn;                                                                 \
+  cfi_restore (gp);                                                          \
   jr t9;                                                                     \
+  cfi_endproc;                                                               \
   ENTRY(name)                                                                \
   li v0, SYS_ify(syscall_name);                                                      \
   syscall;                                                                   \
@@ -42,8 +46,10 @@ L(syse1):
 #define PSEUDO(name, syscall_name, args) \
   .set noreorder;                                                            \
   .align 2;                                                                  \
+  cfi_startproc;                                                             \
   99: j __syscall_error;                                                     \
   nop;                                                                        \
+  cfi_endproc;                                                               \
   ENTRY(name)                                                                \
   .set noreorder;                                                            \
   li v0, SYS_ify(syscall_name);                                                      \
index 871184bd0fa1486f809aadf10c322aa6e69dbe30..2670c68b7d0d5e3425878d0a625dd13a7faf2b73 100644 (file)
 #ifdef __PIC__
 #define PSEUDO(name, syscall_name, args) \
   .align 2;                                                                  \
+  cfi_startproc;                                                             \
   99:;                                                                       \
   .set noat;                                                                 \
   .cpsetup t9, $1, name;                                                     \
+  cfi_register (gp, $1);                                                     \
   .set at;                                                                   \
   dla t9,__syscall_error;                                                    \
   .cpreturn;                                                                 \
+  cfi_restore (gp);                                                          \
   jr t9;                                                                     \
+  cfi_endproc;                                                               \
   ENTRY(name)                                                                \
   li v0, SYS_ify(syscall_name);                                                      \
   syscall;                                                                   \
@@ -42,8 +46,10 @@ L(syse1):
 #define PSEUDO(name, syscall_name, args) \
   .set noreorder;                                                            \
   .align 2;                                                                  \
+  cfi_startproc;                                                             \
   99: j __syscall_error;                                                     \
   nop;                                                                        \
+  cfi_endproc;                                                               \
   ENTRY(name)                                                                \
   .set noreorder;                                                            \
   li v0, SYS_ify(syscall_name);                                                      \
index bab3bc04c99a8bd861c978fb2ea297ea218a42b3..ef5c0893f3a123d843d0b699aced1aa3ab399f89 100644 (file)
   .globl name;                                                               \
   .align 2;                                                                  \
   .ent name,0;                                                               \
-  name##:
+  name##:                                                                    \
+  cfi_startproc;
 
 #undef END
 #define        END(function)                                   \
+               cfi_endproc;                            \
                .end    function;                       \
                .size   function,.-function
 
 #define ret    j ra ; nop
 
 #undef PSEUDO_END
-#define PSEUDO_END(sym) .end sym; .size sym,.-sym
+#define PSEUDO_END(sym) cfi_endproc; .end sym; .size sym,.-sym
 
 #define PSEUDO_NOERRNO(name, syscall_name, args)       \
   .align 2;                                            \
@@ -47,7 +49,7 @@
   syscall
 
 #undef PSEUDO_END_NOERRNO
-#define PSEUDO_END_NOERRNO(sym) .end sym; .size sym,.-sym
+#define PSEUDO_END_NOERRNO(sym) cfi_endproc; .end sym; .size sym,.-sym
 
 #define ret_NOERRNO ret
 
@@ -59,7 +61,7 @@
   syscall
 
 #undef PSEUDO_END_ERRVAL
-#define PSEUDO_END_ERRVAL(sym) .end sym; .size sym,.-sym
+#define PSEUDO_END_ERRVAL(sym) cfi_endproc; .end sym; .size sym,.-sym
 
 #define ret_ERRVAL ret
 
index 72360f9621e2343aff49d76b77221bb2b431cac9..ef801882a96f477dee8870dbecd9355c1ecacdbf 100644 (file)
@@ -47,7 +47,8 @@ NESTED(__clone,4*SZREG,sp)
        SETUP_GP
 #endif
        PTR_SUBU sp, FRAMESZ
-       SETUP_GP64 (GPOFF, __clone)
+       cfi_adjust_cfa_offset (FRAMESZ)
+       SETUP_GP64_STACK (GPOFF, __clone)
 #ifdef __PIC__
        SAVE_GP (GPOFF)
 #endif
@@ -88,26 +89,35 @@ NESTED(__clone,4*SZREG,sp)
 
        /* Do the system call */
        li              v0,__NR_clone
+       cfi_endproc
        syscall
 
        bnez            a3,L(error)
        beqz            v0,L(thread_start)
 
        /* Successful return from the parent */
-       RESTORE_GP64
+       cfi_startproc
+       cfi_adjust_cfa_offset (FRAMESZ)
+       SETUP_GP64_STACK_CFI (GPOFF)
+       cfi_remember_state
+       RESTORE_GP64_STACK
        PTR_ADDU        sp, FRAMESZ
+       cfi_adjust_cfa_offset (-FRAMESZ)
        ret
 
        /* Something bad happened -- no child created */
 L(error):
+       cfi_restore_state
 #ifdef __PIC__
        PTR_LA          t9,__syscall_error
-       RESTORE_GP64
+       RESTORE_GP64_STACK
        PTR_ADDU        sp, FRAMESZ
+       cfi_adjust_cfa_offset (-FRAMESZ)
        jr              t9
 #else
-       RESTORE_GP64
+       RESTORE_GP64_STACK
        PTR_ADDU        sp, FRAMESZ
+       cfi_adjust_cfa_offset (-FRAMESZ)
        j               __syscall_error
 #endif
        END(__clone)
@@ -118,6 +128,7 @@ L(error):
 
 ENTRY(__thread_start)
 L(thread_start):
+       cfi_undefined ($31)
        /* cp is already loaded.  */
        SAVE_GP (GPOFF)
        /* The stackframe has been created on entry of clone().  */
index 0e3d35b54f4e32b0793f266698fc5e27735ab338..7af6825a4a66821c0df20362d18fdf1cc66d40eb 100644 (file)
@@ -54,7 +54,8 @@ NESTED (__getcontext, FRAMESZ, ra)
 # endif
 
        PTR_ADDIU sp, -FRAMESZ
-       SETUP_GP64 (GPOFF, __getcontext)
+       cfi_adjust_cfa_offset (FRAMESZ)
+       SETUP_GP64_STACK (GPOFF, __getcontext)
        SAVE_GP (GPOFF)
 
 #else  /* ! __PIC__ */
@@ -124,19 +125,23 @@ NESTED (__getcontext, FRAMESZ, ra)
        li      v0, SYS_ify (rt_sigprocmask)
        syscall
        bnez    a3, 99f
+       cfi_remember_state
 
 #ifdef __PIC__
-       RESTORE_GP64
+       RESTORE_GP64_STACK
        PTR_ADDIU sp, FRAMESZ
+       cfi_adjust_cfa_offset (-FRAMESZ)
 #endif
        move    v0, zero
        jr      ra
 
 99:
+       cfi_restore_state
 #ifdef __PIC__
        PTR_LA  t9, JUMPTARGET (__syscall_error)
-       RESTORE_GP64
+       RESTORE_GP64_STACK
        PTR_ADDIU sp, FRAMESZ
+       cfi_adjust_cfa_offset (-FRAMESZ)
        jr      t9
 
 #else  /* ! __PIC__ */
index 65f1a6aaa236b59da59c38c2c349a588c1ce1bdb..d89db016772b10d030ebdf556b0c51c02b01d86a 100644 (file)
@@ -63,9 +63,10 @@ NESTED (__makecontext, FRAMESZ, ra)
 #endif
 
        PTR_ADDIU sp, -FRAMESZ
+       cfi_adjust_cfa_offset (FRAMESZ)
 
 #ifdef __PIC__
-       SETUP_GP64 (GPOFF, __makecontext)
+       SETUP_GP64_STACK (GPOFF, __makecontext)
        SAVE_GP (GPOFF)
 #endif
 
@@ -145,8 +146,9 @@ NESTED (__makecontext, FRAMESZ, ra)
        REG_S   a1, MCONTEXT_PC(a0)
 
 #ifdef __PIC__
-       RESTORE_GP64
+       RESTORE_GP64_STACK
        PTR_ADDIU sp, FRAMESZ
+       cfi_adjust_cfa_offset (-FRAMESZ)
 #endif
        jr      ra
 
index b3bed4663c94716aaa6d0b685347db5dd58ae71f..c5f1c350ed27e638c2b1adf8bd2351d547df8129 100644 (file)
@@ -31,9 +31,9 @@ ENTRY (__ioctl)
        ret
 
 L(error):
-       SETUP_GP64 (a0, __ioctl)
+       SETUP_GP64_REG (a0, __ioctl)
        PTR_LA t9, __syscall_error
-       RESTORE_GP64
+       RESTORE_GP64_REG
        jr t9
 
 PSEUDO_END (__ioctl)
index 354eba2f3d8ff4ce4824d01dcdd2b0a15c50aa2e..6565225662b742bc9ff6a0f5e8bb5d1cf417330d 100644 (file)
@@ -57,6 +57,7 @@
     cfi_same_value (gp);                                                     \
     RESTORESTK;                                                                      \
     ret;                                                                     \
+    cfi_endproc;                                                             \
   .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel;           \
   ENTRY (name)                                                               \
     SAVESTK;                                                                 \
index 839276d7adcc6bd23fe61c8793b4a41cb23ea902..850025c63584c353796ab3410f08a8a43e1870d5 100644 (file)
@@ -30,7 +30,9 @@ NESTED (syscall, SZREG, ra)
        .mask 0x00010000, -SZREG
        .fmask 0x00000000, 0
        PTR_ADDIU sp, -SZREG
+       cfi_adjust_cfa_offset (SZREG)
        REG_S s0, (sp)
+       cfi_rel_offset (s0, 0)
 
        move s0, a0
        move a0, a1             /* shift arg1 - arg7.  */
@@ -45,15 +47,17 @@ NESTED (syscall, SZREG, ra)
        syscall                 /* Do the system call.  */
 
        REG_L s0, (sp)
+       cfi_restore (s0)
        PTR_ADDIU sp, SZREG
+       cfi_adjust_cfa_offset (-SZREG)
        bne a3, zero, L(error)
 
        ret
 
 L(error):
-       SETUP_GP64 (a0, syscall)
+       SETUP_GP64_REG (a0, syscall)
        PTR_LA t9, __syscall_error
-       RESTORE_GP64
+       RESTORE_GP64_REG
        jr t9
 
 END (syscall)
index e1dd672528f87a9c7e6d38a1eb3327e9b2678600..1e0bfedecfa6845902654e295fc91600e6f8807c 100644 (file)
@@ -52,6 +52,7 @@
     .set reorder;                                                            \
     bne a3, zero, 99b;                                                       \
     ret;                                                                     \
+    cfi_endproc;                                                             \
   .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel;           \
   ENTRY (name)                                                               \
     .set noreorder;                                                          \
index 42f709d846da32731f98fc72cb39c6e583157463..6ed355c97f4fea6cb7e479f377d91a9d4d1fc2f2 100644 (file)
@@ -56,9 +56,10 @@ NESTED (__setcontext, FRAMESZ, ra)
 #endif
 
        PTR_ADDIU sp, -FRAMESZ
+       cfi_adjust_cfa_offset (FRAMESZ)
 
 #ifdef __PIC__
-       SETUP_GP64 (GPOFF, __setcontext)
+       SETUP_GP64_STACK (GPOFF, __setcontext)
        SAVE_GP (GPOFF)
 #endif
 
@@ -152,6 +153,7 @@ NESTED (__setcontext, FRAMESZ, ra)
           and call the signal return syscall as if a signal
           handler exited normally.  */
        PTR_ADDIU sp, -((RT_SIGFRAME_SIZE + ALSZ) & ALMASK)
+       cfi_adjust_cfa_offset ((RT_SIGFRAME_SIZE + ALSZ) & ALMASK)
 
        /* Only ucontext is referred to from rt_sigreturn,
           copy it.  */
@@ -175,11 +177,13 @@ NESTED (__setcontext, FRAMESZ, ra)
           path.  Successful rt_sigreturn never returns to
           its calling place.  */
        PTR_ADDIU sp, ((RT_SIGFRAME_SIZE + ALSZ) & ALMASK)
+       cfi_adjust_cfa_offset (-((RT_SIGFRAME_SIZE + ALSZ) & ALMASK))
 99:
 #ifdef __PIC__
        PTR_LA  t9, JUMPTARGET (__syscall_error)
-       RESTORE_GP64
+       RESTORE_GP64_STACK
        PTR_ADDIU sp, FRAMESZ
+       cfi_adjust_cfa_offset (-FRAMESZ)
        jr      t9
 
 #else  /* ! __PIC__ */
index d965f3919b7dde0013a1a0062bce2918668d2fb9..ddd3b28fde9b2f8bcc964d61906695b73acc53e3 100644 (file)
@@ -63,7 +63,8 @@ NESTED (__swapcontext, FRAMESZ, ra)
 # endif
 
        PTR_ADDIU sp, -FRAMESZ
-       SETUP_GP64 (GPOFF, __swapcontext)
+       cfi_adjust_cfa_offset (FRAMESZ)
+       SETUP_GP64_STACK (GPOFF, __swapcontext)
        SAVE_GP (GPOFF)
 
 #else  /* ! __PIC__ */
@@ -198,8 +199,9 @@ NESTED (__swapcontext, FRAMESZ, ra)
 99:
 #ifdef __PIC__
        PTR_LA  t9, JUMPTARGET (__syscall_error)
-       RESTORE_GP64
+       RESTORE_GP64_STACK
        PTR_ADDIU sp, FRAMESZ
+       cfi_adjust_cfa_offset (-FRAMESZ)
        jr      t9
 
 #else  /* ! __PIC__ */
index b9503c3943a20174be001f876bd5f969df136ee3..d627923528badd31ba3d26fc0e6fc59af6157bca 100644 (file)
@@ -42,7 +42,8 @@ NESTED(__vfork,FRAMESZ,sp)
        SETUP_GP
 #endif
        PTR_SUBU sp, FRAMESZ
-       SETUP_GP64 (a5, __vfork)
+       cfi_adjust_cfa_offset (FRAMESZ)
+       SETUP_GP64_REG (a5, __vfork)
 #ifdef __PIC__
        SAVE_GP (GPOFF)
 #endif
@@ -63,6 +64,7 @@ NESTED(__vfork,FRAMESZ,sp)
 #endif
 
        PTR_ADDU        sp, FRAMESZ
+       cfi_adjust_cfa_offset (-FRAMESZ)
 
        SAVE_PID
 
@@ -75,20 +77,22 @@ NESTED(__vfork,FRAMESZ,sp)
 
        RESTORE_PID
 
+       cfi_remember_state
        bnez            a3,L(error)
 
        /* Successful return from the parent or child.  */
-       RESTORE_GP64
+       RESTORE_GP64_REG
        ret
 
        /* Something bad happened -- no child created.  */
 L(error):
+       cfi_restore_state
 #ifdef __PIC__
        PTR_LA          t9, __syscall_error
-       RESTORE_GP64
+       RESTORE_GP64_REG
        jr              t9
 #else
-       RESTORE_GP64
+       RESTORE_GP64_REG
        j               __syscall_error
 #endif
        END(__vfork)