Commit 0847420f authored by Rong Xu's avatar Rong Xu Committed by Masahiro Yamada
Browse files

AutoFDO: Enable -ffunction-sections for the AutoFDO build



Enable -ffunction-sections by default for the AutoFDO build.

With -ffunction-sections, the compiler places each function in its own
section named .text.function_name instead of placing all functions in
the .text section. In the AutoFDO build, this allows the linker to
utilize profile information to reorganize functions for improved
utilization of iCache and iTLB.

Co-developed-by: default avatarHan Shen <shenhan@google.com>
Signed-off-by: default avatarHan Shen <shenhan@google.com>
Signed-off-by: default avatarRong Xu <xur@google.com>
Suggested-by: default avatarSriraman Tallam <tmsriram@google.com>
Tested-by: default avatarYonghong Song <yonghong.song@linux.dev>
Tested-by: default avatarYabin Cui <yabinc@google.com>
Tested-by: default avatarNathan Chancellor <nathan@kernel.org>
Reviewed-by: default avatarKees Cook <kees@kernel.org>
Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
parent db0b2991
Loading
Loading
Loading
Loading
+9 −2
Original line number Diff line number Diff line
@@ -95,18 +95,25 @@
 * With LTO_CLANG, the linker also splits sections by default, so we need
 * these macros to combine the sections during the final link.
 *
 * With AUTOFDO_CLANG, by default, the linker splits text sections and
 * regroups functions into subsections.
 *
 * RODATA_MAIN is not used because existing code already defines .rodata.x
 * sections to be brought in with rodata.
 */
#if defined(CONFIG_LD_DEAD_CODE_DATA_ELIMINATION) || defined(CONFIG_LTO_CLANG)
#if defined(CONFIG_LD_DEAD_CODE_DATA_ELIMINATION) || defined(CONFIG_LTO_CLANG) || \
defined(CONFIG_AUTOFDO_CLANG)
#define TEXT_MAIN .text .text.[0-9a-zA-Z_]*
#else
#define TEXT_MAIN .text
#endif
#if defined(CONFIG_LD_DEAD_CODE_DATA_ELIMINATION) || defined(CONFIG_LTO_CLANG)
#define DATA_MAIN .data .data.[0-9a-zA-Z_]* .data..L* .data..compoundliteral* .data.$__unnamed_* .data.$L*
#define SDATA_MAIN .sdata .sdata.[0-9a-zA-Z_]*
#define RODATA_MAIN .rodata .rodata.[0-9a-zA-Z_]* .rodata..L*
#define BSS_MAIN .bss .bss.[0-9a-zA-Z_]* .bss..L* .bss..compoundliteral*
#define SBSS_MAIN .sbss .sbss.[0-9a-zA-Z_]*
#else
#define TEXT_MAIN .text
#define DATA_MAIN .data
#define SDATA_MAIN .sdata
#define RODATA_MAIN .rodata
+1 −1
Original line number Diff line number Diff line
@@ -9,7 +9,7 @@ ifndef CONFIG_DEBUG_INFO
endif

ifdef CLANG_AUTOFDO_PROFILE
  CFLAGS_AUTOFDO_CLANG += -fprofile-sample-use=$(CLANG_AUTOFDO_PROFILE)
  CFLAGS_AUTOFDO_CLANG += -fprofile-sample-use=$(CLANG_AUTOFDO_PROFILE) -ffunction-sections
endif

ifdef CONFIG_LTO_CLANG_THIN