libvirtcpuid
libvirtcpuid copied to clipboard
Mark `dlsym` with `__attribute__((noinline))`.
In some circumstances (e.g. under higher optimization modes when
compiled with LLVM), dlsym
gets inlined into libvirtcpuid_init_dso
.
When this happens, dlsym's use of __builtin_return_address(0)
no
longer returns the address of dlsym
and instead returns the address of
libvirtcpuid_init_dso
. When that happens, _dl_sym
fails to find the
next dlsym
and the process crashes.