All of lore.kernel.org
 help / color / mirror / Atom feed
From: Yuan Tan <tanyuan@tinylab.org>
To: falcon@tinylab.org, arnd@arndb.de, linux-kernel@vger.kernel.org,
	linux-mips@vger.kernel.org, linux-riscv@lists.infradead.org,
	luc.vanoostenryck@gmail.com, linux-sparse@vger.kernel.org
Cc: linux@weissschuh.net, palmer@rivosinc.com,
	paul.walmsley@sifive.com, paulburton@kernel.org,
	paulmck@kernel.org, tim.bird@sony.com, tsbogend@alpha.franken.de,
	w@1wt.eu, tanyuan@tinylab.org, i@maskray.me
Subject: [PATCH v1 13/14] DCE/DSE: add SECTION_NO_KEEP_SUPPORT option
Date: Sat,  4 Nov 2023 00:04:10 +0800	[thread overview]
Message-ID: <4ad1b8cb7cd54c57e74e877235f64b5be5bbbe8f.1699025537.git.tanyuan@tinylab.org> (raw)
In-Reply-To: <cover.1699025537.git.tanyuan@tinylab.org>

It is able to drop the brute KEEP() keyword for some sections, when the
sections are able to link or group together with one of the used
sections.

Some syscalls are actually orphan sections.
SECTION_SHF_LINK_ORDER_SUPPORT or SECTION_SHF_GROUP_SUPPORT creates
references for these sections, eliminating the need for the KEEP()
directive.

Signed-off-by: Yuan Tan <tanyuan@tinylab.org>
Signed-off-by: Zhangjin Wu <falcon@tinylab.org>
---
 include/asm-generic/vmlinux.lds.h | 24 ++++++++++++++++++------
 init/Kconfig                      |  9 +++++++++
 2 files changed, 27 insertions(+), 6 deletions(-)

diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
index ea8170e11ab1..f10afc42a1ac 100644
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
@@ -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)
 
diff --git a/init/Kconfig b/init/Kconfig
index 9599d2de44e8..aeb859e410b2 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -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.
-- 
2.34.1


WARNING: multiple messages have this Message-ID (diff)
From: Yuan Tan <tanyuan@tinylab.org>
To: falcon@tinylab.org, arnd@arndb.de, linux-kernel@vger.kernel.org,
	linux-mips@vger.kernel.org, linux-riscv@lists.infradead.org,
	luc.vanoostenryck@gmail.com, linux-sparse@vger.kernel.org
Cc: linux@weissschuh.net, palmer@rivosinc.com,
	paul.walmsley@sifive.com, paulburton@kernel.org,
	paulmck@kernel.org, tim.bird@sony.com, tsbogend@alpha.franken.de,
	w@1wt.eu, tanyuan@tinylab.org, i@maskray.me
Subject: [PATCH v1 13/14] DCE/DSE: add SECTION_NO_KEEP_SUPPORT option
Date: Sat,  4 Nov 2023 00:04:10 +0800	[thread overview]
Message-ID: <4ad1b8cb7cd54c57e74e877235f64b5be5bbbe8f.1699025537.git.tanyuan@tinylab.org> (raw)
In-Reply-To: <cover.1699025537.git.tanyuan@tinylab.org>

It is able to drop the brute KEEP() keyword for some sections, when the
sections are able to link or group together with one of the used
sections.

Some syscalls are actually orphan sections.
SECTION_SHF_LINK_ORDER_SUPPORT or SECTION_SHF_GROUP_SUPPORT creates
references for these sections, eliminating the need for the KEEP()
directive.

Signed-off-by: Yuan Tan <tanyuan@tinylab.org>
Signed-off-by: Zhangjin Wu <falcon@tinylab.org>
---
 include/asm-generic/vmlinux.lds.h | 24 ++++++++++++++++++------
 init/Kconfig                      |  9 +++++++++
 2 files changed, 27 insertions(+), 6 deletions(-)

diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
index ea8170e11ab1..f10afc42a1ac 100644
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
@@ -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)
 
diff --git a/init/Kconfig b/init/Kconfig
index 9599d2de44e8..aeb859e410b2 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -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.
-- 
2.34.1


