mirror_zfs/lib
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
..
libavl cppcheck: explicitly exclude kernel code from userspace checks 2022-05-10 10:20:55 -07:00
libefi SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
libicp libzpool: add zfs_impl.c, remove from libicp 2025-11-12 10:04:15 -08:00
libnvpair Bump SONAME on libnvpair 2025-11-12 09:38:20 -08:00
libshare SPDX: license tags: BSD-2-Clause 2025-03-13 17:56:46 -07:00
libspl libspl: hide global data objects 2025-11-12 10:04:22 -08:00
libtpool SPDX: license tags: CDDL-1.0 2025-03-13 17:56:27 -07:00
libunicode module: unicode: remove unused uconv.c 2024-11-01 12:12:13 -07:00
libuutil Update all ABI files 2025-11-12 09:39:00 -08:00
libzdb Allow physical rewrite without logical 2025-08-06 10:36:07 -07:00
libzfs libzpool: remove global libzpool includes 2025-11-12 10:03:15 -08:00
libzfs_core Update all ABI files 2025-11-12 09:39:00 -08:00
libzfsbootenv Update all ABI files 2025-11-12 09:39:00 -08:00
libzpool libzpool: add zfs_impl.c, remove from libicp 2025-11-12 10:04:15 -08:00
libzstd libzstd: also build with LIBZPOOL_CPPFLAGS 2024-09-09 14:13:27 -07:00
libzutil Make zpool_find_config() report errors 2025-08-19 13:09:25 -07:00
Makefile.am libzdb: Initial breakout of libzdb 2024-02-05 10:00:41 -08:00