3 # Copyright (C) 2020 Jonathan Rajotte-Julien <jonathan.rajotte-julien@efficios.com>
5 # SPDX-License-Identifier: LGPL-2.1-only
7 GENERATOR_CURDIR
=$
(dirname "$0")/
8 GENERATOR_TESTDIR
=$GENERATOR_CURDIR/..
/..
/..
/
9 TESTAPP_PATH
=${TESTAPP_PATH:-"$GENERATOR_TESTDIR/utils/testapp"}
11 SYSCALL_TESTAPP_NAME
=${SYSCALL_TESTAPP_NAME:-"gen-syscall-events"}
12 SYSCALL_TESTAPP_BIN
=${SYSCALL_TESTAPP_BIN:-"$TESTAPP_PATH/$SYSCALL_TESTAPP_NAME/$SYSCALL_TESTAPP_NAME"}
14 USERSPACE_PROBE_ELF_TESTAPP_NAME
=${USERSPACE_PROBE_ELF_TESTAPP_NAME:-"userspace-probe-elf-binary"}
15 USERSPACE_PROBE_ELF_TESTAPP_BIN
=${USERSPACE_PROBE_ELF_TESTAPP_BIN:-"$TESTAPP_PATH/$USERSPACE_PROBE_ELF_TESTAPP_NAME/.libs/$USERSPACE_PROBE_ELF_TESTAPP_NAME"}
17 function generate_filter_events
20 /bin
/echo -n "$nr" > /proc
/lttng-test-filter-event
2> /dev
/null
23 function generate_syscalls
28 for i
in $
(seq 1 "$nr"); do
29 # Pass /dev/null so to generate the syscall right away.
30 $SYSCALL_TESTAPP_BIN /dev
/null
"$@"
34 function userspace_probe_testapp
39 for i
in $
(seq 1 "$nr"); do
40 # This userspace probe test has to instrument the actual elf
41 # binary and not the generated libtool wrapper. However, we
42 # can't invoke the wrapper either since it will re-link the test
43 # application binary on its first invocation, resulting in a new
44 # binary with an 'lt-*' prefix under the .libs folder. The
45 # relinking stage adds the .libs folder to the 'lt-*' binary's
48 # To ensure the binary (inode) that instrumented is the same as
49 # what is running, set LD_LIBRARY_PATH to find the .libs folder
50 # that contains the libfoo.so library and invoke the binary
52 LD_LIBRARY_PATH
="$LD_LIBRARY_PATH:$TESTDIR/utils/testapp/userspace-probe-elf-binary/.libs" $USERSPACE_PROBE_ELF_TESTAPP_BIN "$@"
56 function ust_event_generator_toggle_state
58 ust_event_generator_suspended
=$
((ust_event_generator_suspended
==0))
61 function generator_quit
66 # Note: Only one generator can be used at a time per domain type
67 function ust_event_generator_run_once_per_transition
69 # Used by the signal trap
70 ust_event_generator_suspended
=0
71 # Used by the signal trap for SIGUSR2 to end the generator
80 # Pass any of the remaining arguments to the generator.
83 trap ust_event_generator_toggle_state SIGUSR1
84 trap generator_quit SIGUSR2
86 while [ $generator_quit -ne 0 ]; do
87 if [[ $ust_event_generator_suspended -eq "1" ]]; then
89 # Reset the "run" state
92 elif [ "$run" = true
]; then
93 taskset
-c 0 "$test_app" -i "$nr_iter" -w "$nr_usec_wait" "$@"> /dev
/null
2>&1
95 if [[ -f $state_file ]]; then
96 rm -rf "$state_file" 2> /dev
/null
99 # Wait for a "suspend" to reset the run state
105 # Note: Only one generator can be used at a time per domain type
106 function ust_event_generator
108 # Used by the signal trap
109 ust_event_generator_suspended
=0
110 # Used by the signal trap for SIGUSR2 to end the generator
118 # Pass any of the remaining arguments to the generator.
121 trap ust_event_generator_toggle_state SIGUSR1
122 trap generator_quit SIGUSR2
124 while [ $generator_quit -ne 0 ]; do
125 if [[ $ust_event_generator_suspended -eq "1" ]]; then
127 # Reset the "run" state
130 taskset
-c 0 "$test_app" -i $nr_iter -w $nr_usec_wait "$@" > /dev
/null
2>&1
131 if [[ -f $state_file ]]; then
132 rm -rf "$state_file" 2> /dev
/null
138 function kernel_event_generator_toggle_state
140 kernel_event_generator_suspended
=$
((kernel_event_generator_suspended
==0))
143 function kernel_event_generator_run_once_per_transition
145 # Used by the signal trap
146 kernel_event_generator_suspended
=0
147 # Used by the signal trap for SIGUSR2 to end the generator
154 # Pass any of the remaining arguments to the generator.
158 trap kernel_event_generator_toggle_state SIGUSR1
159 trap generator_quit SIGUSR2
161 while [ $generator_quit -ne 0 ]; do
162 if [[ $kernel_event_generator_suspended -eq "1" ]]; then
166 elif [ "$run" = true
]; then
167 $generator "$nr_iter" "$@"
169 if [[ -f $state_file ]]; then
170 rm "$state_file" 2> /dev
/null
173 # Wait for a "suspend" to reset the run state
179 function kernel_event_generator
181 # Used by the signal trap
182 kernel_event_generator_suspended
=0
183 # Used by the signal trap for SIGUSR2 to end the generator
189 # Pass any of the remaining arguments to the generator.
192 trap kernel_event_generator_toggle_state SIGUSR1
193 trap generator_quit SIGUSR2
195 while [ $generator_quit -ne 0 ]; do
196 if [[ $kernel_event_generator_suspended -eq "1" ]]; then
201 if [[ -f $state_file ]]; then
202 rm "$state_file" 2> /dev
/null