mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager
synced 2024-07-22 10:46:59 +00:00
build: add way to keep unused symbols when linking NetworkManager
NetworkManager (and NetworkManager-all-sym) must not only contain symbols that are used by itself. Also the device and settings plugin are dlopen'd by NetworkManager and use symobls form the binary. That means, if a symbols is only used by a plugin, then we must make sure that the linker keeps it in the binary. Add a mechanism for that.
This commit is contained in:
parent
641f4473b7
commit
684f2acffe
|
@ -2656,6 +2656,12 @@ $(src_core_libNetworkManagerTest_la_OBJECTS): $(src_libnm_core_public_mkenums_h)
|
|||
|
||||
###############################################################################
|
||||
|
||||
# NetworkManager binary also must contain symbols that are not used by the binary
|
||||
# itself, but by the plugins (that are dlopened). We need to explicitly include
|
||||
# them during linking.
|
||||
networkmanager_undefined_symbols = \
|
||||
$(NULL)
|
||||
|
||||
noinst_PROGRAMS += src/core/NetworkManager-all-sym
|
||||
|
||||
src_core_NetworkManager_all_sym_CPPFLAGS = $(src_core_cppflags)
|
||||
|
@ -2670,6 +2676,7 @@ src_core_NetworkManager_all_sym_LDADD = \
|
|||
|
||||
src_core_NetworkManager_all_sym_LDFLAGS = \
|
||||
-rdynamic \
|
||||
$(networkmanager_undefined_symbols:%=-u %) \
|
||||
$(SANITIZER_EXEC_LDFLAGS) \
|
||||
$(NULL)
|
||||
|
||||
|
@ -2696,6 +2703,7 @@ src_core_NetworkManager_LDADD = \
|
|||
src_core_NetworkManager_LDFLAGS = \
|
||||
-rdynamic \
|
||||
-Wl,--version-script="src/core/NetworkManager.ver" \
|
||||
$(networkmanager_undefined_symbols:%=-u %) \
|
||||
$(SANITIZER_EXEC_LDFLAGS) \
|
||||
$(NULL)
|
||||
|
||||
|
|
|
@ -270,6 +270,14 @@ endif
|
|||
subdir('devices')
|
||||
subdir('settings/plugins')
|
||||
|
||||
# NetworkManager binary also must contain symbols that are not used by the binary
|
||||
# itself, but by the plugins (that are dlopened). We need to explicitly include
|
||||
# them during linking.
|
||||
networkmanager_undefined_symbols_args = []
|
||||
foreach s: []
|
||||
networkmanager_undefined_symbols_args += ['-u', s]
|
||||
endforeach
|
||||
|
||||
# NetworkManager binary
|
||||
|
||||
# libNetworkManager.a, as built by meson doesn't contain all symbols
|
||||
|
@ -284,7 +292,9 @@ NetworkManager_all_sym = executable(
|
|||
nm_deps,
|
||||
libudev_dep,
|
||||
],
|
||||
link_args: '-Wl,--no-gc-sections',
|
||||
link_args: [
|
||||
'-Wl,--no-gc-sections',
|
||||
] + networkmanager_undefined_symbols_args,
|
||||
link_whole: [
|
||||
libNetworkManager,
|
||||
libNetworkManagerBase,
|
||||
|
@ -345,7 +355,7 @@ NetworkManager = executable(
|
|||
link_args: [
|
||||
'-rdynamic',
|
||||
'-Wl,--version-script,@0@'.format(ver_script.full_path()),
|
||||
],
|
||||
] + networkmanager_undefined_symbols_args,
|
||||
link_depends: ver_script,
|
||||
install: true,
|
||||
install_dir: nm_sbindir,
|
||||
|
|
Loading…
Reference in a new issue