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)