From nobody Sun Feb 8 13:38:48 2026 Received: from cstnet.cn (smtp20.cstnet.cn [159.226.251.20]) (using TLSv1.2 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8B6FB2E093B for ; Thu, 13 Nov 2025 10:51:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=159.226.251.20 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763031122; cv=none; b=OUccv7Edfs5TtHGkkCqoziZJ32WT2zG5DMQY7uJqwwigX+HRHP0I8JSxrNRYGlMMJBxu3Q9L4bwSwgt8RPW/9gTsXVrabJNcl1D3z4y58GhXMK0YB5JH7FMoPICtg+pl1CF79AJsDQ819AVpZ7FSvLKlB0wct8baTgfLg/hfc8Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763031122; c=relaxed/simple; bh=Z1tE5LtgcPzy5W4aA0oUbh7Lns5asEMR3jOe4nsfKVQ=; h=Date:From:To:Cc:Subject:Content-Type:MIME-Version:Message-ID; b=Z6X1HE/glXWuZzJrJpFIC0iwPkLJUQPpYUBAJ3fOTQssQxbH0E4da+Mf7at3ZGiY5qc4g0Q1qTV321sdHEuw27jCJl2G9UmjvyUyWjMlyCSm9MS573YCiRLYr4lMr8cfT4ePbWSpDbaJXJS1cO8aV9kxrkVojvJEj1j0bsBv/j0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=iscas.ac.cn; spf=pass smtp.mailfrom=iscas.ac.cn; arc=none smtp.client-ip=159.226.251.20 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=iscas.ac.cn Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=iscas.ac.cn Received: from xujiakai2025$iscas.ac.cn ( [210.73.43.101] ) by ajax-webmail-APP-10 (Coremail) ; Thu, 13 Nov 2025 18:51:42 +0800 (GMT+08:00) Date: Thu, 13 Nov 2025 18:51:42 +0800 (GMT+08:00) X-CM-HeaderCharset: UTF-8 From: =?UTF-8?B?6K645L2z5Yev?= To: linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org Cc: "Paul Walmsley" , "Palmer Dabbelt" , "Albert Ou" , "Alexandre Ghiti" Subject: [PATCH] riscv: fix KUnit test_kprobes crash when building with Clang X-Priority: 3 X-Mailer: Coremail Webmail Server Version 2024.1-cmXT5 build 20240627(e6c6db66) Copyright (c) 2002-2025 www.mailtech.cn cnic.cn Content-Transfer-Encoding: quoted-printable Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-ID: <738dd4e2.ff73.19a7cd7b4d5.Coremail.xujiakai2025@iscas.ac.cn> X-Coremail-Locale: zh_CN X-CM-TRANSID: tACowAAnEOg_uBVp25oBAA--.19303W X-CM-SenderInfo: 50xmxthndljiysv6x2xfdvhtffof0/1tbiCQ4FCWkVqNMfUQABsD X-Coremail-Antispam: 1Ur529EdanIXcx71UUUUU7IcSsGvfJ3iIAIbVAYjsxI4VWxJw CS07vEb4IE77IF4wCS07vE1I0E4x80FVAKz4kxMIAIbVAFxVCaYxvI4VCIwcAKzIAtYxBI daVFxhVjvjDU= Content-Type: text/plain; charset="utf-8" Clang misaligns the test_kprobes_addresses and test_kprobes_functions arrays, or does not export local labels by default. Both can cause kmalloc_array() allocation errors and KUnit failures. This patch fixes the issue by: - Adding .section .rodata to explicitly place arrays in the read-only data = segment. - Adding .align 3 to align arrays to 8 bytes. - Adding .globl to probe labels to ensure symbols are visible. For detailed debug and analysis, see: https://github.com/j1akai/temp/blob/main/20251113/readme.md Signed-off-by: Jiakai Xu --- arch/riscv/kernel/tests/kprobes/test-kprobes-asm.S | 29 ++++++++++++++++= +++ 1 file changed, 29 insertions(+) diff --git a/arch/riscv/kernel/tests/kprobes/test-kprobes-asm.S b/arch/risc= v/kernel/tests/kprobes/test-kprobes-asm.S index b951d0f12482..ac5ce305b1bd 100644 --- a/arch/riscv/kernel/tests/kprobes/test-kprobes-asm.S +++ b/arch/riscv/kernel/tests/kprobes/test-kprobes-asm.S @@ -7,8 +7,10 @@ SYM_FUNC_START(test_kprobes_add) li a1, KPROBE_TEST_MAGIC_UPPER li a2, KPROBE_TEST_MAGIC_LOWER +.globl test_kprobes_add_addr1 test_kprobes_add_addr1: add a1, a1, a2 +.globl test_kprobes_add_addr2 test_kprobes_add_addr2: add a0, a1, x0 ret @@ -19,6 +21,7 @@ SYM_FUNC_START(test_kprobes_jal) mv a1, ra .option push .option norvc +.globl test_kprobes_jal_addr1 test_kprobes_jal_addr1: jal x0, 2f ret @@ -27,6 +30,7 @@ test_kprobes_jal_addr1: ret .option push .option norvc +.globl test_kprobes_jal_addr2 test_kprobes_jal_addr2: 2: jal 1b .option pop @@ -40,6 +44,7 @@ SYM_FUNC_START(test_kprobes_jalr) mv a1, ra .option push .option norvc +.globl test_kprobes_jalr_addr test_kprobes_jalr_addr: jalr a0 .option pop @@ -51,6 +56,7 @@ test_kprobes_jalr_addr: SYM_FUNC_END(test_kprobes_jalr) =20 SYM_FUNC_START(test_kprobes_auipc) +.globl test_kprobes_auipc_addr test_kprobes_auipc_addr: auipc a0, KPROBE_TEST_MAGIC_LOWER la a1, test_kprobes_auipc_addr @@ -67,20 +73,26 @@ SYM_FUNC_START(test_kprobes_branch) li a0, 0 li a1, 1 li a2, 2 +.globl test_kprobes_branch_addr1 test_kprobes_branch_addr1: beqz a0, 1f ret 1: +.globl test_kprobes_branch_addr2 test_kprobes_branch_addr2: beqz a1, 3f +.globl test_kprobes_branch_addr3 test_kprobes_branch_addr3: bnez a0, 3f +.globl test_kprobes_branch_addr4 test_kprobes_branch_addr4: bnez a2, 1f ret 1: +.globl test_kprobes_branch_addr5 test_kprobes_branch_addr5: bge a1, a2, 3f +.globl test_kprobes_branch_addr6 test_kprobes_branch_addr6: bge a2, a1, 2f ret @@ -89,9 +101,11 @@ test_kprobes_branch_addr6: add a0, a0, t0 ret 2: +.globl test_kprobes_branch_addr7 test_kprobes_branch_addr7: blt a2, a1, 3f li a0, KPROBE_TEST_MAGIC_LOWER +.globl test_kprobes_branch_addr8 test_kprobes_branch_addr8: blt a1, a2, 1b 3: @@ -104,6 +118,7 @@ SYM_FUNC_END(test_kprobes_branch) =20 SYM_FUNC_START(test_kprobes_c_j) li a0, 0 +.globl test_kprobes_branch_c_j_addr1 test_kprobes_branch_c_j_addr1: c.j 2f 1: @@ -111,12 +126,14 @@ test_kprobes_branch_c_j_addr1: add a0, a0, a1 ret 2: li a0, KPROBE_TEST_MAGIC_LOWER +.globl test_kprobes_branch_c_j_addr2 test_kprobes_branch_c_j_addr2: c.j 1b SYM_FUNC_END(test_kprobes_c_j) =20 SYM_FUNC_START(test_kprobes_c_jr) la a0, 2f +.globl test_kprobes_c_jr_addr1 test_kprobes_c_jr_addr1: c.jr a0 ret @@ -126,6 +143,7 @@ test_kprobes_c_jr_addr1: 2: li a0, KPROBE_TEST_MAGIC_UPPER la a1, 1b +.globl test_kprobes_c_jr_addr2 test_kprobes_c_jr_addr2: c.jr a1 SYM_FUNC_END(test_kprobes_c_jr) @@ -133,6 +151,7 @@ SYM_FUNC_END(test_kprobes_c_jr) SYM_FUNC_START(test_kprobes_c_jalr) mv a1, ra la a0, 1f +.globl test_kprobes_c_jalr_addr test_kprobes_c_jalr_addr: c.jalr a0 li a2, KPROBE_TEST_MAGIC_UPPER @@ -145,16 +164,19 @@ SYM_FUNC_END(test_kprobes_c_jalr) SYM_FUNC_START(test_kprobes_c_beqz) li a0, 0 li a1, 1 +.globl test_kprobes_c_beqz_addr1 test_kprobes_c_beqz_addr1: c.beqz a0, 2f ret 1: li a1, KPROBE_TEST_MAGIC_UPPER add a0, a0, a1 ret +.globl test_kprobes_c_beqz_addr2 test_kprobes_c_beqz_addr2: 2: c.beqz a1, 3f li a0, KPROBE_TEST_MAGIC_LOWER mv a1, x0 +.globl test_kprobes_c_beqz_addr3 test_kprobes_c_beqz_addr3: c.beqz a1, 1b 3: li a0, 0 @@ -164,15 +186,18 @@ SYM_FUNC_END(test_kprobes_c_beqz) SYM_FUNC_START(test_kprobes_c_bnez) li a0, 0 li a1, 1 +.globl test_kprobes_c_bnez_addr1 test_kprobes_c_bnez_addr1: c.bnez a1, 2f ret 1: li a1, KPROBE_TEST_MAGIC_UPPER add a0, a0, a1 ret +.globl test_kprobes_c_bnez_addr2 test_kprobes_c_bnez_addr2: 2: c.bnez a0, 3f li a0, KPROBE_TEST_MAGIC_LOWER +.globl test_kprobes_c_bnez_addr3 test_kprobes_c_bnez_addr3: c.bnez a0, 1b 3: li a0, 0 @@ -181,6 +206,8 @@ SYM_FUNC_END(test_kprobes_c_bnez) =20 #endif /* CONFIG_RISCV_ISA_C */ =20 +.section .rodata +.align 3 SYM_DATA_START(test_kprobes_addresses) RISCV_PTR test_kprobes_add_addr1 RISCV_PTR test_kprobes_add_addr2 @@ -212,6 +239,8 @@ SYM_DATA_START(test_kprobes_addresses) RISCV_PTR 0 SYM_DATA_END(test_kprobes_addresses) =20 +.section .rodata +.align 3 SYM_DATA_START(test_kprobes_functions) RISCV_PTR test_kprobes_add RISCV_PTR test_kprobes_jal --=20 2.34.1