mirror of
https://github.com/systemd/systemd-stable.git
synced 2024-10-27 01:55:32 +03:00
sd-bus: set retain attribute on BUS_ERROR_MAP_ELF_REGISTER
LLD 13 and GNU ld 2.37 support -z start-stop-gc which allows garbage collection of C identifier name sections despite the __start_/__stop_ references. Simply set the retain attribute so that GCC 11 (if configure-time binutils is 2.36 or newer)/Clang 13 will set the SHF_GNU_RETAIN section attribute to prevent garbage collection. Without the patch, there are linker errors like the following with -z start-stop-gc. ``` ld: error: undefined symbol: __start_SYSTEMD_BUS_ERROR_MAP >>> referenced by bus-error.c:93 (../src/libsystemd/sd-bus/bus-error.c:93) >>> sd-bus_bus-error.c.o:(bus_error_name_to_errno) in archive src/libsystemd/libsystemd_static.a ```
This commit is contained in:
parent
8a773a30ba
commit
945317a4b6
@ -28,11 +28,17 @@ int bus_error_set_errnofv(sd_bus_error *e, int error, const char *format, va_lis
|
||||
* the bus error table, and BUS_ERROR_MAP_ELF_USE has to be used at
|
||||
* least once per compilation unit (i.e. per library), to ensure that
|
||||
* the error map is really added to the final binary.
|
||||
*
|
||||
* In addition, set the retain attribute so that the section cannot be
|
||||
* discarded by ld --gc-sections -z start-stop-gc. Older compilers would
|
||||
* warn for the unknown attribute, so just disable -Wattributes.
|
||||
*/
|
||||
|
||||
#define BUS_ERROR_MAP_ELF_REGISTER \
|
||||
_Pragma("GCC diagnostic ignored \"-Wattributes\"") \
|
||||
_section_("SYSTEMD_BUS_ERROR_MAP") \
|
||||
_used_ \
|
||||
__attribute__((retain)) \
|
||||
_alignptr_ \
|
||||
_variable_no_sanitize_address_
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user