_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv

  parent reply	other threads:[~2023-11-03 16:04 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-11-03 15:56 [PATCH v1 00/14] DCE/DSE: Add Dead Syscalls Elimination support, part2 Yuan Tan
2023-11-03 15:56 ` Yuan Tan
2023-11-03 15:58 ` [PATCH v1 01/14] DCE/DSE: allow keep unique bounded sections Yuan Tan
2023-11-03 15:58   ` Yuan Tan
2023-11-03 15:58 ` [PATCH v1 02/14] compiler: add a global __QUITE_UNIQUE_ID() Yuan Tan
2023-11-03 15:58   ` Yuan Tan
2023-11-03 15:58 ` [PATCH v1 03/14] compiler: add unique __SECTION_NAME() Yuan Tan
2023-11-03 15:58   ` Yuan Tan
2023-11-03 15:59 ` [PATCH v1 04/14] compiler: add unique LABEL_NAME() Yuan Tan
2023-11-03 15:59   ` Yuan Tan
2023-11-03 15:59 ` [PATCH v1 05/14] DCE/DSE: add HAVE_SECTION_SHF_LINK_ORDER_SUPPORT option Yuan Tan
2023-11-03 15:59   ` Yuan Tan
2023-11-03 16:00 ` [PATCH v1 06/14] DCE/DSE: add HAVE_SECTION_SHF_GROUP_SUPPORT option Yuan Tan
2023-11-03 16:00   ` Yuan Tan
2023-11-03 16:00 ` [PATCH v1 07/14] DCE/DSE: add HAVE_SECTION_NO_KEEP_SUPPORT option Yuan Tan
2023-11-03 16:00   ` Yuan Tan
2023-11-03 16:00   ` Yuan Tan
2023-11-03 16:00   ` Yuan Tan
2023-11-03 16:01 ` [PATCH v1 08/14] DCE/DSE: add choice of methods to build reference for orphan sections Yuan Tan
2023-11-03 16:01   ` Yuan Tan
2023-11-05 21:35   ` Fangrui Song
2023-11-03 16:01 ` [PATCH v1 09/14] DCE/DSE: inhibit .size directive for SHF_GROUP Yuan Tan
2023-11-03 16:01   ` Yuan Tan
2023-11-05 20:50   ` Fangrui Song
2023-11-05 20:50   ` Fangrui Song
2023-11-13  7:19     ` Yuan Tan
2023-11-13  7:19       ` Yuan Tan
2023-11-03 16:02 ` [PATCH v1 10/14] DCE/DSE: riscv: make every ex_table's name unique Yuan Tan
2023-11-03 16:02   ` Yuan Tan
2023-11-03 16:02   ` Yuan Tan
2023-11-03 16:02   ` Yuan Tan
2023-11-05 21:13   ` Fangrui Song
2023-11-05 21:13   ` Fangrui Song
2023-11-03 16:02 ` [PATCH v1 11/14] DCE/DSE: riscv: build reference for .pushsection in C functions Yuan Tan
2023-11-03 16:02   ` Yuan Tan
2023-11-03 16:03 ` [PATCH v1 12/14] DCE/DSE: riscv: build reference for .pushsection in assembly Yuan Tan
2023-11-03 16:03   ` Yuan Tan
2023-11-03 16:04 ` Yuan Tan [this message]
2023-11-03 16:04   ` [PATCH v1 13/14] DCE/DSE: add SECTION_NO_KEEP_SUPPORT option Yuan Tan
2023-11-03 16:04 ` [PATCH v1 14/14] DCE/DSE: vmlinux.lds.h: allow NO_KEEP on __ex_table sections Yuan Tan
2023-11-03 16:04   ` Yuan Tan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4ad1b8cb7cd54c57e74e877235f64b5be5bbbe8f.1699025537.git.tanyuan@tinylab.org \
    --to=tanyuan@tinylab.org \
    --cc=arnd@arndb.de \
    --cc=falcon@tinylab.org \
    --cc=i@maskray.me \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mips@vger.kernel.org \
    --cc=linux-riscv@lists.infradead.org \
    --cc=linux-sparse@vger.kernel.org \
    --cc=linux@weissschuh.net \
    --cc=luc.vanoostenryck@gmail.com \
    --cc=palmer@rivosinc.com \
    --cc=paul.walmsley@sifive.com \
    --cc=paulburton@kernel.org \
    --cc=paulmck@kernel.org \
    --cc=tim.bird@sony.com \
    --cc=tsbogend@alpha.franken.de \
    --cc=w@1wt.eu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.