mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager
synced 2024-10-14 20:18:39 +00:00
core: support linking with LLD 13
LLD 13 adds -z start-stop-gc and makes it the default, resulting in: CCLD src/core/NetworkManager-all-sym ld.lld: error: undefined symbol: __stop_connection_defaults >>> referenced by nm-config.c:0 (src/core/nm-config.c:0) >>> libNetworkManager_la-nm-config.o:(read_config) in archive src/core/.libs/libNetworkManager.a >>> referenced by nm-config-data.c:1598 (src/core/nm-config-data.c:1598) >>> libNetworkManager_la-nm-config-data.o:(nm_config_data_get_connection_default) in archive src/core/.libs/libNetworkManager.a >>> referenced by nm-config-data.c:0 (src/core/nm-config-data.c:0) >>> libNetworkManager_la-nm-config-data.o:(nm_config_data_get_connection_default) in archive src/core/.libs/libNetworkManager.a ld.lld: error: undefined symbol: __start_connection_defaults >>> referenced by nm-config.c:0 (src/core/nm-config.c:0) >>> libNetworkManager_la-nm-config.o:(read_config) in archive src/core/.libs/libNetworkManager.a >>> referenced by nm-config.c:0 (src/core/nm-config.c:0) >>> libNetworkManager_la-nm-config.o:(read_config) in archive src/core/.libs/libNetworkManager.a >>> referenced by nm-config.c:0 (src/core/nm-config.c:0) >>> libNetworkManager_la-nm-config.o:(read_config) in archive src/core/.libs/libNetworkManager.a >>> referenced 2 more times clang: error: linker command failed with exit code 1 (use -v to see invocation) Add __attribute__((__retain__)) to prevent GC of the connection defaults. https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1008
This commit is contained in:
parent
73ac6dfb8a
commit
58bfcffd59
|
@ -195,16 +195,16 @@ const char *nm_config_data_get_iwd_config_path(const NMConfigData *self);
|
|||
extern const char *__start_connection_defaults[];
|
||||
extern const char *__stop_connection_defaults[];
|
||||
|
||||
#define NM_CON_DEFAULT_NOP(name) \
|
||||
static const char *NM_UNIQ_T(connection_default, NM_UNIQ) \
|
||||
_nm_used _nm_section("connection_defaults") = "" name
|
||||
#define NM_CON_DEFAULT_NOP(name) \
|
||||
static const char * NM_UNIQ_T(connection_default, NM_UNIQ) \
|
||||
_nm_used _nm_retain _nm_section("connection_defaults") = "" name
|
||||
|
||||
#define NM_CON_DEFAULT(name) \
|
||||
({ \
|
||||
static const char *__con_default_prop _nm_used _nm_section("connection_defaults") = \
|
||||
"" name; \
|
||||
\
|
||||
name; \
|
||||
#define NM_CON_DEFAULT(name) \
|
||||
({ \
|
||||
static const char *__con_default_prop _nm_used _nm_retain _nm_section( \
|
||||
"connection_defaults") = "" name; \
|
||||
\
|
||||
name; \
|
||||
})
|
||||
|
||||
const char *nm_config_data_get_connection_default(const NMConfigData *self,
|
||||
|
|
|
@ -26,6 +26,21 @@
|
|||
#define _nm_alignof(type) __alignof(type)
|
||||
#define _nm_alignas(type) _nm_align(_nm_alignof(type))
|
||||
#define _nm_deprecated(msg) __attribute__((__deprecated__(msg)))
|
||||
#define _nm_retain
|
||||
|
||||
#if defined(__clang__) && defined(__has_attribute)
|
||||
#if __has_attribute(__retain__)
|
||||
/* __attribute__((__retain__)) is supported in clang 13+, but is warned about
|
||||
* as an unknown attribute in older versions. We assume older versions are used
|
||||
* together with linkers that do not require the attribute.
|
||||
*
|
||||
* Ideally __has_attribute(__retain__) would be checked in other compilers as
|
||||
* well, but it is broken in GCC (bug 99587). Limit it to clang for now, as it
|
||||
* is only known to be needed for linking lld. */
|
||||
#undef _nm_retain
|
||||
#define _nm_retain __attribute__((__retain__))
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(__clang__) && __clang_major__ == 13
|
||||
/* Clang 13 can emit -Wunused-but-set-variable warning for cleanup variables
|
||||
|
|
Loading…
Reference in a new issue