about summary refs log tree commit diff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2005-12-30 22:17:53 +0000
committerUlrich Drepper <drepper@redhat.com>2005-12-30 22:17:53 +0000
commit3ddf7149f0acbffc3a24858faac04f29f57bd415 (patch)
tree6c1fe8af1a3c57e99080525cffd05bc537bd146b
parent5ad77144942c0ea0a3f3c71d4ddccdf91e64771c (diff)
downloadglibc-3ddf7149f0acbffc3a24858faac04f29f57bd415.tar.gz
glibc-3ddf7149f0acbffc3a24858faac04f29f57bd415.tar.xz
glibc-3ddf7149f0acbffc3a24858faac04f29f57bd415.zip
* sysdeps/sh/sysdep.h: Add cfi instrumentation to asm fragments.
	* sysdeps/unix/sysv/linux/sh/sysdep.h: Likewise.
	* sysdeps/sh/_mcount.S: Add cfi instrumentation.
	* sysdeps/unix/sh/sysdep.S: Likewise.
	* sysdeps/unix/sysv/linux/sh/makecontext.S: Adjust cfi_startproc.
	* sysdeps/unix/sysv/linux/sh/sh4/getcontext.S: Remove now duplicate
	cfi_startproc and cfi_endproc.
	* sysdeps/unix/sysv/linux/sh/sh4/setcontext.S: Likewise.
	* sysdeps/unix/sysv/linux/sh/sh4/swapcontext.S: Likewise.
	* sysdeps/unix/sysv/linux/sh/sh3/getcontext.S: Likewise.
	* sysdeps/unix/sysv/linux/sh/sh3/setcontext.S: Likewise.
	* sysdeps/unix/sysv/linux/sh/sh3/swapcontext.S: Likewise.
	* sysdeps/unix/sysv/linux/sh/socket.S: Likewise.
	* sysdeps/unix/sysv/linux/sh/sysdep.S: Add cfi_endproc.
-rw-r--r--ChangeLog17
-rw-r--r--sysdeps/sh/sysdep.h11
-rw-r--r--sysdeps/unix/sysv/linux/sh/makecontext.S2
-rw-r--r--sysdeps/unix/sysv/linux/sh/sh3/getcontext.S2
-rw-r--r--sysdeps/unix/sysv/linux/sh/sh3/setcontext.S2
-rw-r--r--sysdeps/unix/sysv/linux/sh/sh3/swapcontext.S2
-rw-r--r--sysdeps/unix/sysv/linux/sh/sh4/getcontext.S2
-rw-r--r--sysdeps/unix/sysv/linux/sh/sh4/setcontext.S2
-rw-r--r--sysdeps/unix/sysv/linux/sh/sh4/swapcontext.S2
-rw-r--r--sysdeps/unix/sysv/linux/sh/socket.S2
-rw-r--r--sysdeps/unix/sysv/linux/sh/sysdep.S4
-rw-r--r--sysdeps/unix/sysv/linux/sh/sysdep.h9
12 files changed, 39 insertions, 18 deletions
diff --git a/ChangeLog b/ChangeLog
index a649c42a54..e19a45e0d3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,20 @@
+2005-12-29  Kaz Kojima  <kkojima@rr.iij4u.or.jp>
+
+	* sysdeps/sh/sysdep.h: Add cfi instrumentation to asm fragments.
+	* sysdeps/unix/sysv/linux/sh/sysdep.h: Likewise.
+	* sysdeps/sh/_mcount.S: Add cfi instrumentation.
+	* sysdeps/unix/sh/sysdep.S: Likewise.
+	* sysdeps/unix/sysv/linux/sh/makecontext.S: Adjust cfi_startproc.
+	* sysdeps/unix/sysv/linux/sh/sh4/getcontext.S: Remove now duplicate
+	cfi_startproc and cfi_endproc.
+	* sysdeps/unix/sysv/linux/sh/sh4/setcontext.S: Likewise.
+	* sysdeps/unix/sysv/linux/sh/sh4/swapcontext.S: Likewise.
+	* sysdeps/unix/sysv/linux/sh/sh3/getcontext.S: Likewise.
+	* sysdeps/unix/sysv/linux/sh/sh3/setcontext.S: Likewise.
+	* sysdeps/unix/sysv/linux/sh/sh3/swapcontext.S: Likewise.
+	* sysdeps/unix/sysv/linux/sh/socket.S: Likewise.
+	* sysdeps/unix/sysv/linux/sh/sysdep.S: Add cfi_endproc.
+
 2005-12-30  Ulrich Drepper  <drepper@redhat.com>
 
 	* sysdeps/powerpc/powerpc64/setjmp-common.S: Make sure pointer guard
