On 2018-01-03 01:13, Steffe - wrote:

> I tested now with s6-rc version 0.3.0.0 and skalibs 2.6.0.1 and the SIGFPE
> is gone. If I just run everything it seems to work OK. But when I tried to
> run it through Valgrind I did get an assert, but I don't know if that might
> be related to valgrind or not. The output is here:
> http://steffe.net/s6/valgrind_skalib_2.6.0.1.txt

That's unrelated to s6. Incidentally, that assert() in glibc was
introduced by me, but it is wrong in case the newly spawned process is
killed by somebody sending random signal to random pids (nobody knows
the pid of the new process until the parent runs, which it won't do
until the child has actually made the assertion true, so nobody has any
business sending a signal that way). Anyway, the assert has since been
removed, but that probably hasn't made it to a release yet.

Normally, you'd never trigger this assert except for the
sending-lethal-signals-to-random-pids. However, valgrind's clone()
replacement doesn't support the CLONE_* combination used to implement
posix_spawn (sharing memory between parent and child, yet being
different processes), so the assert() will trigger consistently for any
program using posix_spawn and a recent enough glibc. I'm not sure
whether valgrind works after the assert has been removed - it's possible
that it works fine in the normal case where all the spawn actions and
the execve succeed, but in case the child needs to report an error (e.g.
simply execve failing with ENOENT), that error reporting won't work
under valgrind.

In case you want to debug skaware programs under valgrind and are stuck
with glibc 2.26, I think you should be able to simply update the sysdeps
to pretend posix_spawn is not available.

Rasmus

Reply via email to