[libcxx-commits] [clang] [compiler-rt] [clang-tools-extra] [mlir] [libunwind] [libcxxabi] [llvm] [lldb] [libcxx] [flang] [lld] [libc] [asan] Install `pthread_atfork` (PR #75290)

Rainer Orth via libcxx-commits libcxx-commits at lists.llvm.org
Thu Dec 21 05:57:43 PST 2023


rorth wrote:

> I'll give such a patch a try...

That would be something like
```
int internal_fork(void) {
  // Call syscall directly to avoid pthread_atfork handler processing.
  //
  // This is highly unportable on Solaris since syscalls are an implementation
  // detail subject to change.
  return syscall(SYS_forksys, 0, 0);
}
```
Unfortunately, this fails miserably: at least every asan test that invokes the `llvm-symbolizer` fails like
```
==4030==Launching Symbolizer process: /usr/bin/llvm-symbolizer --demangle --inlines --default-arch=i386 
==4031==Waiting on the process failed (errno 10).
==4031==WARNING: external symbolizer didn't start up correctly!
```
>From all I could learn from the OpenSolaris `libc` code (`lib/libc/port/threads/scalls.c` (`forkx`), it seems that there happens so much processing on `libc`-internal data structures that cannot simply be skipped that there's no reasonable chance to run `fork` without the handlers.  Expecting to be able to seems to be hack that may work on some platforms, but not on others.

https://github.com/llvm/llvm-project/pull/75290


More information about the libcxx-commits mailing list