diff --git a/sysdeps/sh/sysdep.h b/sysdeps/sh/sysdep.h
index 202c701a10..743631ad71 100644
--- a/sysdeps/sh/sysdep.h
+++ b/sysdeps/sh/sysdep.h
@@ -1,5 +1,5 @@
 /* Assembler macros for SH.
-   Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1999, 2000, 2005 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
@@ -52,10 +52,12 @@
   ASM_TYPE_DIRECTIVE (C_SYMBOL_NAME(name),function)			      \
   .align ALIGNARG(5);							      \
   C_LABEL(name)								      \
+  cfi_startproc;							      \
   CALL_MCOUNT
 
 #undef	END
 #define END(name)							      \
+  cfi_endproc;								      \
   ASM_SIZE_DIRECTIVE(C_SYMBOL_NAME(name))
 
 /* If compiled for profiling, call `mcount' at the start of each function.  */
@@ -63,12 +65,17 @@
 #define CALL_MCOUNT					\
 	mov.l	1f,r1;					\
 	sts.l	pr,@-r15;				\
+	cfi_adjust_cfa_offset (4);			\
+	cfi_rel_offset (pr, 0);				\
 	mova	2f,r0;					\
 	jmp	@r1;					\
 	 lds	r0,pr;					\
 	.align	2;					\
 1:	.long	mcount;					\
-2:	lds.l	@r15+,pr
+2:	lds.l	@r15+,pr;				\
+	cfi_adjust_cfa_offset (-4);			\
+	cfi_restore (pr)
+
 #else
 #define CALL_MCOUNT		/* Do nothing.  */
 #endif
diff --git a/sysdeps/unix/sysv/linux/sh/makecontext.S b/sysdeps/unix/sysv/linux/sh/makecontext.S
index deb6181750..877d78d396 100644
--- a/sysdeps/unix/sysv/linux/sh/makecontext.S
+++ b/sysdeps/unix/sysv/linux/sh/makecontext.S
@@ -32,7 +32,6 @@
 
 	.text
 	.align	5
-	cfi_startproc
 ENTRY(__makecontext)
 	mov	#4, r3
 	mov.l	@(oSS_SP,r4), r1
@@ -140,6 +139,7 @@ ENTRY(__makecontext)
 .L4:
 	.long	HIDDEN_JUMPTARGET(exit)
 #endif
+	cfi_startproc
 PSEUDO_END(__makecontext)
 
 weak_alias (__makecontext, makecontext)
diff --git a/sysdeps/unix/sysv/linux/sh/sh3/getcontext.S b/sysdeps/unix/sysv/linux/sh/sh3/getcontext.S
index 3ea47d4a5c..66b3daaa3b 100644
--- a/sysdeps/unix/sysv/linux/sh/sh3/getcontext.S
+++ b/sysdeps/unix/sysv/linux/sh/sh3/getcontext.S
@@ -25,7 +25,6 @@
 
 	.text
 	.align  5
