From bbbb3e052f6697b37175bc8dbdee950c1fdec630 Mon Sep 17 00:00:00 2001 From: Aster Boese Date: Thu, 4 Dec 2025 14:53:48 -0500 Subject: [PATCH] linux-samsung-a50: build with LLVM Signed-off-by: Aster Boese Part-of: --- device/downstream/linux-samsung-a50/APKBUILD | 46 +++++++--- ...-fix-vdso_offset_sigtramp-undeclared.patch | 34 ++++++++ .../config-samsung-a50.aarch64 | 14 +-- .../linux-samsung-a50/memcpy-STB_GLOBAL.patch | 85 +++++++++++++++++++ 4 files changed, 161 insertions(+), 18 deletions(-) create mode 100644 device/downstream/linux-samsung-a50/arm64-vdso-fix-vdso_offset_sigtramp-undeclared.patch create mode 100644 device/downstream/linux-samsung-a50/memcpy-STB_GLOBAL.patch diff --git a/device/downstream/linux-samsung-a50/APKBUILD b/device/downstream/linux-samsung-a50/APKBUILD index d73aa4b2e..2e14706f1 100644 --- a/device/downstream/linux-samsung-a50/APKBUILD +++ b/device/downstream/linux-samsung-a50/APKBUILD @@ -3,7 +3,7 @@ pkgname=linux-samsung-a50 pkgver=4.14.194 -pkgrel=0 +pkgrel=1 pkgdesc="Samsung Galaxy A50 kernel fork" arch="aarch64" _carch="arm64" @@ -15,10 +15,10 @@ makedepends=" bash bc bison + clang devicepkg-dev findutils flex - gcc6 linux-headers lld llvm @@ -45,16 +45,12 @@ source=" various_firmware_paths.patch dtbinst_remove_target.patch no_trailingspaces.patch + arm64-vdso-fix-vdso_offset_sigtramp-undeclared.patch + memcpy-STB_GLOBAL.patch " builddir="$srcdir/$_kernel_repo-$_kernel_repo_commit" _outdir="out" -if [ "${CC:0:5}" != "gcc6-" ]; then - CC="gcc6-$CC" - HOSTCC="gcc6-gcc" - CROSS_COMPILE="gcc6-$CROSS_COMPILE" -fi - prepare() { default_prepare REPLACE_GCCH=0 . downstreamkernel_prepare @@ -70,7 +66,20 @@ build() { cp drivers/misc/tzdev/startup_old.tzar $_outdir/drivers/misc/tzdev/startup_old.tzar unset LDFLAGS - make O="$_outdir" ARCH="$_carch" CC="${CC:-gcc}" \ + make O="$_outdir" ARCH="$_carch" \ + CC=clang \ + LD=ld.lld \ + AR=llvm-ar \ + NM=llvm-nm \ + STRIP=llvm-strip \ + OBJCOPY=llvm-objcopy \ + OBJDUMP=llvm-objdump \ + READELF=llvm-readelf \ + HOSTCC=clang \ + HOSTCXX=clang++ \ + HOSTAR=llvm-ar \ + HOSTLD=ld.lld \ + LLVM=1 LLVM_IAS=1 \ KBUILD_BUILD_VERSION="$((pkgrel + 1 ))-postmarketOS" } @@ -80,8 +89,21 @@ package() { # Modules unset LDFLAGS - make O="$_outdir" ARCH="$_carch" CC="${CC:-gcc}" \ + make O="$_outdir" ARCH="$_carch" \ KBUILD_BUILD_VERSION="$((pkgrel + 1))-postmarketOS" \ + CC=clang \ + LD=ld.lld \ + AR=llvm-ar \ + NM=llvm-nm \ + STRIP=llvm-strip \ + OBJCOPY=llvm-objcopy \ + OBJDUMP=llvm-objdump \ + READELF=llvm-readelf \ + HOSTCC=clang \ + HOSTCXX=clang++ \ + HOSTAR=llvm-ar \ + HOSTLD=ld.lld \ + LLVM=1 LLVM_IAS=1 \ INSTALL_MOD_PATH="$pkgdir" \ INSTALL_MOD_STRIP=1 \ MODLIB="$pkgdir/lib/modules/4.14.194" \ @@ -92,7 +114,7 @@ package() { sha512sums=" a8937404ae7547c7a4b623f77f44a08390749c0d527c783bb7f99758dbfc204b7fe95df1d7b5c3f52bd0febf84fc8fcb28196574436cbd131d476ea707ffdf22 linux-samsung-a50-7f72a8b689677562f028d78b2e91bd79277a0aba.tar.gz -aad95fc57648cab5d27635abedddfcf7e783d7c557ca9c50b384997f6a3ccc6ef8ec7a147cce48d72fcbf7650d12a34814cce49bb9302d52f3d4545f43880a3d config-samsung-a50.aarch64 +3e56ab2d917429a25207b19e440b11e47798871fa650a1e311b381fe6dcc814960d509c78c39c620bd63aa10b2435c8fca539a441510ec9e0d29bbdba8becc98 config-samsung-a50.aarch64 182be3c596b9cc267ac108d7cf03fc8c328ccc6b36770800e4dcedea8d1bb65e3f5eacf590c2948f58b1418cc60a1670ba77dde8c259e428d158c31b6e1dbaf5 fix-check-lxdialog.patch c3024ec5bab940c2792d9dd2d6407c6a099ad1c301de3bea087f166e2d0102d653efd7fe21fd74abbeb289cab89090eb8cbd9abf325dcb8327ae75820358b87c lz4_missing_label.patch dd5cbce4ffca5c919b9819bec8ff9d4902e3fb024780d12467c498f933fd9bc4af638ab1eaaf53269e491e1a4576bb34cda980a2e70252aed1b831264aa48e01 disable_optimization_flags.patch @@ -101,4 +123,6 @@ a3b72366255eeb3a339646b56857171c8f9a20b020ce2fe0837ee0fd32e07a866d0329624cf6d604 5ae731527b5f9fddeb1f5fa853ded918dc323414453d0600d9c27b42b76a55a47c471344115cb0628195c13815f776e73705bf51c20197c011fbda36a619bcd9 various_firmware_paths.patch 00ea85c43059d24b6930781ef2e9d1b62ad73416d771445135650d41c4e045528b5237a896de451a68ceeace89223700392e67772efaa723c3e0b11e95e431dc dtbinst_remove_target.patch 3143ad3241632d287916216cc0c712307a7efc54f92a2bc57f70948e3e3a102b3140e91030aaff055abd8201309725690c26120551afe6acbe2e9019a0b95939 no_trailingspaces.patch +db2cd9cbd8447d4bb5387ac34aef7414867a6322f9d3c435be432cfe4b6af535384c042254c934a7aad28b97592593905b26c124692fa207bd1e7b6457ba0a09 arm64-vdso-fix-vdso_offset_sigtramp-undeclared.patch +6828faf0212198d78e58312669ff306236a95d0e3c3e2b9d81d171b6bb54b72979bb9867cecf584781647fe8ee1011ab080317783bc2ddd6e35ccd07029e3686 memcpy-STB_GLOBAL.patch " diff --git a/device/downstream/linux-samsung-a50/arm64-vdso-fix-vdso_offset_sigtramp-undeclared.patch b/device/downstream/linux-samsung-a50/arm64-vdso-fix-vdso_offset_sigtramp-undeclared.patch new file mode 100644 index 000000000..0179d9da5 --- /dev/null +++ b/device/downstream/linux-samsung-a50/arm64-vdso-fix-vdso_offset_sigtramp-undeclared.patch @@ -0,0 +1,34 @@ +From 49c7fba8bfd5017a400b6395dc7874636215dfe3 Mon Sep 17 00:00:00 2001 +From: Tiandoufayale <45908670+tiandoufayale@users.noreply.github.com> +Date: Sat, 24 Feb 2024 15:08:34 +0800 +Subject: [PATCH] arm64:vdso: fix vdso_offset_sigtramp' undeclared + +--- + arch/arm64/include/asm/vdso.h | 3 +++ + arch/arm64/kernel/vdso/gen_vdso_offsets.sh | 2 +- + 2 files changed, 4 insertions(+), 1 deletion(-) + +diff --git a/arch/arm64/include/asm/vdso.h b/arch/arm64/include/asm/vdso.h +index 839ce0031..61e04da2f 100644 +--- a/arch/arm64/include/asm/vdso.h ++++ b/arch/arm64/include/asm/vdso.h +@@ -29,6 +29,9 @@ + + #include + ++ ++#define vdso_offset_sigtramp ++ + #define VDSO_SYMBOL(base, name) \ + ({ \ + (void *)(vdso_offset_##name - VDSO_LBASE + (unsigned long)(base)); \ +diff --git a/arch/arm64/kernel/vdso/gen_vdso_offsets.sh b/arch/arm64/kernel/vdso/gen_vdso_offsets.sh +index 0664acaf6..d7ff1fe19 100644 +--- a/arch/arm64/kernel/vdso/gen_vdso_offsets.sh ++++ b/arch/arm64/kernel/vdso/gen_vdso_offsets.sh +@@ -13,4 +13,4 @@ + + LC_ALL=C + sed -n -e 's/^00*/0/' -e \ +-'s/^\([0-9a-fA-F]*\) . VDSO_\([a-zA-Z0-9_]*\)$/\#define vdso_offset_\2\t0x\1/p' ++'s/^\([0-9a-fA-F]*\) . VDSO_\([a-zA-Z0-9_]*\)$/\#define vdso_offset_\2 0x\1/p' diff --git a/device/downstream/linux-samsung-a50/config-samsung-a50.aarch64 b/device/downstream/linux-samsung-a50/config-samsung-a50.aarch64 index f2f5fac5b..746f77c98 100644 --- a/device/downstream/linux-samsung-a50/config-samsung-a50.aarch64 +++ b/device/downstream/linux-samsung-a50/config-samsung-a50.aarch64 @@ -295,17 +295,16 @@ CONFIG_CC_STACKPROTECTOR_NONE=y # CONFIG_CC_STACKPROTECTOR_REGULAR is not set # CONFIG_CC_STACKPROTECTOR_STRONG is not set CONFIG_THIN_ARCHIVES=y +# CONFIG_LD_BFD is not set # CONFIG_LD_GOLD is not set CONFIG_LD_LLD=y -CONFIG_LTO=y +# CONFIG_LTO is not set CONFIG_ARCH_SUPPORTS_LTO_CLANG=y CONFIG_ARCH_SUPPORTS_THINLTO=y -CONFIG_THINLTO=y CONFIG_ARCH_SUPPORTS_LTO_GCC=y -# CONFIG_LTO_NONE is not set -CONFIG_LTO_CLANG=y -# CONFIG_CFI_CLANG is not set -CONFIG_LLVM_POLLY=y +CONFIG_LTO_NONE=y +# CONFIG_LTO_CLANG is not set +# CONFIG_LLVM_POLLY is not set # CONFIG_GCC_GRAPHITE is not set CONFIG_HAVE_CONTEXT_TRACKING=y CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y @@ -700,6 +699,7 @@ CONFIG_ARM64_MODULE_CMODEL_LARGE=y CONFIG_ARM64_MODULE_PLTS=y CONFIG_RELOCATABLE=y CONFIG_RANDOMIZE_BASE=y +CONFIG_RANDOMIZE_MODULE_REGION_FULL=y # # Boot options @@ -2064,7 +2064,7 @@ CONFIG_INPUT_MATRIXKMAP=y # # CONFIG_INPUT_MOUSEDEV is not set # CONFIG_INPUT_JOYDEV is not set -CONFIG_INPUT_EVDEV=y +CONFIG_INPUT_EVDEV=m # CONFIG_INPUT_EVBUG is not set CONFIG_INPUT_KEYRESET=y # CONFIG_INPUT_TOUCHSCREEN_TCLMV2 is not set diff --git a/device/downstream/linux-samsung-a50/memcpy-STB_GLOBAL.patch b/device/downstream/linux-samsung-a50/memcpy-STB_GLOBAL.patch new file mode 100644 index 000000000..180cb954a --- /dev/null +++ b/device/downstream/linux-samsung-a50/memcpy-STB_GLOBAL.patch @@ -0,0 +1,85 @@ +From: Fangrui Song + +mainline inclusion +from mainline-5.11-rc1 +commit 735e8d93dc2b107f7891a9c2b1c4cfbea1fcbbbc +category: feature +feature: ARM KASAN support +issue: #I3ZXZF +CVE: NA + +Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?i... + +Modified by Aster Boese + Changed to ARM64 + +------------------------------------------------- +Commit d6d51a96c7d6 ("ARM: 9014/2: Replace string mem* functions for +KASan") add .weak directives to memcpy/memmove/memset to avoid collision +with KASAN interceptors. + +This does not work with LLVM's integrated assembler (the assembly snippet +`.weak memcpy ... .globl memcpy` produces a STB_GLOBAL memcpy while GNU as +produces a STB_WEAK memcpy). LLVM 12 (since https://reviews.llvm.org/D90108) +will error on such an overridden symbol binding. + +Use the appropriate WEAK macro instead. + +Link: https://github.com/ClangBuiltLinux/linux/issues/1190 +Reviewed-by: Jing Xiangfeng +Signed-off-by: Chen Jun +Signed-off-by: Yu Changchun + +--- + arch/arm64/lib/memcpy.S | 3 +-- + arch/arm64/lib/memmove.S | 3 +-- + arch/arm64/lib/memset.S | 3 +-- + 3 files changed, 3 insertions(+), 6 deletions(-) + +diff --git a/arch/arm64/lib/memcpy.S b/arch/arm64/lib/memcpy.S +index 676139377..dfedd4ab1 100644 +--- a/arch/arm64/lib/memcpy.S ++++ b/arch/arm64/lib/memcpy.S +@@ -68,9 +68,8 @@ + stp \ptr, \regB, [\regC], \val + .endm + +- .weak memcpy + ENTRY(__memcpy) +-ENTRY(memcpy) ++WEAK(memcpy) + #include "copy_template.S" + ret + ENDPIPROC(memcpy) +diff --git a/arch/arm64/lib/memmove.S b/arch/arm64/lib/memmove.S +index f5ac945d2..d2dadccb6 100644 +--- a/arch/arm64/lib/memmove.S ++++ b/arch/arm64/lib/memmove.S +@@ -57,9 +57,8 @@ C_h .req x12 + D_l .req x13 + D_h .req x14 + +- .weak memmove + ENTRY(__memmove) +-ENTRY(memmove) ++WEAK(memmove) + prfm pldl1strm, [src, #L1_CACHE_BYTES] + cmp dstin, src + b.lo __memcpy +diff --git a/arch/arm64/lib/memset.S b/arch/arm64/lib/memset.S +index f2670a9f2..316263c47 100644 +--- a/arch/arm64/lib/memset.S ++++ b/arch/arm64/lib/memset.S +@@ -54,9 +54,8 @@ dst .req x8 + tmp3w .req w9 + tmp3 .req x9 + +- .weak memset + ENTRY(__memset) +-ENTRY(memset) ++WEAK(memset) + mov dst, dstin /* Preserve return value. */ + and A_lw, val, #255 + orr A_lw, A_lw, A_lw, lsl #8 +-- +2.52.0