This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch master updated. glibc-2.17-208-gaea7a9b


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  aea7a9b9d2f9482d174ab95881b132de8472a388 (commit)
      from  046f153e209a5cd3f74fd7315743b51ff1853af1 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sources.redhat.com/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=aea7a9b9d2f9482d174ab95881b132de8472a388

commit aea7a9b9d2f9482d174ab95881b132de8472a388
Author: Joseph Myers <joseph@codesourcery.com>
Date:   Mon Feb 11 18:19:14 2013 +0000

    Add CFI information for MIPS assembly sources.

diff --git a/ports/ChangeLog.mips b/ports/ChangeLog.mips
index c00275d..3dcac85 100644
--- a/ports/ChangeLog.mips
+++ b/ports/ChangeLog.mips
@@ -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
index 0000000..7b356e1
--- /dev/null
+++ b/ports/sysdeps/mips/include/sys/asm.h
@@ -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
diff --git a/ports/sysdeps/mips/mips64/bsd-_setjmp.S b/ports/sysdeps/mips/mips64/bsd-_setjmp.S
index 83b1264..5d0f76c 100644
--- a/ports/sysdeps/mips/mips64/bsd-_setjmp.S
+++ b/ports/sysdeps/mips/mips64/bsd-_setjmp.S
@@ -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
diff --git a/ports/sysdeps/mips/mips64/bsd-setjmp.S b/ports/sysdeps/mips/mips64/bsd-setjmp.S
index 15af26a..784e16e 100644
--- a/ports/sysdeps/mips/mips64/bsd-setjmp.S
+++ b/ports/sysdeps/mips/mips64/bsd-setjmp.S
@@ -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
diff --git a/ports/sysdeps/mips/mips64/setjmp.S b/ports/sysdeps/mips/mips64/setjmp.S
index 621e390..5afbbe7 100644
--- a/ports/sysdeps/mips/mips64/setjmp.S
+++ b/ports/sysdeps/mips/mips64/setjmp.S
@@ -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
diff --git a/ports/sysdeps/mips/sys/asm.h b/ports/sysdeps/mips/sys/asm.h
index 605451a..293cf36 100644
--- a/ports/sysdeps/mips/sys/asm.h
+++ b/ports/sysdeps/mips/sys/asm.h
@@ -26,6 +26,10 @@
 # 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
diff --git a/ports/sysdeps/unix/mips/mips32/sysdep.h b/ports/sysdeps/unix/mips/mips32/sysdep.h
index d7d3892..5c5d769 100644
--- a/ports/sysdeps/unix/mips/mips32/sysdep.h
+++ b/ports/sysdeps/unix/mips/mips32/sysdep.h
@@ -24,8 +24,10 @@
 #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);						      \
diff --git a/ports/sysdeps/unix/mips/mips64/n32/sysdep.h b/ports/sysdeps/unix/mips/mips64/n32/sysdep.h
index 37a67a2..49ae769 100644
--- a/ports/sysdeps/unix/mips/mips64/n32/sysdep.h
+++ b/ports/sysdeps/unix/mips/mips64/n32/sysdep.h
@@ -26,13 +26,17 @@
 #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);						      \
diff --git a/ports/sysdeps/unix/mips/mips64/n64/sysdep.h b/ports/sysdeps/unix/mips/mips64/n64/sysdep.h
index 871184b..2670c68 100644
--- a/ports/sysdeps/unix/mips/mips64/n64/sysdep.h
+++ b/ports/sysdeps/unix/mips/mips64/n64/sysdep.h
@@ -26,13 +26,17 @@
 #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);						      \
diff --git a/ports/sysdeps/unix/mips/sysdep.h b/ports/sysdeps/unix/mips/sysdep.h
index bab3bc0..ef5c089 100644
--- a/ports/sysdeps/unix/mips/sysdep.h
+++ b/ports/sysdeps/unix/mips/sysdep.h
@@ -27,17 +27,19 @@
   .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
 
diff --git a/ports/sysdeps/unix/sysv/linux/mips/clone.S b/ports/sysdeps/unix/sysv/linux/mips/clone.S
index 72360f9..ef80188 100644
--- a/ports/sysdeps/unix/sysv/linux/mips/clone.S
+++ b/ports/sysdeps/unix/sysv/linux/mips/clone.S
@@ -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().  */
diff --git a/ports/sysdeps/unix/sysv/linux/mips/getcontext.S b/ports/sysdeps/unix/sysv/linux/mips/getcontext.S
index 0e3d35b..7af6825 100644
--- a/ports/sysdeps/unix/sysv/linux/mips/getcontext.S
+++ b/ports/sysdeps/unix/sysv/linux/mips/getcontext.S
@@ -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__ */
diff --git a/ports/sysdeps/unix/sysv/linux/mips/makecontext.S b/ports/sysdeps/unix/sysv/linux/mips/makecontext.S
index 65f1a6a..d89db01 100644
--- a/ports/sysdeps/unix/sysv/linux/mips/makecontext.S
+++ b/ports/sysdeps/unix/sysv/linux/mips/makecontext.S
@@ -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
 
