@@ -201,18 +201,30 @@
# endif
#endif
-#define BOUNDED_SECTION_PRE_LABEL(_sec_, _label_, _BEGIN_, _END_) \
+#ifdef CONFIG_SECTION_NO_KEEP_SUPPORT
+#define NO_KEEP(sec) sec
+#else
+#define NO_KEEP(sec) KEEP(sec)
+#endif
+
+#define _BOUNDED_SECTION_PRE_LABEL(_sec_, _label_, _BEGIN_, _END_, _KEEP_, ...) \
_BEGIN_##_label_ = .; \
- KEEP(*(BSEC_MAIN(_sec_))) \
+ _KEEP_(*(BSEC_MAIN(_sec_))) \
_END_##_label_ = .;
-#define BOUNDED_SECTION_POST_LABEL(_sec_, _label_, _BEGIN_, _END_) \
+#define BOUNDED_SECTION_PRE_LABEL(_sec_, _label_, _BEGIN_, _END_, ...) \
+ _BOUNDED_SECTION_PRE_LABEL(_sec_, _label_, _BEGIN_, _END_, ##__VA_ARGS__, KEEP)
+
+#define _BOUNDED_SECTION_POST_LABEL(_sec_, _label_, _BEGIN_, _END_, _KEEP_, ...)\
_label_##_BEGIN_ = .; \
- KEEP(*(BSEC_MAIN(_sec_))) \
+ _KEEP_(*(BSEC_MAIN(_sec_))) \
_label_##_END_ = .;
-#define BOUNDED_SECTION_BY(_sec_, _label_) \
- BOUNDED_SECTION_PRE_LABEL(_sec_, _label_, __start, __stop)
+#define BOUNDED_SECTION_POST_LABEL(_sec_, _label_, _BEGIN_, _END_, ...) \
+ _BOUNDED_SECTION_POST_LABEL(_sec_, _label_, _BEGIN_, _END_, ##__VA_ARGS__, KEEP)
+
+#define BOUNDED_SECTION_BY(_sec_, _label_, ...) \
+ _BOUNDED_SECTION_PRE_LABEL(_sec_, _label_, __start, __stop, ##__VA_ARGS__, KEEP)
#define BOUNDED_SECTION(_sec) BOUNDED_SECTION_BY(_sec, _sec)
@@ -1467,6 +1467,13 @@ config HAVE_SECTION_NO_KEEP_SUPPORT
depends on HAVE_SECTION_SHF_LINK_ORDER_SUPPORT || HAVE_SECTION_SHF_GROUP_SUPPORT
default y
+config SECTION_NO_KEEP_SUPPORT
+ bool
+ depends on SECTION_SHF_LINK_ORDER_SUPPORT || SECTION_SHF_GROUP_SUPPORT
+ default y
+ help
+ This option allows some sections unkept so they can be GC
+
config HAVE_SECTION_SHF_LINK_ORDER_SUPPORT
bool
depends on AS_IS_GNU && AS_VERSION >= 23500
@@ -1765,6 +1772,7 @@ config RESTRICTED_TRIM_UNUSED_SYSCALLS
config SECTION_SHF_LINK_ORDER_SUPPORT
bool "Using SHF_LINK_ORDER attribute (EXPERIMENTAL)" if EXPERT
depends on HAVE_SECTION_SHF_LINK_ORDER_SUPPORT
+ select SECTION_NO_KEEP_SUPPORT
help
Say Y here to trim more 'unused' syscalls wrongly kept by __ex_table
like sections in kernel space.
@@ -1778,6 +1786,7 @@ config SECTION_SHF_LINK_ORDER_SUPPORT
config SECTION_SHF_GROUP_SUPPORT
bool "Using SHF_GROUP attribute (EXPERIMENTAL)" if EXPERT
depends on HAVE_SECTION_SHF_GROUP_SUPPORT
+ select SECTION_NO_KEEP_SUPPORT
help
Say Y here to trim more 'unused' syscalls wrongly kept by __ex_table
like sections in kernel space.