From: Rong Xu <xur@google.com>
To: Alice Ryhl <aliceryhl@google.com>,
Andrew Morton <akpm@linux-foundation.org>,
Arnd Bergmann <arnd@arndb.de>, Bill Wendling <morbo@google.com>,
Borislav Petkov <bp@alien8.de>, Breno Leitao <leitao@debian.org>,
Brian Gerst <brgerst@gmail.com>,
Dave Hansen <dave.hansen@linux.intel.com>,
David Li <davidxl@google.com>, Han Shen <shenhan@google.com>,
Heiko Carstens <hca@linux.ibm.com>,
"H. Peter Anvin" <hpa@zytor.com>, Ingo Molnar <mingo@redhat.com>,
Jann Horn <jannh@google.com>, Jonathan Corbet <corbet@lwn.net>,
Josh Poimboeuf <jpoimboe@kernel.org>,
Juergen Gross <jgross@suse.com>,
Justin Stitt <justinstitt@google.com>,
Kees Cook <kees@kernel.org>,
Masahiro Yamada <masahiroy@kernel.org>,
"Mike Rapoport (IBM)" <rppt@kernel.org>,
Nathan Chancellor <nathan@kernel.org>,
Nick Desaulniers <ndesaulniers@google.com>,
Nicolas Schier <nicolas@fjasle.eu>,
"Paul E. McKenney" <paulmck@kernel.org>,
Peter Zijlstra <peterz@infradead.org>, Rong Xu <xur@google.com>,
Sami Tolvanen <samitolvanen@google.com>,
Thomas Gleixner <tglx@linutronix.de>,
Wei Yang <richard.weiyang@gmail.com>,
workflows@vger.kernel.org,
Miguel Ojeda <miguel.ojeda.sandonis@gmail.com>,
Maksim Panchenko <max4bolt@gmail.com>,
"David S. Miller" <davem@davemloft.net>,
Andreas Larsson <andreas@gaisler.com>,
Yonghong Song <yonghong.song@linux.dev>,
Yabin Cui <yabinc@google.com>,
Krzysztof Pszeniczny <kpszeniczny@google.com>,
Sriraman Tallam <tmsriram@google.com>,
Stephane Eranian <eranian@google.com>
Cc: x86@kernel.org, linux-arch@vger.kernel.org,
sparclinux@vger.kernel.org, linux-doc@vger.kernel.org,
linux-kbuild@vger.kernel.org, linux-kernel@vger.kernel.org,
llvm@lists.linux.dev
Subject: [PATCH v6 3/7] Adjust symbol ordering in text output section
Date: Fri, 25 Oct 2024 22:14:05 -0700 [thread overview]
Message-ID: <20241026051410.2819338-4-xur@google.com> (raw)
In-Reply-To: <20241026051410.2819338-1-xur@google.com>
When the -ffunction-sections compiler option is enabled, each function
is placed in a separate section named .text.function_name rather than
putting all functions in a single .text section.
However, using -function-sections can cause problems with the
linker script. The comments included in include/asm-generic/vmlinux.lds.h
note these issues.:
“TEXT_MAIN here will match .text.fixup and .text.unlikely if dead
code elimination is enabled, so these sections should be converted
to use ".." first.”
It is unclear whether there is a straightforward method for converting
a suffix to "..".
This patch modifies the order of subsections within the text output
section. Specifically, it repositions sections with certain fixed patterns
(for example .text.unlikely) before TEXT_MAIN, ensuring that they are
grouped and matched together. It also places .text.hot section at the
beginning of a page to help the TLB performance.
Note that the limitation arises because the linker script employs glob
patterns instead of regular expressions for string matching. While there
is a method to maintain the current order using complex patterns, this
significantly complicates the pattern and increases the likelihood of
errors.
This patch also changes vmlinux.lds.S for the sparc64 architecture to
accommodate specific symbol placement requirements.
Co-developed-by: Han Shen <shenhan@google.com>
Signed-off-by: Han Shen <shenhan@google.com>
Signed-off-by: Rong Xu <xur@google.com>
Suggested-by: Sriraman Tallam <tmsriram@google.com>
Suggested-by: Krzysztof Pszeniczny <kpszeniczny@google.com>
Tested-by: Yonghong Song <yonghong.song@linux.dev>
Tested-by: Yabin Cui <yabinc@google.com>
Change-Id: I5202d40bc7e24f93c2bfb2f0d987e9dc57dec1b1
---
arch/sparc/kernel/vmlinux.lds.S | 5 +++++
include/asm-generic/vmlinux.lds.h | 19 ++++++++++++-------
2 files changed, 17 insertions(+), 7 deletions(-)
diff --git a/arch/sparc/kernel/vmlinux.lds.S b/arch/sparc/kernel/vmlinux.lds.S
index d317a843f7ea9..f1b86eb303404 100644
--- a/arch/sparc/kernel/vmlinux.lds.S
+++ b/arch/sparc/kernel/vmlinux.lds.S
@@ -48,6 +48,11 @@ SECTIONS
{
_text = .;
HEAD_TEXT
+ ALIGN_FUNCTION();
+#ifdef CONFIG_SPARC64
+ /* Match text section symbols in head_64.S first */
+ *head_64.o(.text)
+#endif
TEXT_TEXT
SCHED_TEXT
LOCK_TEXT
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
index eeadbaeccf88b..fd901951549c0 100644
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
@@ -553,19 +553,24 @@
* .text section. Map to function alignment to avoid address changes
* during second ld run in second ld pass when generating System.map
*
- * TEXT_MAIN here will match .text.fixup and .text.unlikely if dead
- * code elimination is enabled, so these sections should be converted
- * to use ".." first.
+ * TEXT_MAIN here will match symbols with a fixed pattern (for example,
+ * .text.hot or .text.unlikely) if dead code elimination or
+ * function-section is enabled. Match these symbols first before
+ * TEXT_MAIN to ensure they are grouped together.
+ *
+ * Also placing .text.hot section at the beginning of a page, this
+ * would help the TLB performance.
*/
#define TEXT_TEXT \
ALIGN_FUNCTION(); \
+ *(.text.asan.* .text.tsan.*) \
+ *(.text.unknown .text.unknown.*) \
+ *(.text.unlikely .text.unlikely.*) \
+ . = ALIGN(PAGE_SIZE); \
*(.text.hot .text.hot.*) \
*(TEXT_MAIN .text.fixup) \
- *(.text.unlikely .text.unlikely.*) \
- *(.text.unknown .text.unknown.*) \
NOINSTR_TEXT \
- *(.ref.text) \
- *(.text.asan.* .text.tsan.*)
+ *(.ref.text)
/* sched.text is aling to function alignment to secure we have same
--
2.47.0.163.g1226f6d8fa-goog
next prev parent reply other threads:[~2024-10-26 5:14 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-26 5:14 [PATCH v6 0/7] Add AutoFDO and Propeller support for Clang build Rong Xu
2024-10-26 5:14 ` [PATCH v6 1/7] Add AutoFDO " Rong Xu
2024-10-29 0:08 ` Kees Cook
2024-10-26 5:14 ` [PATCH v6 2/7] objtool: Fix unreachable instruction warnings for weak functions Rong Xu
2024-10-29 0:16 ` Kees Cook
2024-10-29 0:18 ` H. Peter Anvin
2024-10-29 5:51 ` Rong Xu
2024-10-29 0:43 ` Josh Poimboeuf
2024-10-26 5:14 ` Rong Xu [this message]
2024-10-29 0:05 ` [PATCH v6 3/7] Adjust symbol ordering in text output section Kees Cook
2024-11-01 18:05 ` Masahiro Yamada
2024-11-01 18:37 ` Rong Xu
2024-11-01 22:03 ` Masahiro Yamada
2024-11-09 15:38 ` Klara Modin
2024-11-11 20:43 ` Rong Xu
2024-11-11 21:32 ` Klara Modin
2024-11-11 22:39 ` Rong Xu
2024-11-12 5:38 ` Rong Xu
2024-11-12 7:45 ` Klara Modin
2024-11-12 20:13 ` Rong Xu
2024-10-26 5:14 ` [PATCH v6 4/7] Add markers for text_unlikely and text_hot sections Rong Xu
2024-10-28 23:56 ` Kees Cook
2024-10-29 0:05 ` Kees Cook
2024-10-26 5:14 ` [PATCH v6 5/7] AutoFDO: Enable -ffunction-sections for the AutoFDO build Rong Xu
2024-10-29 0:10 ` Kees Cook
2024-10-26 5:14 ` [PATCH v6 6/7] AutoFDO: Enable machine function split optimization for AutoFDO Rong Xu
2024-10-29 0:13 ` Kees Cook
2024-10-26 5:14 ` [PATCH v6 7/7] Add Propeller configuration for kernel build Rong Xu
2024-10-29 0:14 ` Kees Cook
2024-10-27 22:17 ` [PATCH v6 0/7] Add AutoFDO and Propeller support for Clang build Nathan Chancellor
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=20241026051410.2819338-4-xur@google.com \
--to=xur@google.com \
--cc=akpm@linux-foundation.org \
--cc=aliceryhl@google.com \
--cc=andreas@gaisler.com \
--cc=arnd@arndb.de \
--cc=bp@alien8.de \
--cc=brgerst@gmail.com \
--cc=corbet@lwn.net \
--cc=dave.hansen@linux.intel.com \
--cc=davem@davemloft.net \
--cc=davidxl@google.com \
--cc=eranian@google.com \
--cc=hca@linux.ibm.com \
--cc=hpa@zytor.com \
--cc=jannh@google.com \
--cc=jgross@suse.com \
--cc=jpoimboe@kernel.org \
--cc=justinstitt@google.com \
--cc=kees@kernel.org \
--cc=kpszeniczny@google.com \
--cc=leitao@debian.org \
--cc=linux-arch@vger.kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kbuild@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=llvm@lists.linux.dev \
--cc=masahiroy@kernel.org \
--cc=max4bolt@gmail.com \
--cc=miguel.ojeda.sandonis@gmail.com \
--cc=mingo@redhat.com \
--cc=morbo@google.com \
--cc=nathan@kernel.org \
--cc=ndesaulniers@google.com \
--cc=nicolas@fjasle.eu \
--cc=paulmck@kernel.org \
--cc=peterz@infradead.org \
--cc=richard.weiyang@gmail.com \
--cc=rppt@kernel.org \
--cc=samitolvanen@google.com \
--cc=shenhan@google.com \
--cc=sparclinux@vger.kernel.org \
--cc=tglx@linutronix.de \
--cc=tmsriram@google.com \
--cc=workflows@vger.kernel.org \
--cc=x86@kernel.org \
--cc=yabinc@google.com \
--cc=yonghong.song@linux.dev \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox