Date: Thu, 22 Apr 2021 08:21:17 +0000 From: bugzilla-noreply@freebsd.org To: bugs@FreeBSD.org Subject: [Bug 255320] Wrong setjmp return value in FreeBSD 13 (at least on aarch64) Message-ID: <bug-255320-227@https.bugs.freebsd.org/bugzilla/>
next in thread | raw e-mail | index | archive | help
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D255320 Bug ID: 255320 Summary: Wrong setjmp return value in FreeBSD 13 (at least on aarch64) Product: Base System Version: 13.0-RELEASE Hardware: Any OS: Any Status: New Severity: Affects Many People Priority: --- Component: misc Assignee: bugs@FreeBSD.org Reporter: pkk@spth.de I noticed some programs failing on my Raspi 4 on FreeBSD 13, and tracked the issue down to setjmp behaviour. Apparently setjmp returns 0 when it should return 1. The FreeBSD man page for setjmp / longjmp does _not_ state that setjmp shou= ld return 1 on a longjmp with argument 0. But it states that the functions are conforming to the ISO C90 standard. All C standards, including ISO C90 mand= ate that setjmp should return 1 on a longjmp with argument 0. I don't know if this is an issue specific to aarch64, or just some generic FreeBSD issue, as the Raspi is my only FreeBSD system. I created a small test program to reproduce the issue; it fails on the Rasp= i, but passes on Debian GNU/Linux on amd64: I compile using cc test.c, execute via ./a.out. #include <setjmp.h> #include <assert.h> jmp_buf buf; void g(void) { // When called with an argument of 0, longjmp() should make setjmp() return 1 instead. longjmp(buf, 0); g(); } void f1(void) { static int i; int j; i =3D 0; j =3D setjmp(buf); assert(i =3D=3D j); i++; if(!j) g(); } int main(void) { f1();=20=20=20 return 0; } --=20 You are receiving this mail because: You are the assignee for the bug.=
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-255320-227>