Skip to content

Commit

Permalink
* sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h (PSEUDO): Use and re…
Browse files Browse the repository at this point in the history
…quire 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.
  • Loading branch information
Richard Henderson committed Jun 6, 2003
1 parent 6f1e513 commit 63e1f70
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 9 deletions.
6 changes: 6 additions & 0 deletions linuxthreads/ChangeLog
Original file line number Diff line number Diff line change
@@ -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
Expand Down
19 changes: 15 additions & 4 deletions linuxthreads/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h
Original file line number Diff line number Diff line change
Expand Up @@ -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); \
Expand All @@ -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; \
Expand All @@ -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)
Expand Down
17 changes: 12 additions & 5 deletions linuxthreads/sysdeps/unix/sysv/linux/alpha/vfork.S
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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)

0 comments on commit 63e1f70

Please sign in to comment.