From: Jonathan Rajotte Date: Wed, 6 May 2020 00:08:34 +0000 (-0400) Subject: testapp: gen-syscall-events: use dynamic paths provided via args X-Git-Tag: v2.13.0-rc1~286 X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=commitdiff_plain;h=ca342eaff631d106a2c83308f19487d21cb5be40 testapp: gen-syscall-events: use dynamic paths provided via args This is to try and mitigate the limitation found here: https://bugs.lttng.org/issues/1261 Using an argument ensures that the path is not in the .rodata section of the executable and reduces the chance that the kernel tracer incurs a page fault when attempting to serialize the path argument. The path is pre-faulted to mitigate the problem described in #1261. Fixes #1261 Signed-off-by: Jonathan Rajotte Signed-off-by: Jérémie Galarneau Change-Id: I6b6173ee5d8b33dcdf1cc391db9d1eafe00f90b9 Depends-on: lttng-ust: I5a800fc92e588c2a6a0e26282b0ad5f31c044479 --- diff --git a/tests/regression/kernel/test_callstack b/tests/regression/kernel/test_callstack index c4a6200da..42c3fcce4 100755 --- a/tests/regression/kernel/test_callstack +++ b/tests/regression/kernel/test_callstack @@ -33,12 +33,15 @@ function lttng_track_pid() function run_workload() { local TEST_APP=$1 + # shift the first argument, passing along the other args if any to the + # test app. + shift local start_file_sync start_file_sync=$(mktemp -u) lttng_untrack_all - ./"$TEST_APP" "$start_file_sync" & + ./"$TEST_APP" "$start_file_sync" "$@" & PID=$! lttng_track_pid $PID @@ -108,7 +111,7 @@ function test_kernel_callstack() lttng_enable_kernel_syscall_ok "$SESSION_NAME" "$EVENT_NAME" "$CHANNEL_NAME" add_context_kernel_ok "$SESSION_NAME" "$CHANNEL_NAME" "callstack-kernel" - run_workload $TEST_APP_KERNELSPACE + run_workload "$TEST_APP_KERNELSPACE" "/proc/cpuinfo" "/proc/cmdline" destroy_lttng_session_ok "$SESSION_NAME" diff --git a/tests/regression/kernel/test_syscall b/tests/regression/kernel/test_syscall index 9ce40dcc5..69a2bab8f 100755 --- a/tests/regression/kernel/test_syscall +++ b/tests/regression/kernel/test_syscall @@ -27,7 +27,7 @@ function trace_testapp() lttng_untrack_kernel_all_ok # Launch the testapp and save its Process ID - ./"$TESTCMD" "$start_file_sync" & + ./"$TESTCMD" "$start_file_sync" "/proc/cpuinfo" "/proc/cmdline" & PID=$! # Set LTTng to track this PID and start the tracing diff --git a/tests/utils/testapp/gen-syscall-events/gen-syscall-events.c b/tests/utils/testapp/gen-syscall-events/gen-syscall-events.c index 1ec29139e..9ab650933 100644 --- a/tests/utils/testapp/gen-syscall-events/gen-syscall-events.c +++ b/tests/utils/testapp/gen-syscall-events/gen-syscall-events.c @@ -88,16 +88,19 @@ error: int main(int argc, char **argv) { int ret; - char *start_file; + const char *start_file, *path1, *path2; - if (argc != 2) { + if (argc != 4) { fprintf(stderr, "Error: Missing argument\n"); + fprintf(stderr, "USAGE: %s PATH_WAIT_FILE PATH1_TO_OPEN PATH2_TO_OPEN\n", argv[0]); fprintf(stderr, "USAGE: %s PATH_WAIT_FILE\n", argv[0]); ret = -1; goto error; } start_file = argv[1]; + path1 = argv[2]; + path2 = argv[3]; /* * Wait for the start_file to be created by an external process @@ -112,13 +115,13 @@ int main(int argc, char **argv) * Start generating syscalls. We use syscall(2) to prevent libc to change * the underlying syscall. e.g. calling openat(2) instead of open(2). */ - ret = open_read_close("/proc/cpuinfo"); + ret = open_read_close(path1); if (ret == -1) { ret = -1; goto error; } - ret = open_read_close("/proc/cmdline"); + ret = open_read_close(path2); if (ret == -1) { ret = -1; goto error;