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:

Reply via email to