Messages in this thread Patch in this message | | | Date | Fri, 02 Sep 2022 15:06:34 +0200 | From | Peter Zijlstra <> | Subject | [PATCH v2 09/59] x86/asm: Ensure proper function alignment |
| |
From: Thomas Gleixner <tglx@linutronix.de>
With the compiler now aligning functions to 16 bytes, make sure the assmbler does the same. Change the SYM_FUNC_START*() variants to have matching alignment.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> --- arch/x86/include/asm/linkage.h | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-)
--- a/arch/x86/include/asm/linkage.h +++ b/arch/x86/include/asm/linkage.h @@ -12,13 +12,20 @@ #define asmlinkage CPP_ASMLINKAGE __attribute__((regparm(0))) #endif /* CONFIG_X86_32 */ -#ifdef __ASSEMBLY__ +#if CONFIG_FUNCTION_ALIGNMENT == 8 +#define __ALIGN .p2align 3, 0x90; +#elif CONFIG_FUNCTION_ALIGNMENT == 16 +#define __ALIGN .p2align 4, 0x90; +#else +# error Unsupported function alignment +#endif -#if CONFIG_FUNCTION_ALIGNMENT == 16 -#define __ALIGN .p2align 4, 0x90 #define __ALIGN_STR __stringify(__ALIGN) -#define FUNCTION_ALIGNMENT 16 -#endif +#define ASM_FUNC_ALIGN __ALIGN_STR +#define __FUNC_ALIGN __ALIGN +#define SYM_F_ALIGN __FUNC_ALIGN + +#ifdef __ASSEMBLY__ #if defined(CONFIG_RETHUNK) && !defined(__DISABLE_EXPORTS) && !defined(BUILD_VDSO) #define RET jmp __x86_return_thunk @@ -46,7 +53,7 @@ /* SYM_FUNC_START -- use for global functions */ #define SYM_FUNC_START(name) \ - SYM_START(name, SYM_L_GLOBAL, SYM_A_ALIGN) \ + SYM_START(name, SYM_L_GLOBAL, SYM_F_ALIGN) \ ENDBR /* SYM_FUNC_START_NOALIGN -- use for global functions, w/o alignment */ @@ -56,7 +63,7 @@ /* SYM_FUNC_START_LOCAL -- use for local functions */ #define SYM_FUNC_START_LOCAL(name) \ - SYM_START(name, SYM_L_LOCAL, SYM_A_ALIGN) \ + SYM_START(name, SYM_L_LOCAL, SYM_F_ALIGN) \ ENDBR /* SYM_FUNC_START_LOCAL_NOALIGN -- use for local functions, w/o alignment */ @@ -66,7 +73,7 @@ /* SYM_FUNC_START_WEAK -- use for weak functions */ #define SYM_FUNC_START_WEAK(name) \ - SYM_START(name, SYM_L_WEAK, SYM_A_ALIGN) \ + SYM_START(name, SYM_L_WEAK, SYM_F_ALIGN) \ ENDBR /* SYM_FUNC_START_WEAK_NOALIGN -- use for weak functions, w/o alignment */
| |