Module Name: src
Committed By: thorpej
Date: Tue May 25 00:14:41 UTC 2021
Modified Files:
src/lib/libc/arch/alpha/gen: __longjmp14.c
src/lib/libc/compat/arch/alpha/gen: compat__setjmp.S compat_setjmp.S
Log Message:
POSIX sez:
The longjmp() function shall not cause setjmp() to return 0; if val
is 0, setjmp() shall return 1.
Fixes the _longjmp_zero and longjmp_zero test cases in the t_setjmp
test on alpha.
To generate a diff of this commit:
cvs rdiff -u -r1.7 -r1.8 src/lib/libc/arch/alpha/gen/__longjmp14.c
cvs rdiff -u -r1.4 -r1.5 src/lib/libc/compat/arch/alpha/gen/compat__setjmp.S
cvs rdiff -u -r1.2 -r1.3 src/lib/libc/compat/arch/alpha/gen/compat_setjmp.S
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/lib/libc/arch/alpha/gen/__longjmp14.c
diff -u src/lib/libc/arch/alpha/gen/__longjmp14.c:1.7 src/lib/libc/arch/alpha/gen/__longjmp14.c:1.8
--- src/lib/libc/arch/alpha/gen/__longjmp14.c:1.7 Wed Mar 13 08:05:46 2013
+++ src/lib/libc/arch/alpha/gen/__longjmp14.c Tue May 25 00:14:41 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: __longjmp14.c,v 1.7 2013/03/13 08:05:46 martin Exp $ */
+/* $NetBSD: __longjmp14.c,v 1.8 2021/05/25 00:14:41 thorpej Exp $ */
/*-
* Copyright (c) 2003 The NetBSD Foundation, Inc.
@@ -54,7 +54,7 @@ __longjmp14(jmp_buf env, int val)
/* Ensure non-zero return value */
if (val == 0)
- val = -1;
+ val = 1;
/* Set _UC_SIGMASK and _UC_CPU */
uc.uc_flags = _UC_SIGMASK | _UC_CPU;
Index: src/lib/libc/compat/arch/alpha/gen/compat__setjmp.S
diff -u src/lib/libc/compat/arch/alpha/gen/compat__setjmp.S:1.4 src/lib/libc/compat/arch/alpha/gen/compat__setjmp.S:1.5
--- src/lib/libc/compat/arch/alpha/gen/compat__setjmp.S:1.4 Fri Jan 24 10:19:18 2014
+++ src/lib/libc/compat/arch/alpha/gen/compat__setjmp.S Tue May 25 00:14:41 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: compat__setjmp.S,v 1.4 2014/01/24 10:19:18 skrll Exp $ */
+/* $NetBSD: compat__setjmp.S,v 1.5 2021/05/25 00:14:41 thorpej Exp $ */
/*
* Copyright (c) 1994, 1995 Carnegie-Mellon University.
@@ -115,7 +115,9 @@ LEAF(_longjmp, 2)
ldt ft0, (69 * 8)(a0) /* get sc_fpcr */
mt_fpcr ft0 /* and restore it. */
- mov a1, v0 /* return second arg */
+ bne a1, 1f /* val != 0, just go */
+ ldiq a1, 1 /* val = 1 otherwise */
+1: mov a1, v0 /* return second arg */
RET
botch:
Index: src/lib/libc/compat/arch/alpha/gen/compat_setjmp.S
diff -u src/lib/libc/compat/arch/alpha/gen/compat_setjmp.S:1.2 src/lib/libc/compat/arch/alpha/gen/compat_setjmp.S:1.3
--- src/lib/libc/compat/arch/alpha/gen/compat_setjmp.S:1.2 Thu Jan 23 03:08:50 2014
+++ src/lib/libc/compat/arch/alpha/gen/compat_setjmp.S Tue May 25 00:14:41 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: compat_setjmp.S,v 1.2 2014/01/23 03:08:50 christos Exp $ */
+/* $NetBSD: compat_setjmp.S,v 1.3 2021/05/25 00:14:41 thorpej Exp $ */
/*
* Copyright (c) 1994, 1995 Carnegie-Mellon University.
@@ -114,7 +114,9 @@ END(setjmp)
LEAF(longjmp, 2)
LDGP(pv)
- stq a1, (( 0 + 4) * 8)(a0) /* save return value */
+ bne a1, 1f /* val != 0, just go */
+ ldiq a1, 1 /* val = 1 otherwise */
+1: stq a1, (( 0 + 4) * 8)(a0) /* save return value */
CALL(sigreturn) /* use sigreturn to return */
botch: