summaryrefslogtreecommitdiff
path: root/libexec/ld.so
diff options
context:
space:
mode:
authorPhilip Guenthe <guenther@cvs.openbsd.org>2010-05-11 16:27:15 +0000
committerPhilip Guenthe <guenther@cvs.openbsd.org>2010-05-11 16:27:15 +0000
commitcd94f64b4206409b7acf62500da883373312734e (patch)
treef47732c481e2c8cb778cdd7a293b9e32a297a772 /libexec/ld.so
parented41d8396b0d7be2b5fd6ef0bafa429d126f141f (diff)
Correct the _dl_sigprocmask() stub to take and store signal masks
as 32bit values instead of 64bit values, synchronizing it with the libc stub. gcc4 apparently packs the stack in _dl_bind() more tightly, so this was resulting in the saved rbx register being overwriten. ok drahn@, marco@, NicM@
Diffstat (limited to 'libexec/ld.so')
-rw-r--r--libexec/ld.so/amd64/ldasm.S6
1 files changed, 3 insertions, 3 deletions
diff --git a/libexec/ld.so/amd64/ldasm.S b/libexec/ld.so/amd64/ldasm.S
index 07fdf37fa91..4e9ed24f1c5 100644
--- a/libexec/ld.so/amd64/ldasm.S
+++ b/libexec/ld.so/amd64/ldasm.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: ldasm.S,v 1.6 2006/05/03 16:10:52 drahn Exp $ */
+/* $OpenBSD: ldasm.S,v 1.7 2010/05/11 16:27:14 guenther Exp $ */
/*
* Copyright (c) 2002,2004 Dale Rahn
@@ -106,14 +106,14 @@ DL_SYSCALL2(sysctl,__sysctl)
.global _dl_sigprocmask
.type _dl_sigprocmask,@function
_dl_sigprocmask:
- movq (%rsi),%rsi # fetch indirect...
+ movl (%rsi),%esi # fetch indirect...
movl $SYS_sigprocmask, %eax
movq %rcx, %r10
syscall
jc 1b /* error: result = -errno */
testq %rdx,%rdx # test if old mask requested
jz 2f
- movq %rax,(%rdx) # store old mask
+ movl %eax,(%rdx) # store old mask
xorq %rax,%rax
2: ret