treewide: retain sections to prevent linker garbage collection

The linker may remove sections that are actually used when
"--gc-sections" and "-z start-stop-gc" is set. Add the `retain`
attribute to prevent that.

Furthermore, fix the alignment for `pwtest_suite_decl` objects.

See: #2292
See: https://lld.llvm.org/ELF/start-stop-gc.html
See: https://github.com/systemd/systemd/issues/21847
See: https://github.com/systemd/systemd/pull/21855
This commit is contained in:
Barnabás Pőcze 2022-04-13 18:13:12 +02:00
parent 22fc9eec35
commit e28a052105
3 changed files with 6 additions and 3 deletions

View file

@ -494,9 +494,11 @@ enum pwtest_arg {
*/
#define PWTEST_SUITE(cname) \
static enum pwtest_result (cname##__setup)(struct pwtest_context *ctx, struct pwtest_suite *suite); \
static const struct pwtest_suite_decl _test_suite \
__attribute__((used)) \
__attribute((section("pwtest_suite_section"))) = { \
__attribute__((retain)) \
__attribute__((section("pwtest_suite_section"))) \
__attribute__((aligned(__alignof__(struct pwtest_suite_decl)))) \
static const struct pwtest_suite_decl _test_suite = { \
.name = #cname, \
.setup = cname##__setup, \
}; \