about summary refs log tree commit diff
path: root/linuxthreads/sysdeps/unix/sysv
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2003-06-06 05:51:03 +0000
committerRichard Henderson <rth@redhat.com>2003-06-06 05:51:03 +0000
commit63e1f70d4dcc68de6c6c31a3878bd319e9d79f81 (patch)
tree16bb7b68fd554326f6c498265c4929218bef9ec1 /linuxthreads/sysdeps/unix/sysv
parent6f1e513dbbd1f786d93a6e402f2b23f4e0814a9d (diff)
downloadglibc-63e1f70d4dcc68de6c6c31a3878bd319e9d79f81.tar.gz
glibc-63e1f70d4dcc68de6c6c31a3878bd319e9d79f81.tar.xz
glibc-63e1f70d4dcc68de6c6c31a3878bd319e9d79f81.zip
* sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h (PSEUDO): Use and require CFI assembler directives. * sysdeps/unix/sysv/linux/alpha/vfork.S: Likewise.
2003-06-05  Richard Henderson  <rth@redhat.com>

	* sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h (PSEUDO): Use
	and require CFI assembler directives.
	* sysdeps/unix/sysv/linux/alpha/vfork.S: Likewise.
Diffstat (limited to 'linuxthreads/sysdeps/unix/sysv')
-rw-r--r--linuxthreads/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h19
-rw-r--r--linuxthreads/sysdeps/unix/sysv/linux/alpha/vfork.S17
2 files changed, 27 insertions, 9 deletions
diff --git a/linuxthreads/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h b/linuxthreads/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h
index 083db2f39a..9ea779e0d5 100644
--- a/linuxthreads/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h
+++ b/linuxthreads/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h
@@ -40,10 +40,11 @@
 # define PSEUDO(name, syscall_name, args)			\
 	.globl name;						\
 	.align 4;						\
-	.ent name, 0;						\
+	.type name, @function;					\
+	.usepv name, std;					\
+	cfi_startproc;						\
 __LABEL(name)							\
 	ldgp	gp, 0(pv);					\
-	.prologue 1;						\
 	PSEUDO_PROF;						\
 	PSEUDO_PREPARE_ARGS					\
 	SINGLE_THREAD_P(t0);					\
@@ -55,7 +56,9 @@ __LABEL($pseudo_ret)						\
 	.subsection 2;						\
 __LABEL($pseudo_cancel)						\
 	subq	sp, 64, sp;					\
+	cfi_def_cfa_offset(64);					\
 	stq	ra, 0(sp);					\
+	cfi_offset(ra, -64);					\
 	SAVE_ARGS_##args;					\
 	CENABLE;						\
 	LOAD_ARGS_##args;					\
@@ -67,19 +70,27 @@ __LABEL($pseudo_cancel)						\
 	ldq	ra, 0(sp);					\
 	ldq	v0, 8(sp);					\
 	addq	sp, 64, sp;					\
+	cfi_remember_state;					\
+	cfi_restore(ra);					\
+	cfi_def_cfa_offset(0);					\
 	ret;							\
+	cfi_restore_state;					\
 __LABEL($multi_error)						\
 	CDISABLE;						\
 	ldq	ra, 0(sp);					\
 	ldq	v0, 8(sp);					\
 	addq	sp, 64, sp;					\
+	cfi_restore(ra);					\
+	cfi_def_cfa_offset(0);					\
 __LABEL($syscall_error)						\
 	SYSCALL_ERROR_HANDLER;					\
-	END(name);						\
 	.previous
 
 # undef PSEUDO_END
-# define PSEUDO_END(sym)
+# define PSEUDO_END(sym)					\
+	.subsection 2;						\
+	cfi_endproc;						\
+	.size sym, .-sym
 
 # define SAVE_ARGS_0	/* Nothing.  */
 # define SAVE_ARGS_1	SAVE_ARGS_0; stq a0, 8(sp)
diff --git a/linuxthreads/sysdeps/unix/sysv/linux/alpha/vfork.S b/linuxthreads/sysdeps/unix/sysv/linux/alpha/vfork.S
index b4f35e1a67..cfaae10606 100644
--- a/linuxthreads/sysdeps/unix/sysv/linux/alpha/vfork.S
+++ b/linuxthreads/sysdeps/unix/sysv/linux/alpha/vfork.S
@@ -19,12 +19,13 @@
 
 #include <sysdep-cancel.h>
 
-	.globl __vfork
         .align 4
-        .ent __vfork,0
-__LABEL(__vfork)
+	.globl	__vfork
+	.type	__vfork, @function
+	.usepv	__vfork, std
+	cfi_startproc
+__vfork:
 	ldgp	gp, 0(pv)
-	.prologue 1
 	PSEUDO_PROF
 
 #ifdef SHARED
@@ -46,18 +47,24 @@ __LABEL(__vfork)
 	   fork and vfork object files.  */
 $do_fork:
 	subq	sp, 16, sp
+	cfi_adjust_cfa_offset(16)
 	stq	ra, 0(sp)
+	cfi_offset(ra, -16)
 	jsr	ra, HIDDEN_JUMPTARGET (__fork)
 	ldgp	gp, 0(ra)
 	ldq	ra, 0(sp)
 	addq	sp, 16, sp
+	cfi_restore(ra)
+	cfi_adjust_cfa_offset(-16)
 	ret
 
 $syscall_error:
 	SYSCALL_ERROR_HANDLER
 #endif
 
-PSEUDO_END(__vfork)
+	cfi_endproc
+	.size __vfork, .-__vfork
+
 libc_hidden_def (__vfork)
 
 weak_alias (__vfork, vfork)