aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--linuxthreads/ChangeLog6
-rw-r--r--linuxthreads/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h19
-rw-r--r--linuxthreads/sysdeps/unix/sysv/linux/alpha/vfork.S17
3 files changed, 33 insertions, 9 deletions
diff --git a/linuxthreads/ChangeLog b/linuxthreads/ChangeLog
index 1d05b4f..9dee60f 100644
--- a/linuxthreads/ChangeLog
+++ b/linuxthreads/ChangeLog
@@ -1,3 +1,9 @@
+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.
+
2003-05-30 Andreas Jaeger <aj@suse.de>
* sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h
diff --git a/linuxthreads/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h b/linuxthreads/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h
index 083db2f..9ea779e 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 b4f35e1..cfaae10 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)