linux/arch/x86/boot/compressed
Nathan Chancellor 4a9ec5ec95 x86/boot/compressed: Disable jump tables
After a recent upstream LLVM change to start generating jump and lookup
tables in switch statements in more instances [1], linking the
compressed x86 boot image when CONFIG_KERNEL_ZSTD is enabled fails with:

  ld.lld: error: Unexpected run-time relocations (.rela) detected!

Dumping the relocations in misc.o, which is the only file influenced by
CONFIG_KERNEL_ZSTD in the decompressor, shows dynamic relocations to
some string constants, which correspond to the string literals in the
switch statement in handle_zstd_error():

  Relocation section '.rela.data.rel.ro' at offset 0x277b0 contains 31 entries:
      Offset             Info             Type               Symbol's Value  Symbol's Name + Addend
  0000000000000000  0000006600000001 R_X86_64_64            0000000000000000 .rodata.str1.1 + 73a
  0000000000000008  0000006600000001 R_X86_64_64            0000000000000000 .rodata.str1.1 + 78e
  0000000000000010  0000006600000001 R_X86_64_64            0000000000000000 .rodata.str1.1 + 78e
  0000000000000018  0000006600000001 R_X86_64_64            0000000000000000 .rodata.str1.1 + 78e
  ...

This optimization is problematic for the decompressor environment, as it
is built as -fPIE without any explicit absolute references (as described
at the top of misc.c) while not applying any dynamic relocations, hence
the linker assertion. To opt out of this optimization, which is of
little value in this special early boot code, and to mirror the other
x86 startup code in arch/x86/boot/startup, disable jump tables in the
decompressor.

Signed-off-by: Nathan Chancellor <nathan@kernel.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Acked-by: Ard Biesheuvel <ardb@kernel.org>
Cc: Bill Wendling <morbo@google.com>
Cc: Justin Stitt <justinstitt@google.com>
Cc: Nick Desaulniers <ndesaulniers@google.com>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: stable@vger.kernel.org
Link: fa02a6ed66 [1]
Link: https://patch.msgid.link/20260722-x86-boot-compressed-disable-jt-clang-v2-1-7373d38482fb@kernel.org
Closes: https://github.com/ClangBuiltLinux/linux/issues/2165
2026-07-23 10:06:58 +02:00
..
.gitignore .gitignore: add SPDX License Identifier 2020-03-25 11:50:48 +01:00
acpi.c x86/boot: Reject too long acpi_rsdp= values 2026-07-11 19:25:26 -07:00
cmdline.c x86: Do not include <asm/bootparam.h> in several files 2024-01-30 15:17:24 +01:00
cpuflags.c x86/sev-es: Check required CPU features for SEV-ES 2020-09-10 21:49:25 +02:00
early_serial_console.c x86/boot: Put globals that are accessed early into the .data section 2022-04-20 20:10:54 +02:00
efi.c x86: Do not include <asm/bootparam.h> in several files 2024-01-30 15:17:24 +01:00
efi.h x86/setup: Move internal setup_data structures into setup_data.h 2024-01-30 15:17:12 +01:00
error.c x86/purgatory: Include header for warn() declaration 2023-08-03 16:37:18 +02:00
error.h x86/purgatory: Include header for warn() declaration 2023-08-03 16:37:18 +02:00
head_32.S x86/efistub: Avoid legacy decompressor when doing EFI boot 2023-08-07 21:07:43 +02:00
head_64.S x86/boot/compressed: Merge the local pgtable.h include into <asm/boot.h> 2025-04-06 20:15:14 +02:00
ident_map_64.c - Sumanth Korikkar has taught s390 to allocate hotplug-time page frames 2024-03-14 17:43:30 -07:00
idt_64.c x86/boot: Ignore NMIs during very early boot 2023-11-30 09:55:40 +01:00
idt_handlers_64.S x86/boot: Ignore NMIs during very early boot 2023-11-30 09:55:40 +01:00
kaslr.c x86/boot/compressed: Use boot_kstrtoul() for hugepages= parsing 2026-05-04 14:16:11 +02:00
kernel_info.S x86/boot: Introduce setup_indirect 2019-11-12 16:21:15 +01:00
Makefile x86/boot/compressed: Disable jump tables 2026-07-23 10:06:58 +02:00
mem_encrypt.S x86/boot/compressed: Only build mem_encrypt.S if AMD_MEM_ENCRYPT=y 2022-11-24 08:57:41 +01:00
mem.c x86/boot/sev: Support memory acceptance in the EFI stub under SVSM 2025-05-04 08:20:27 +02:00
misc.c efistub/x86: Remap inittext read-execute when needed 2025-09-03 18:05:42 +02:00
misc.h mm: introduce CONFIG_ARCH_HAS_LAZY_MMU_MODE 2026-01-20 19:24:33 -08:00
mkpiggy.c x86/boot: Remove run-time relocations from head_{32,64}.S 2020-08-14 12:52:35 +02:00
pgtable_64.c treewide: Explicitly include the x86 CPUID headers 2026-05-06 14:29:59 +02:00
sbat.S x86/efi: Implement support for embedding SBAT data for x86 2025-06-21 13:53:44 +02:00
sev-handle-vc.c x86/insn: Simplify for_each_insn_prefix() 2025-10-16 11:13:48 +02:00
sev.c x86/sev: Rename SNP_FEATURES_PRESENT to SNP_FEATURES_IMPL 2026-03-16 21:08:50 +01:00
sev.h x86/boot: Move boot_*msr helpers to asm/shared/msr.h 2025-10-30 16:29:53 +01:00
string.c x86/boot: Remove semicolon from "rep" prefixes 2025-04-18 09:32:57 +02:00
tdcall.S x86/boot: Port I/O: Add decompression-time support for TDX 2022-04-07 08:27:52 -07:00
tdx-shared.c x86/tdx: Add unaccepted memory support 2023-06-06 18:25:57 +02:00
tdx.c x86/tdx: Remove 'struct tdx_hypercall_args' 2023-09-12 16:30:14 -07:00
tdx.h x86/tdx: Detect TDX at early kernel decompression time 2022-04-07 08:27:51 -07:00
vmlinux.lds.S kbuild: Split .modinfo out from ELF_DETAILS 2026-02-26 11:50:19 -07:00