I compared the System.map files from Klara Modin. The linker script is doing what I expected: relocating the unlikely executed functions to the beginning of the .text section. However, the problem is with the _stext symbol. It belongs to the .text section, so it is positioned after the unlikely (or hot) functions. But it really needs to be the start of the text section. I checked all vmlinux.lds.S in arch/, I found that most archs explicitly assign _stext to the same address as _text, with the following 3 exceptions: arch/sh/kernel/vmlinux.lds.S arch/mips/kernel/vmlinux.lds.S arch/sparc/kernel/vmlinux.lds.S Note that we already partially handled arch/sparc/kernel/vmlinux.lds.S for sparc64. But we need to handle sparc32 also. Additionally, the boot/compressed/vmlinux.lds.S also the TEXT_TEXT template. However, I presume these files do not generate the .text.unlikely. or .text.hot.* sections. I sent the following patch to Klara because I don't have an environment to build and test. ==================== diff --git a/arch/mips/kernel/vmlinux.lds.S b/arch/mips/kernel/vmlinux.lds.S index 9ff55cb80a64..5f130af44247 100644 --- a/arch/mips/kernel/vmlinux.lds.S +++ b/arch/mips/kernel/vmlinux.lds.S @@ -61,6 +61,7 @@ SECTIONS /* read-only */ _text = .; /* Text and read-only data */ .text : { + _stext = .; TEXT_TEXT SCHED_TEXT LOCK_TEXT ====================== If Klara confirms the fix, I will send the patch for review. Thanks, -Rong On Mon, Nov 11, 2024 at 2:39 PM Rong Xu <xur@xxxxxxxxxx> wrote: > > In the new System.map, we have: > ffffffff81112400 T _stext > > This looks wrong. It should point to the beginning of the text, like > ffffffff81100400 T _stext > > I'll do some debugging on this. > > -Rong > > On Mon, Nov 11, 2024 at 1:32 PM Klara Modin <klarasmodin@xxxxxxxxx> wrote: > > > > On 2024-11-11 21:43, Rong Xu wrote: > > > Thanks for reporting this issue! > > > > > > I'm assuming your kernel build enables dead code elimination and > > > uses the --ffunction-sections compiler flag. Without this patch, all > > > the functions > > > -- I think there are only .text.unlikely.* and .text.* are grouped > > > together in the > > > final vmlinux. This patch modifies the linker script to place > > > .text.unlikely.* functions > > > before .text.* functions. I've examined arch/mips/kernel/vmlinux.lds.S, and > > > haven't found any obvious issue. > > > > > > Can you send me the following? > > > (1) the kernel build command > > > (2) System.map without the patch > > > (3) System.map with the patch > > > > > > Best regards, > > > > > > -Rong > > > > > I don't set -ffunction-sections explicitly but it seems to be used when > > I look at the .cmd files. The build command is nothing fancy, I just set > > ARCH=mips CROSS_COMPILE=mips64-unknown-linux-gnuabin32- and build with > > make -j24. > > > > I've attached the System.map, built on next-20241111 as well as it with > > this series reverted. > > > > Regards, > > Klara Modin