mirror_zfs/lib/libspl
Rob Norris 4d451bae8a libspl: hide global data objects
Currently libspl is a static archive that is linked into multiple shared
objects, which then re-export its symbols. We intend to fix this soon.

For the moment though, most programs shipped with OpenZFS depend on two
or more of these shared objects, and see the same symbols twice. For
functions this is not a problem, as they do not have any mutable state
and so the linker can simply select the first one and use that for all.

For global data objects however, each shared object will have direct
(non-relocatable) references to its own instance of the symbol, such
that changes on one will not necessarily be seen by the other. While
this shouldn't be a problem in practice as these reexported interfaces
are not supposed to be used, they are technically undefined behaviour in
C (C17 6.9.2) and are reported by ASAN as a violation of C++'s "One
Definition Rule".

To fix this, we hide these globals inside their compilation units, and
add access functions and macros as appropriate to preserve the existing
API (though not ABI).

Sponsored-by: https://despairlabs.com/sponsor/
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Rob Norris <robn@despairlabs.com>
Closes #17861
2025-11-12 10:04:22 -08:00
..
include libspl: hide global data objects 2025-11-12 10:04:22 -08:00
os Validate mountpoint on path-based unmount using statx 2025-07-08 22:10:00 -04:00
assert.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
atomic.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
backtrace.c Support using llvm-libunwind 2025-04-24 13:58:48 -04:00
condvar.c libspl: move condvar implementation from libzpool 2025-11-12 09:59:03 -08:00
cred.c zfs_context: move vn_dumpdir to libzpool 2025-11-12 10:01:28 -08:00
getexecname.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
kmem.c libspl: move kmem implementation from libzpool 2025-11-12 10:00:21 -08:00
kstat.c libspl: move kstat implementation from libzpool 2025-11-12 10:00:06 -08:00
libspl_impl.h libspl: move random impl from libzpool 2025-11-12 10:01:39 -08:00
libspl.c libspl: hide global data objects 2025-11-12 10:04:22 -08:00
list.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
Makefile.am libspl: move SID implementation from libzpool 2025-11-12 10:01:56 -08:00
mkdirp.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
mutex.c libspl: move mutex implementation from libzpool 2025-11-12 09:58:44 -08:00
page.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
procfs_list.c libspl: move procfs_list implementation from libzpool 2025-11-12 10:00:13 -08:00
random.c libspl: hide global data objects 2025-11-12 10:04:22 -08:00
rwlock.c libspl: move rwlock implementation from libzpool 2025-11-12 09:58:55 -08:00
sid.c libspl: move SID implementation from libzpool 2025-11-12 10:01:56 -08:00
strlcat.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
strlcpy.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
taskq.c libspl: hide global data objects 2025-11-12 10:04:22 -08:00
thread.c libspl: hide global data objects 2025-11-12 10:04:22 -08:00
timestamp.c SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
tunables.c libspl: add API for manipulating tunables 2025-07-15 15:46:58 -07:00