From 0beace2dcd4624f5ba72853663599f89f0bf9a6a Mon Sep 17 00:00:00 2001 From: Mark Date: Tue, 28 Jul 2020 14:55:55 +0300 Subject: [PATCH] Proper attributes for .init entries --- include/sys/attr.h | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/include/sys/attr.h b/include/sys/attr.h index ba0ab58..342b491 100644 --- a/include/sys/attr.h +++ b/include/sys/attr.h @@ -6,7 +6,14 @@ #pragma once #define __weak __attribute__((weak)) + +// A bit of assembler "sorcery" here: +// By default (with only section name specified) gcc will spit out: +// .section .init,"aw",@progbits +// But .init section is "ax", so the result will be +// .section .init,"ax",@progbits //"aw",@progbits +// '//' will just comment out the stuff GCC produced #define __init(name) \ static void name(void); \ - const void *__init_##name __attribute__((section(".init"),used)) = name; \ + const void *__init_##name __attribute__((section(".init,\"ax\",@progbits //"),used)) = name; \ static void name(void)