Commit 673a55cc49da ("kselftest/coredump: use __builtin_trap() instead of
null pointer") changed the plain NULL pointer deference to __builtin_trap()
because LLVM optimizes the NULL pointer deference away.

However, this makes the test fail on RISC-V, because __builtin_trap()
raises a SIGTRAP instead of SIGSEGV as expected by the test:

 #  RUN           coredump.socket_coredump_signal_sigsegv ...
 Set core_pattern to '@@/tmp/coredump.socket' | 22 == 22
 get_peer_pidfd: successfully retrieved pidfd 13
 get_pidfd_info: mask=0x57, coredump_mask=0x5, coredump_signal=5
 socket_coredump_signal_sigsegv: coredump_signal=5, expected SIGSEGV=11
 # coredump_socket_protocol_test.c:1125:socket_coredump_signal_sigsegv:Expected 
WTERMSIG(status) (5) == SIGSEGV (11)
 # socket_coredump_signal_sigsegv: Test terminated by assertion
 #          FAIL  coredump.socket_coredump_signal_sigsegv
 not ok 8 coredump.socket_coredump_signal_sigsegv

Instead of __builtin_trap(), implement the other suggestion from LLVM
(volatile) to make the test pass.

Signed-off-by: Nam Cao <[email protected]>
---
 tools/testing/selftests/coredump/coredump_test_helpers.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/testing/selftests/coredump/coredump_test_helpers.c 
b/tools/testing/selftests/coredump/coredump_test_helpers.c
index 5c8adee63641..2c850e0b1b57 100644
--- a/tools/testing/selftests/coredump/coredump_test_helpers.c
+++ b/tools/testing/selftests/coredump/coredump_test_helpers.c
@@ -56,7 +56,7 @@ void crashing_child(void)
                pthread_create(&thread, NULL, do_nothing, NULL);
 
        /* crash on purpose */
-       __builtin_trap();
+       i = *(volatile int *)NULL;
 }
 
 int create_detached_tmpfs(void)
-- 
2.47.3


Reply via email to