diff --git a/ports/sysdeps/unix/sysv/linux/mips/mips64/n64/ioctl.S b/ports/sysdeps/unix/sysv/linux/mips/mips64/n64/ioctl.S
index b3bed46..c5f1c35 100644
--- a/ports/sysdeps/unix/sysv/linux/mips/mips64/n64/ioctl.S
+++ b/ports/sysdeps/unix/sysv/linux/mips/mips64/n64/ioctl.S
@@ -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)
diff --git a/ports/sysdeps/unix/sysv/linux/mips/mips64/nptl/sysdep-cancel.h b/ports/sysdeps/unix/sysv/linux/mips/mips64/nptl/sysdep-cancel.h
index 354eba2..6565225 100644
--- a/ports/sysdeps/unix/sysv/linux/mips/mips64/nptl/sysdep-cancel.h
+++ b/ports/sysdeps/unix/sysv/linux/mips/mips64/nptl/sysdep-cancel.h
@@ -57,6 +57,7 @@
     cfi_same_value (gp);						      \
     RESTORESTK;								      \
     ret;								      \
+    cfi_endproc;							      \
   .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel;	      \
   ENTRY (name)								      \
     SAVESTK;								      \
diff --git a/ports/sysdeps/unix/sysv/linux/mips/mips64/syscall.S b/ports/sysdeps/unix/sysv/linux/mips/mips64/syscall.S
index 839276d..850025c 100644
--- a/ports/sysdeps/unix/sysv/linux/mips/mips64/syscall.S
+++ b/ports/sysdeps/unix/sysv/linux/mips/mips64/syscall.S
@@ -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)
diff --git a/ports/sysdeps/unix/sysv/linux/mips/nptl/sysdep-cancel.h b/ports/sysdeps/unix/sysv/linux/mips/nptl/sysdep-cancel.h
index e1dd672..1e0bfed 100644
--- a/ports/sysdeps/unix/sysv/linux/mips/nptl/sysdep-cancel.h
+++ b/ports/sysdeps/unix/sysv/linux/mips/nptl/sysdep-cancel.h
@@ -52,6 +52,7 @@
     .set reorder;							      \
     bne a3, zero, 99b;					       		      \
     ret;								      \
+    cfi_endproc;							      \
   .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel;	      \
   ENTRY (name)								      \
     .set noreorder;							      \
diff --git a/ports/sysdeps/unix/sysv/linux/mips/setcontext.S b/ports/sysdeps/unix/sysv/linux/mips/setcontext.S
index 42f709d..6ed355c 100644
--- a/ports/sysdeps/unix/sysv/linux/mips/setcontext.S
+++ b/ports/sysdeps/unix/sysv/linux/mips/setcontext.S
@@ -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__ */
diff --git a/ports/sysdeps/unix/sysv/linux/mips/swapcontext.S b/ports/sysdeps/unix/sysv/linux/mips/swapcontext.S
index d965f39..ddd3b28 100644
--- a/ports/sysdeps/unix/sysv/linux/mips/swapcontext.S
+++ b/ports/sysdeps/unix/sysv/linux/mips/swapcontext.S
@@ -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__ */
diff --git a/ports/sysdeps/unix/sysv/linux/mips/vfork.S b/ports/sysdeps/unix/sysv/linux/mips/vfork.S
index b9503c3..d627923 100644
--- a/ports/sysdeps/unix/sysv/linux/mips/vfork.S
+++ b/ports/sysdeps/unix/sysv/linux/mips/vfork.S
@@ -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)

-----------------------------------------------------------------------

Summary of changes:
 ports/ChangeLog.mips                               |   45 +++++++++++++++++
 ports/sysdeps/mips/include/sys/asm.h               |   53 ++++++++++++++++++++
 ports/sysdeps/mips/mips64/bsd-_setjmp.S            |    4 +-
 ports/sysdeps/mips/mips64/bsd-setjmp.S             |    4 +-
 ports/sysdeps/mips/mips64/setjmp.S                 |    4 +-
 ports/sysdeps/mips/sys/asm.h                       |   13 ++++-
 ports/sysdeps/unix/mips/mips32/sysdep.h            |    4 ++
 ports/sysdeps/unix/mips/mips64/n32/sysdep.h        |    6 ++
 ports/sysdeps/unix/mips/mips64/n64/sysdep.h        |    6 ++
 ports/sysdeps/unix/mips/sysdep.h                   |   10 ++--
 ports/sysdeps/unix/sysv/linux/mips/clone.S         |   19 ++++++--
 ports/sysdeps/unix/sysv/linux/mips/getcontext.S    |   11 +++-
 ports/sysdeps/unix/sysv/linux/mips/makecontext.S   |    6 ++-
 .../unix/sysv/linux/mips/mips64/n64/ioctl.S        |    4 +-
 .../sysv/linux/mips/mips64/nptl/sysdep-cancel.h    |    1 +
 .../sysdeps/unix/sysv/linux/mips/mips64/syscall.S  |    8 ++-
 .../unix/sysv/linux/mips/nptl/sysdep-cancel.h      |    1 +
 ports/sysdeps/unix/sysv/linux/mips/setcontext.S    |    8 ++-
 ports/sysdeps/unix/sysv/linux/mips/swapcontext.S   |    6 ++-
 ports/sysdeps/unix/sysv/linux/mips/vfork.S         |   12 +++--
 20 files changed, 191 insertions(+), 34 deletions(-)
 create mode 100644 ports/sysdeps/mips/include/sys/asm.h


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]