-	cfi_startproc
 ENTRY(__getcontext)
 
 	/* Return value of getcontext.  R0 is the only register whose
@@ -84,7 +83,6 @@ ENTRY(__getcontext)
 	rts
 	 nop
 
-	cfi_endproc
 PSEUDO_END(__getcontext)
 
 weak_alias (__getcontext, getcontext)
diff --git a/sysdeps/unix/sysv/linux/sh/sh3/setcontext.S b/sysdeps/unix/sysv/linux/sh/sh3/setcontext.S
index 30fbf7dec3..3136267aca 100644
--- a/sysdeps/unix/sysv/linux/sh/sh3/setcontext.S
+++ b/sysdeps/unix/sysv/linux/sh/sh3/setcontext.S
@@ -25,7 +25,6 @@
 
 	.text
 	.align  5
-	cfi_startproc
 ENTRY(__setcontext)
 
 	mov	r4, r8
@@ -95,7 +94,6 @@ ENTRY(__setcontext)
 	jmp	@r0
 	 mov.l	@r15+, r0
 
-	cfi_endproc
 PSEUDO_END(__setcontext)
 
 weak_alias (__setcontext, setcontext)
diff --git a/sysdeps/unix/sysv/linux/sh/sh3/swapcontext.S b/sysdeps/unix/sysv/linux/sh/sh3/swapcontext.S
index aa0129e9ac..64035e5545 100644
--- a/sysdeps/unix/sysv/linux/sh/sh3/swapcontext.S
+++ b/sysdeps/unix/sysv/linux/sh/sh3/swapcontext.S
@@ -25,7 +25,6 @@
 
 	.text
 	.align  5
-	cfi_startproc
 ENTRY(__swapcontext)
 
 	/* Return value of getcontext.  R0 is the only register whose
@@ -128,7 +127,6 @@ ENTRY(__swapcontext)
 	jmp	@r0
 	 mov.l	@r15+, r0
 	
-	cfi_endproc
 PSEUDO_END(__swapcontext)
 
 weak_alias (__swapcontext, swapcontext)
diff --git a/sysdeps/unix/sysv/linux/sh/sh4/getcontext.S b/sysdeps/unix/sysv/linux/sh/sh4/getcontext.S
index 380c4591dd..68bc235bcf 100644
--- a/sysdeps/unix/sysv/linux/sh/sh4/getcontext.S
+++ b/sysdeps/unix/sysv/linux/sh/sh4/getcontext.S
@@ -25,7 +25,6 @@
 
 	.text
 	.align  5
-	cfi_startproc
 ENTRY(__getcontext)
 
 	/* Return value of getcontext.  R0 is the only register whose
@@ -127,7 +126,6 @@ ENTRY(__getcontext)
 	rts
 	 nop
 
-	cfi_endproc
 PSEUDO_END(__getcontext)
 
 weak_alias (__getcontext, getcontext)
diff --git a/sysdeps/unix/sysv/linux/sh/sh4/setcontext.S b/sysdeps/unix/sysv/linux/sh/sh4/setcontext.S
index 9e98910b4b..2bc546d1a1 100644
--- a/sysdeps/unix/sysv/linux/sh/sh4/setcontext.S
+++ b/sysdeps/unix/sysv/linux/sh/sh4/setcontext.S
@@ -25,7 +25,6 @@
 
 	.text
 	.align  5
-	cfi_startproc
 ENTRY(__setcontext)
 
 	mov	r4, r8
@@ -135,7 +134,6 @@ ENTRY(__setcontext)
 	jmp	@r0
 	 mov.l	@r15+, r0
 
-	cfi_endproc
 PSEUDO_END(__setcontext)
 
 weak_alias (__setcontext, setcontext)
diff --git a/sysdeps/unix/sysv/linux/sh/sh4/swapcontext.S b/sysdeps/unix/sysv/linux/sh/sh4/swapcontext.S
index 1d58a40e70..1aeca1b1a7 100644
--- a/sysdeps/unix/sysv/linux/sh/sh4/swapcontext.S
+++ b/sysdeps/unix/sysv/linux/sh/sh4/swapcontext.S
@@ -25,7 +25,6 @@
 
 	.text
 	.align  5
-	cfi_startproc
 ENTRY(__swapcontext)
 
 	/* Return value of getcontext.  R0 is the only register whose
@@ -210,7 +209,6 @@ ENTRY(__swapcontext)
 	jmp	@r0
 	 mov.l	@r15+, r0
 	
-	cfi_endproc
 PSEUDO_END(__swapcontext)
 
 weak_alias (__swapcontext, swapcontext)
diff --git a/sysdeps/unix/sysv/linux/sh/socket.S b/sysdeps/unix/sysv/linux/sh/socket.S
index eb1761b94b..c83b0f2601 100644
--- a/sysdeps/unix/sysv/linux/sh/socket.S
+++ b/sysdeps/unix/sysv/linux/sh/socket.S
@@ -88,7 +88,6 @@
 #endif
 
 .globl __socket
-	cfi_startproc
 ENTRY (__socket)
 	/* This will not work in the case of a socket call being interrupted
 	   by a signal.  If the signal handler uses any stack the arguments
@@ -169,7 +168,6 @@ ENTRY (__socket)
 	bra	.Lsyscall_error
 	 nop
 #endif
-	cfi_endproc
 
 	.align 2
 .L1:
diff --git a/sysdeps/unix/sysv/linux/sh/sysdep.S b/sysdeps/unix/sysv/linux/sh/sysdep.S
index 33fdc748b5..176d99aab7 100644
--- a/sysdeps/unix/sysv/linux/sh/sysdep.S
+++ b/sysdeps/unix/sysv/linux/sh/sysdep.S
@@ -1,4 +1,5 @@
-/* Copyright (C) 1995, 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+/* Copyright (C) 1995, 1996, 1997, 1998, 1999, 2005
+   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
@@ -27,6 +28,7 @@
 
 ENTRY (__syscall_error)
 	neg r4, r0
+	cfi_endproc
 
 #define __syscall_error __syscall_error_1
 #include <sysdeps/unix/sh/sysdep.S>
diff --git a/sysdeps/unix/sysv/linux/sh/sysdep.h b/sysdeps/unix/sysv/linux/sh/sysdep.h
index 1a412e53db..b41236299d 100644
--- a/sysdeps/unix/sysv/linux/sh/sysdep.h
+++ b/sysdeps/unix/sysv/linux/sh/sysdep.h
@@ -141,13 +141,22 @@
 #   define SYSCALL_ERROR_HANDLER \
 	neg r0,r1; \
 	mov.l r14,@-r15; \
+	cfi_adjust_cfa_offset (4); \
+	cfi_rel_offset (r14, 0); \
 	mov.l r12,@-r15; \
+	cfi_adjust_cfa_offset (4); \
+	cfi_rel_offset (r12, 0); \
 	mov.l r1,@-r15; \
+	cfi_adjust_cfa_offset (4); \
+	cfi_rel_offset (r1, 0); \
 	mov.l 0f,r12; \
 	mova 0f,r0; \
 	add r0,r12; \
 	sts.l pr,@-r15; \
+	cfi_adjust_cfa_offset (4); \
+	cfi_rel_offset (pr, 0); \
 	mov r15,r14; \
+	cfi_def_cfa_register (r14); \
 	mov.l 1f,r1; \
 	bsrf r1; \
          nop; \