On 8/24/22 19:31, enh via Toybox wrote: > I don't know why we get away with this on Linux, but macOS really > means business with the "values of objects of automatic storage > invocation duration that do not have the volatile type and have > been changed between the setjmp() invocation and longjmp() call are > indeterminate" thing, leading to bad fds and a bad pid.
Their setjmp() isn't annotated with attribute((__returns_twice__)). Musl had that problem with vfork() once upon a time. Rich fixed it: https://landley.net/notes-2017.html#03-02-2017 Sigh. Applied. (And then I patched on top if it because TT starts zeroed so you don't need to set fd[0] to 0. Don't think I broke anything but can't test mac.) > Using > volatile causes lots of warnings about passing `volatile int*` > instead of `int*`, so it's a smaller change to move the fields into > TT (and avoid the "automatic storage" part) than it is to add the > `volatile` modifier. > > Four timeout tests fail on macOS (both locally and on github's CI) > without this patch, and all timeout tests pass on macOS with this > patch. Got it. I still consider this a mac bug, but technically it's "lack of longstanding gcc extension use in their libc". Roughly on the level of not having the empty (x ? : y) extension... (Someday, the C standards committee may catch up, but I expect Planck's principle to be involved if so.) Rob _______________________________________________ Toybox mailing list [email protected] http://lists.landley.net/listinfo.cgi/toybox-landley.net
