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: