forked from ClangBuiltLinux/tc-build
-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branches '6.8.0-kgr-uprev' and 's390-llvm-1
* '6.8.0-kgr-uprev': src: Add patch for PowerPC build error build-llvm.py: Update DEFAULT_KERNEL_FOR_PGO to 6.8.0 * 's390-llvm-1': tc_build: kernel: Only use GNU tools for s390 when necessary DO NOT SUBMIT: src: Add patch for s390 LLVM=1 Signed-off-by: Nathan Chancellor <[email protected]>
- Loading branch information
Showing
4 changed files
with
341 additions
and
7 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
From 35f20786c481d5ced9283ff42de5c69b65e5ed13 Mon Sep 17 00:00:00 2001 | ||
From: Nathan Chancellor <[email protected]> | ||
Date: Sat, 27 Jan 2024 11:07:43 -0700 | ||
Subject: powerpc: xor_vmx: Add '-mhard-float' to CFLAGS | ||
|
||
arch/powerpc/lib/xor_vmx.o is built with '-msoft-float' (from the main | ||
powerpc Makefile) and '-maltivec' (from its CFLAGS), which causes an | ||
error when building with clang after a recent change in main: | ||
|
||
error: option '-msoft-float' cannot be specified with '-maltivec' | ||
make[6]: *** [scripts/Makefile.build:243: arch/powerpc/lib/xor_vmx.o] Error 1 | ||
|
||
Explicitly add '-mhard-float' before '-maltivec' in xor_vmx.o's CFLAGS | ||
to override the previous inclusion of '-msoft-float' (as the last option | ||
wins), which matches how other areas of the kernel use '-maltivec', such | ||
as AMDGPU. | ||
|
||
Cc: [email protected] | ||
Closes: https://github.com/ClangBuiltLinux/linux/issues/1986 | ||
Link: https://github.com/llvm/llvm-project/commit/4792f912b232141ecba4cbae538873be3c28556c | ||
Signed-off-by: Nathan Chancellor <[email protected]> | ||
Signed-off-by: Michael Ellerman <[email protected]> | ||
Link: https://msgid.link/20240127-ppc-xor_vmx-drop-msoft-float-v1-1-f24140e81376@kernel.org | ||
--- | ||
Link: https://git.kernel.org/powerpc/c/35f20786c481d5ced9283ff42de5c69b65e5ed13 | ||
--- | ||
arch/powerpc/lib/Makefile | 2 +- | ||
1 file changed, 1 insertion(+), 1 deletion(-) | ||
|
||
diff --git a/arch/powerpc/lib/Makefile b/arch/powerpc/lib/Makefile | ||
index 6eac63e79a8995..0ab65eeb93ee3a 100644 | ||
--- a/arch/powerpc/lib/Makefile | ||
+++ b/arch/powerpc/lib/Makefile | ||
@@ -76,7 +76,7 @@ obj-$(CONFIG_PPC_LIB_RHEAP) += rheap.o | ||
obj-$(CONFIG_FTR_FIXUP_SELFTEST) += feature-fixups-test.o | ||
|
||
obj-$(CONFIG_ALTIVEC) += xor_vmx.o xor_vmx_glue.o | ||
-CFLAGS_xor_vmx.o += -maltivec $(call cc-option,-mabi=altivec) | ||
+CFLAGS_xor_vmx.o += -mhard-float -maltivec $(call cc-option,-mabi=altivec) | ||
# Enable <altivec.h> | ||
CFLAGS_xor_vmx.o += -isystem $(shell $(CC) -print-file-name=include) | ||
|
||
-- | ||
cgit 1.2.3-korg | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,256 @@ | ||
diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig | ||
index fe565f3a3a91..771235aee6bf 100644 | ||
--- a/arch/s390/Kconfig | ||
+++ b/arch/s390/Kconfig | ||
@@ -127,6 +127,7 @@ config S390 | ||
select ARCH_WANT_DEFAULT_BPF_JIT | ||
select ARCH_WANT_IPC_PARSE_VERSION | ||
select ARCH_WANT_KERNEL_PMD_MKWRITE | ||
+ select ARCH_WANT_LD_ORPHAN_WARN | ||
select ARCH_WANT_OPTIMIZE_HUGETLB_VMEMMAP | ||
select BUILDTIME_TABLE_SORT | ||
select CLONE_BACKWARDS2 | ||
diff --git a/arch/s390/Makefile b/arch/s390/Makefile | ||
index 73873e451686..994f9b3d575f 100644 | ||
--- a/arch/s390/Makefile | ||
+++ b/arch/s390/Makefile | ||
@@ -15,7 +15,7 @@ KBUILD_CFLAGS_MODULE += -fPIC | ||
KBUILD_AFLAGS += -m64 | ||
KBUILD_CFLAGS += -m64 | ||
KBUILD_CFLAGS += -fPIE | ||
-LDFLAGS_vmlinux := -pie | ||
+LDFLAGS_vmlinux := -pie -z notext | ||
aflags_dwarf := -Wa,-gdwarf-2 | ||
KBUILD_AFLAGS_DECOMPRESSOR := $(CLANG_FLAGS) -m64 -D__ASSEMBLY__ | ||
ifndef CONFIG_AS_IS_LLVM | ||
diff --git a/arch/s390/boot/Makefile b/arch/s390/boot/Makefile | ||
index c7c81e5f9218..5886b237dae6 100644 | ||
--- a/arch/s390/boot/Makefile | ||
+++ b/arch/s390/boot/Makefile | ||
@@ -56,9 +56,9 @@ clean-files += vmlinux.map | ||
|
||
quiet_cmd_section_cmp = SECTCMP $* | ||
define cmd_section_cmp | ||
- s1=`$(OBJDUMP) -t -j "$*" "$<" | sort | \ | ||
+ s1=`$(OBJDUMP) -t "$<" | grep "\s$*\s\+" | sort | \ | ||
sed -n "/0000000000000000/! s/.*\s$*\s\+//p" | sha256sum`; \ | ||
- s2=`$(OBJDUMP) -t -j "$*" "$(word 2,$^)" | sort | \ | ||
+ s2=`$(OBJDUMP) -t "$(word 2,$^)" | grep "\s$*\s\+" | sort | \ | ||
sed -n "/0000000000000000/! s/.*\s$*\s\+//p" | sha256sum`; \ | ||
if [ "$$s1" != "$$s2" ]; then \ | ||
echo "error: section $* differs between $< and $(word 2,$^)" >&2; \ | ||
@@ -73,11 +73,12 @@ $(obj)/bzImage: $(obj)/vmlinux $(obj)/section_cmp.boot.data $(obj)/section_cmp.b | ||
$(obj)/section_cmp%: vmlinux $(obj)/vmlinux FORCE | ||
$(call if_changed,section_cmp) | ||
|
||
-LDFLAGS_vmlinux := --oformat $(LD_BFD) -e startup $(if $(CONFIG_VMLINUX_MAP),-Map=$(obj)/vmlinux.map) --build-id=sha1 -T | ||
+LDFLAGS_vmlinux-$(CONFIG_LD_ORPHAN_WARN) := --orphan-handling=$(CONFIG_LD_ORPHAN_WARN_LEVEL) | ||
+LDFLAGS_vmlinux := $(LDFLAGS_vmlinux-y) --oformat $(LD_BFD) -e startup $(if $(CONFIG_VMLINUX_MAP),-Map=$(obj)/vmlinux.map) --build-id=sha1 -T | ||
$(obj)/vmlinux: $(obj)/vmlinux.lds $(OBJECTS_ALL) FORCE | ||
$(call if_changed,ld) | ||
|
||
-LDFLAGS_vmlinux.syms := --oformat $(LD_BFD) -e startup -T | ||
+LDFLAGS_vmlinux.syms := $(LDFLAGS_vmlinux-y) --oformat $(LD_BFD) -e startup -T | ||
$(obj)/vmlinux.syms: $(obj)/vmlinux.lds $(OBJECTS) FORCE | ||
$(call if_changed,ld) | ||
|
||
diff --git a/arch/s390/boot/vmlinux.lds.S b/arch/s390/boot/vmlinux.lds.S | ||
index 389df0e0d9e5..38577203aed6 100644 | ||
--- a/arch/s390/boot/vmlinux.lds.S | ||
+++ b/arch/s390/boot/vmlinux.lds.S | ||
@@ -31,6 +31,7 @@ SECTIONS | ||
_text = .; /* Text */ | ||
*(.text) | ||
*(.text.*) | ||
+ INIT_TEXT | ||
_etext = . ; | ||
} | ||
.rodata : { | ||
@@ -39,6 +40,9 @@ SECTIONS | ||
*(.rodata.*) | ||
_erodata = . ; | ||
} | ||
+ .got : { | ||
+ *(.got) | ||
+ } | ||
NOTES | ||
.data : { | ||
_data = . ; | ||
@@ -118,8 +122,34 @@ SECTIONS | ||
} | ||
_end = .; | ||
|
||
+ DWARF_DEBUG | ||
+ ELF_DETAILS | ||
+ | ||
+ /* | ||
+ * Make sure that the .got.plt is either completely empty or it | ||
+ * contains only the three reserved double words. | ||
+ */ | ||
+ .got.plt : { | ||
+ *(.got.plt) | ||
+ } | ||
+ ASSERT(SIZEOF(.got.plt) == 0 || SIZEOF(.got.plt) == 0x18, "Unexpected GOT/PLT entries detected!") | ||
+ | ||
+ /* | ||
+ * Sections that should stay zero sized, which is safer to | ||
+ * explicitly check instead of blindly discarding. | ||
+ */ | ||
+ .plt : { | ||
+ *(.plt) *(.plt.*) *(.iplt) *(.igot .igot.plt) | ||
+ } | ||
+ ASSERT(SIZEOF(.plt) == 0, "Unexpected run-time procedure linkages detected!") | ||
+ .rela.dyn : { | ||
+ *(.rela.*) *(.rela_*) | ||
+ } | ||
+ ASSERT(SIZEOF(.rela.dyn) == 0, "Unexpected run-time relocations (.rela) detected!") | ||
+ | ||
/* Sections to be discarded */ | ||
/DISCARD/ : { | ||
+ COMMON_DISCARDS | ||
*(.eh_frame) | ||
*(__ex_table) | ||
*(*__ksymtab*) | ||
diff --git a/arch/s390/include/asm/bug.h b/arch/s390/include/asm/bug.h | ||
index aebe1e22c7be..c500d45fb465 100644 | ||
--- a/arch/s390/include/asm/bug.h | ||
+++ b/arch/s390/include/asm/bug.h | ||
@@ -14,7 +14,7 @@ | ||
".section .rodata.str,\"aMS\",@progbits,1\n" \ | ||
"1: .asciz \""__FILE__"\"\n" \ | ||
".previous\n" \ | ||
- ".section __bug_table,\"awM\",@progbits,%2\n" \ | ||
+ ".section __bug_table,\"aw\"\n" \ | ||
"2: .long 0b-.\n" \ | ||
" .long 1b-.\n" \ | ||
" .short %0,%1\n" \ | ||
@@ -30,7 +30,7 @@ | ||
#define __EMIT_BUG(x) do { \ | ||
asm_inline volatile( \ | ||
"0: mc 0,0\n" \ | ||
- ".section __bug_table,\"awM\",@progbits,%1\n" \ | ||
+ ".section __bug_table,\"aw\"\n" \ | ||
"1: .long 0b-.\n" \ | ||
" .short %0\n" \ | ||
" .org 1b+%1\n" \ | ||
diff --git a/arch/s390/kernel/vdso32/Makefile b/arch/s390/kernel/vdso32/Makefile | ||
index caec7db6f966..b12a274cbb47 100644 | ||
--- a/arch/s390/kernel/vdso32/Makefile | ||
+++ b/arch/s390/kernel/vdso32/Makefile | ||
@@ -22,7 +22,7 @@ KBUILD_CFLAGS_32 := $(filter-out -m64,$(KBUILD_CFLAGS)) | ||
KBUILD_CFLAGS_32 := $(filter-out -mno-pic-data-is-text-relative,$(KBUILD_CFLAGS_32)) | ||
KBUILD_CFLAGS_32 += -m31 -fPIC -shared -fno-common -fno-builtin | ||
|
||
-LDFLAGS_vdso32.so.dbg += -fPIC -shared -soname=linux-vdso32.so.1 \ | ||
+LDFLAGS_vdso32.so.dbg += -shared -soname=linux-vdso32.so.1 \ | ||
--hash-style=both --build-id=sha1 -melf_s390 -T | ||
|
||
$(targets:%=$(obj)/%.dbg): KBUILD_CFLAGS = $(KBUILD_CFLAGS_32) | ||
diff --git a/arch/s390/kernel/vdso32/vdso32.lds.S b/arch/s390/kernel/vdso32/vdso32.lds.S | ||
index edf5ff1debe1..65b9513a5a0e 100644 | ||
--- a/arch/s390/kernel/vdso32/vdso32.lds.S | ||
+++ b/arch/s390/kernel/vdso32/vdso32.lds.S | ||
@@ -9,7 +9,6 @@ | ||
|
||
OUTPUT_FORMAT("elf32-s390", "elf32-s390", "elf32-s390") | ||
OUTPUT_ARCH(s390:31-bit) | ||
-ENTRY(_start) | ||
|
||
SECTIONS | ||
{ | ||
diff --git a/arch/s390/kernel/vdso64/Makefile b/arch/s390/kernel/vdso64/Makefile | ||
index e3c9085f8fa7..caa4ebff8a19 100644 | ||
--- a/arch/s390/kernel/vdso64/Makefile | ||
+++ b/arch/s390/kernel/vdso64/Makefile | ||
@@ -26,7 +26,7 @@ KBUILD_AFLAGS_64 += -m64 | ||
KBUILD_CFLAGS_64 := $(filter-out -m64,$(KBUILD_CFLAGS)) | ||
KBUILD_CFLAGS_64 := $(filter-out -mno-pic-data-is-text-relative,$(KBUILD_CFLAGS_64)) | ||
KBUILD_CFLAGS_64 += -m64 -fPIC -fno-common -fno-builtin | ||
-ldflags-y := -fPIC -shared -soname=linux-vdso64.so.1 \ | ||
+ldflags-y := -shared -soname=linux-vdso64.so.1 \ | ||
--hash-style=both --build-id=sha1 -T | ||
|
||
$(targets:%=$(obj)/%.dbg): KBUILD_CFLAGS = $(KBUILD_CFLAGS_64) | ||
diff --git a/arch/s390/kernel/vdso64/vdso64.lds.S b/arch/s390/kernel/vdso64/vdso64.lds.S | ||
index 4461ea151e49..37e2a505e81d 100644 | ||
--- a/arch/s390/kernel/vdso64/vdso64.lds.S | ||
+++ b/arch/s390/kernel/vdso64/vdso64.lds.S | ||
@@ -9,7 +9,6 @@ | ||
|
||
OUTPUT_FORMAT("elf64-s390", "elf64-s390", "elf64-s390") | ||
OUTPUT_ARCH(s390:64-bit) | ||
-ENTRY(_start) | ||
|
||
SECTIONS | ||
{ | ||
diff --git a/arch/s390/kernel/vmlinux.lds.S b/arch/s390/kernel/vmlinux.lds.S | ||
index e32ef446f451..2e07c1504542 100644 | ||
--- a/arch/s390/kernel/vmlinux.lds.S | ||
+++ b/arch/s390/kernel/vmlinux.lds.S | ||
@@ -59,6 +59,12 @@ SECTIONS | ||
} :text = 0x0700 | ||
|
||
RO_DATA(PAGE_SIZE) | ||
+ .data.rel.ro : { | ||
+ *(.data.rel.ro .data.rel.ro.*) | ||
+ } | ||
+ .got : { | ||
+ *(.got) | ||
+ } | ||
|
||
. = ALIGN(PAGE_SIZE); | ||
_sdata = .; /* Start of data section */ | ||
@@ -73,6 +79,9 @@ SECTIONS | ||
__end_ro_after_init = .; | ||
|
||
RW_DATA(0x100, PAGE_SIZE, THREAD_SIZE) | ||
+ .data.rel : { | ||
+ *(.data.rel*) | ||
+ } | ||
BOOT_DATA_PRESERVED | ||
|
||
. = ALIGN(8); | ||
@@ -191,6 +200,18 @@ SECTIONS | ||
*(.rela*) | ||
__rela_dyn_end = .; | ||
} | ||
+ .dynamic ALIGN(8) : { | ||
+ *(.dynamic) | ||
+ } | ||
+ .dynstr ALIGN(8) : { | ||
+ *(.dynstr) | ||
+ } | ||
+ .hash ALIGN(8) : { | ||
+ *(.hash) | ||
+ } | ||
+ .gnu.hash ALIGN(8) : { | ||
+ *(.gnu.hash) | ||
+ } | ||
|
||
. = ALIGN(PAGE_SIZE); | ||
__init_end = .; /* freed after init ends here */ | ||
@@ -235,6 +256,24 @@ SECTIONS | ||
DWARF_DEBUG | ||
ELF_DETAILS | ||
|
||
+ /* | ||
+ * Make sure that the .got.plt is either completely empty or it | ||
+ * contains only the three reserved double words. | ||
+ */ | ||
+ .got.plt : { | ||
+ *(.got.plt) | ||
+ } | ||
+ ASSERT(SIZEOF(.got.plt) == 0 || SIZEOF(.got.plt) == 0x18, "Unexpected GOT/PLT entries detected!") | ||
+ | ||
+ /* | ||
+ * Sections that should stay zero sized, which is safer to | ||
+ * explicitly check instead of blindly discarding. | ||
+ */ | ||
+ .plt : { | ||
+ *(.plt) *(.plt.*) *(.iplt) *(.igot .igot.plt) | ||
+ } | ||
+ ASSERT(SIZEOF(.plt) == 0, "Unexpected run-time procedure linkages detected!") | ||
+ | ||
/* Sections to be discarded */ | ||
DISCARDS | ||
/DISCARD/ : { |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -258,12 +258,6 @@ def __init__(self): | |
|
||
self.cross_compile = 's390x-linux-gnu-' | ||
|
||
# LD: https://github.com/ClangBuiltLinux/linux/issues/1524 | ||
# OBJCOPY: https://github.com/ClangBuiltLinux/linux/issues/1530 | ||
# OBJDUMP: https://github.com/ClangBuiltLinux/linux/issues/859 | ||
for key in ['LD', 'OBJCOPY', 'OBJDUMP']: | ||
self.make_variables[key] = self.cross_compile + key.lower() | ||
|
||
def build(self): | ||
self.toolchain_version = self.get_toolchain_version() | ||
if self.toolchain_version <= (15, 0, 0): | ||
|
@@ -272,6 +266,45 @@ def build(self): | |
's390 does not build with LLVM < 15.0.0, skipping build...') | ||
return | ||
|
||
# LD: https://github.com/ClangBuiltLinux/linux/issues/1524 | ||
# OBJCOPY: https://github.com/ClangBuiltLinux/linux/issues/1530 | ||
# OBJDUMP: https://github.com/ClangBuiltLinux/linux/issues/859 | ||
gnu_vars = [] | ||
|
||
# https://github.com/llvm/llvm-project/pull/75643 | ||
lld_res = subprocess.run([Path(self.toolchain_prefix, 'bin/ld.lld'), '-m', 'elf64_s390'], | ||
capture_output=True, | ||
check=False, | ||
text=True) | ||
no_s390_support_in_lld = 'error: unknown emulation:' in lld_res.stderr | ||
# https://lore.kernel.org/[email protected]/ | ||
s390_makefile_txt = Path(self.folders.source, | ||
'arch/s390/Makefile').read_text(encoding='utf-8') | ||
no_s390_kernel_support_for_lld = '-z notext' not in s390_makefile_txt | ||
if no_s390_support_in_lld or no_s390_kernel_support_for_lld: | ||
gnu_vars.append('LD') | ||
|
||
# https://github.com/llvm/llvm-project/pull/81841 | ||
objcopy_res = subprocess.run( | ||
[Path(self.toolchain_prefix, 'bin/llvm-objcopy'), '-I', 'binary', '-O', 'elf64-s390', '-', '/dev/null'], | ||
capture_output=True, | ||
check=False, | ||
input='', | ||
text=True) | ||
no_s390_support_in_llvm_objcopy = 'error: invalid output format:' in objcopy_res.stderr | ||
if no_s390_support_in_llvm_objcopy: | ||
gnu_vars.append('OBJCOPY') | ||
|
||
# https://github.com/ClangBuiltLinux/linux/issues/859 | ||
s390_boot_makefile_txt = Path(self.folders.source, | ||
'arch/s390/boot/Makefile').read_text(encoding='utf-8') | ||
have_objdump_t_j_wa = r' | grep "\s$*\s\+" | ' in s390_boot_makefile_txt | ||
if not have_objdump_t_j_wa: | ||
gnu_vars.append('OBJDUMP') | ||
|
||
for key in gnu_vars: | ||
self.make_variables[key] = self.cross_compile + key.lower() | ||
|
||
super().build() | ||
|
||
def can_use_ias(self): | ||
|