The fp-stress load programs all start up with some startup code which installs signal handlers and fetches and reports the current PID into x20. In order to facilitate running as KVM guests and reduce duplication factor this code out into a asm-utils-linux.S, making the per-test entry point main() similarly to more normal environments. As the irritator_handler varies per test they are left in place.
Since the PID is now reported before main() runs it is printed before rather than after the vector length for those programs that report one, fp-stress does not parse the output so this has no impact. Since asm-utils is also used by fp-pidbench that also gets converted to the new _start implementation, this will install some signal handlers that were not previously there and report a PID which was not previously reported but should otherwise have no impact. Since it does not need an irritator none is provided and a weak definition left in asm-utils-linux.S, this will end up as 0 which happens to be SIG_DFL which is what we would have anyway. Signed-off-by: Mark Brown <[email protected]> --- tools/testing/selftests/arm64/fp/asm-utils-linux.S | 87 ++++++++++++++++++++++ tools/testing/selftests/arm64/fp/fp-pidbench.S | 6 +- tools/testing/selftests/arm64/fp/fpsimd-test.S | 76 +------------------ tools/testing/selftests/arm64/fp/sve-test.S | 76 +------------------ tools/testing/selftests/arm64/fp/za-test.S | 75 +------------------ tools/testing/selftests/arm64/fp/zt-test.S | 75 +------------------ 6 files changed, 106 insertions(+), 289 deletions(-) diff --git a/tools/testing/selftests/arm64/fp/asm-utils-linux.S b/tools/testing/selftests/arm64/fp/asm-utils-linux.S index 9cd31dc47709..9519be4d8f1e 100644 --- a/tools/testing/selftests/arm64/fp/asm-utils-linux.S +++ b/tools/testing/selftests/arm64/fp/asm-utils-linux.S @@ -92,3 +92,90 @@ function exit_error svc #0 endfunction .globl exit_error + +// Install a signal handler +// +// w0: signal number +// x1: sa_action +// w2: sa_flags +// Clobbers x0-x6,x8 +function setsignal + str x30, [sp, #-((sa_sz + 15) / 16 * 16 + 16)]! + + mov w4, w0 + mov x5, x1 + mov w6, w2 + + add x0, sp, #16 + mov x1, #sa_sz + bl memclr + + mov w0, w4 + add x1, sp, #16 + str w6, [x1, #sa_flags] + str x5, [x1, #sa_handler] + mov x2, #0 + mov x3, #sa_mask_sz + mov x8, #__NR_rt_sigaction + svc #0 + + cbz w0, 1f + + puts "sigaction failure\n" + b exit_error + +1: ldr x30, [sp], #((sa_sz + 15) / 16 * 16 + 16) + ret +endfunction +.globl setsignal + +// Programs which want to be interrupted by SIGUSR1 provide an +// irritator_handler(), for those that don't the signal is left alone. +.weak irritator_handler + +// Main program entry point. Install the signal handlers shared by the +// programs, zeroing the signal count in x23 that the handlers maintain, +// read and report the PID the programs use for uniqueness in x20, then +// run the program specific main(). +.globl _start +function _start + enable_gcs + + mov x23, #0 // signal count + + mov w0, #SIGINT + adr x1, terminate_handler + mov w2, #SA_SIGINFO + bl setsignal + + mov w0, #SIGTERM + adr x1, terminate_handler + mov w2, #SA_SIGINFO + bl setsignal + + // Load as a literal, adr can't reference the symbol when the + // program provides no handler and it resolves to 0 + ldr x1, =irritator_handler + cbz x1, 1f + mov w0, #SIGUSR1 + mov w2, #SA_SIGINFO + orr w2, w2, #SA_NODEFER + bl setsignal + +1: mov w0, #SIGUSR2 + adr x1, tickle_handler + mov w2, #SA_SIGINFO + orr w2, w2, #SA_NODEFER + bl setsignal + + // Obtain our PID, to ensure test pattern uniqueness between processes + mov x8, #__NR_getpid + svc #0 + mov x20, x0 + + puts "PID:\t" + mov x0, x20 + bl putdecn + + b main +endfunction diff --git a/tools/testing/selftests/arm64/fp/fp-pidbench.S b/tools/testing/selftests/arm64/fp/fp-pidbench.S index 881dfa3b342e..80f45560290d 100644 --- a/tools/testing/selftests/arm64/fp/fp-pidbench.S +++ b/tools/testing/selftests/arm64/fp/fp-pidbench.S @@ -28,9 +28,9 @@ puts "\n" .endm -// Main program entry point -.globl _start -function _start +// Program specific main function +.globl main +function main puts "Iterations per test: " mov x20, #10000 lsl x20, x20, #12 diff --git a/tools/testing/selftests/arm64/fp/fpsimd-test.S b/tools/testing/selftests/arm64/fp/fpsimd-test.S index fcbb3a872490..df040283d076 100644 --- a/tools/testing/selftests/arm64/fp/fpsimd-test.S +++ b/tools/testing/selftests/arm64/fp/fpsimd-test.S @@ -148,69 +148,11 @@ function irritator_handler ret endfunction +.globl irritator_handler -// w0: signal number -// x1: sa_action -// w2: sa_flags -// Clobbers x0-x6,x8 -function setsignal - str x30, [sp, #-((sa_sz + 15) / 16 * 16 + 16)]! - - mov w4, w0 - mov x5, x1 - mov w6, w2 - - add x0, sp, #16 - mov x1, #sa_sz - bl memclr - - mov w0, w4 - add x1, sp, #16 - str w6, [x1, #sa_flags] - str x5, [x1, #sa_handler] - mov x2, #0 - mov x3, #sa_mask_sz - mov x8, #__NR_rt_sigaction - svc #0 - - cbz w0, 1f - - puts "sigaction failure\n" - b exit_error - -1: ldr x30, [sp], #((sa_sz + 15) / 16 * 16 + 16) - ret -endfunction - -// Main program entry point -.globl _start -function _start - enable_gcs - - mov x23, #0 // signal count - - mov w0, #SIGINT - adr x1, terminate_handler - mov w2, #SA_SIGINFO - bl setsignal - - mov w0, #SIGTERM - adr x1, terminate_handler - mov w2, #SA_SIGINFO - bl setsignal - - mov w0, #SIGUSR1 - adr x1, irritator_handler - mov w2, #SA_SIGINFO - orr w2, w2, #SA_NODEFER - bl setsignal - - mov w0, #SIGUSR2 - adr x1, tickle_handler - mov w2, #SA_SIGINFO - orr w2, w2, #SA_NODEFER - bl setsignal - +// Program specific main function +.globl main +function main // Sanity-check and report the vector length mov x19, #128 @@ -231,16 +173,6 @@ function _start bl putdec puts " bits\n" - // Obtain our PID, to ensure test pattern uniqueness between processes - - mov x8, #__NR_getpid - svc #0 - mov x20, x0 - - puts "PID:\t" - mov x0, x20 - bl putdecn - mov x22, #0 // generation number, increments per iteration .Ltest_loop: diff --git a/tools/testing/selftests/arm64/fp/sve-test.S b/tools/testing/selftests/arm64/fp/sve-test.S index 88c3220caf7c..c7d9514f964e 100644 --- a/tools/testing/selftests/arm64/fp/sve-test.S +++ b/tools/testing/selftests/arm64/fp/sve-test.S @@ -316,69 +316,11 @@ function irritator_handler ret endfunction +.globl irritator_handler -// w0: signal number -// x1: sa_action -// w2: sa_flags -// Clobbers x0-x6,x8 -function setsignal - str x30, [sp, #-((sa_sz + 15) / 16 * 16 + 16)]! - - mov w4, w0 - mov x5, x1 - mov w6, w2 - - add x0, sp, #16 - mov x1, #sa_sz - bl memclr - - mov w0, w4 - add x1, sp, #16 - str w6, [x1, #sa_flags] - str x5, [x1, #sa_handler] - mov x2, #0 - mov x3, #sa_mask_sz - mov x8, #__NR_rt_sigaction - svc #0 - - cbz w0, 1f - - puts "sigaction failure\n" - b exit_error - -1: ldr x30, [sp], #((sa_sz + 15) / 16 * 16 + 16) - ret -endfunction - -// Main program entry point -.globl _start -function _start - enable_gcs - - mov x23, #0 // Irritation signal count - - mov w0, #SIGINT - adr x1, terminate_handler - mov w2, #SA_SIGINFO - bl setsignal - - mov w0, #SIGTERM - adr x1, terminate_handler - mov w2, #SA_SIGINFO - bl setsignal - - mov w0, #SIGUSR1 - adr x1, irritator_handler - mov w2, #SA_SIGINFO - orr w2, w2, #SA_NODEFER - bl setsignal - - mov w0, #SIGUSR2 - adr x1, tickle_handler - mov w2, #SA_SIGINFO - orr w2, w2, #SA_NODEFER - bl setsignal - +// Program specific main function +.globl main +function main #ifdef SSVE puts "Streaming mode " smstart_sm @@ -404,16 +346,6 @@ function _start bl putdec puts " bits\n" - // Obtain our PID, to ensure test pattern uniqueness between processes - - mov x8, #__NR_getpid - svc #0 - mov x20, x0 - - puts "PID:\t" - mov x0, x20 - bl putdecn - #ifdef SSVE smstart_sm // syscalls will have exited streaming mode #endif diff --git a/tools/testing/selftests/arm64/fp/za-test.S b/tools/testing/selftests/arm64/fp/za-test.S index 4a5b4b37d475..a0165a81a937 100644 --- a/tools/testing/selftests/arm64/fp/za-test.S +++ b/tools/testing/selftests/arm64/fp/za-test.S @@ -161,69 +161,11 @@ function irritator_handler ret endfunction +.globl irritator_handler -// w0: signal number -// x1: sa_action -// w2: sa_flags -// Clobbers x0-x6,x8 -function setsignal - str x30, [sp, #-((sa_sz + 15) / 16 * 16 + 16)]! - - mov w4, w0 - mov x5, x1 - mov w6, w2 - - add x0, sp, #16 - mov x1, #sa_sz - bl memclr - - mov w0, w4 - add x1, sp, #16 - str w6, [x1, #sa_flags] - str x5, [x1, #sa_handler] - mov x2, #0 - mov x3, #sa_mask_sz - mov x8, #__NR_rt_sigaction - svc #0 - - cbz w0, 1f - - puts "sigaction failure\n" - b exit_error - -1: ldr x30, [sp], #((sa_sz + 15) / 16 * 16 + 16) - ret -endfunction - -// Main program entry point -.globl _start -function _start - enable_gcs - - mov x23, #0 // signal count - - mov w0, #SIGINT - adr x1, terminate_handler - mov w2, #SA_SIGINFO - bl setsignal - - mov w0, #SIGTERM - adr x1, terminate_handler - mov w2, #SA_SIGINFO - bl setsignal - - mov w0, #SIGUSR1 - adr x1, irritator_handler - mov w2, #SA_SIGINFO - orr w2, w2, #SA_NODEFER - bl setsignal - - mov w0, #SIGUSR2 - adr x1, tickle_handler - mov w2, #SA_SIGINFO - orr w2, w2, #SA_NODEFER - bl setsignal - +// Program specific main function +.globl main +function main puts "Streaming mode " smstart_za @@ -247,15 +189,6 @@ function _start bl putdec puts " bits\n" - // Obtain our PID, to ensure test pattern uniqueness between processes - mov x8, #__NR_getpid - svc #0 - mov x20, x0 - - puts "PID:\t" - mov x0, x20 - bl putdecn - mov x22, #0 // generation number, increments per iteration .Ltest_loop: rdsvl 0, 8 diff --git a/tools/testing/selftests/arm64/fp/zt-test.S b/tools/testing/selftests/arm64/fp/zt-test.S index 82a76bb2307a..1c7db1298fb1 100644 --- a/tools/testing/selftests/arm64/fp/zt-test.S +++ b/tools/testing/selftests/arm64/fp/zt-test.S @@ -130,80 +130,13 @@ function irritator_handler ret endfunction +.globl irritator_handler -// w0: signal number -// x1: sa_action -// w2: sa_flags -// Clobbers x0-x6,x8 -function setsignal - str x30, [sp, #-((sa_sz + 15) / 16 * 16 + 16)]! - - mov w4, w0 - mov x5, x1 - mov w6, w2 - - add x0, sp, #16 - mov x1, #sa_sz - bl memclr - - mov w0, w4 - add x1, sp, #16 - str w6, [x1, #sa_flags] - str x5, [x1, #sa_handler] - mov x2, #0 - mov x3, #sa_mask_sz - mov x8, #__NR_rt_sigaction - svc #0 - - cbz w0, 1f - - puts "sigaction failure\n" - b exit_error - -1: ldr x30, [sp], #((sa_sz + 15) / 16 * 16 + 16) - ret -endfunction - -// Main program entry point -.globl _start -function _start - enable_gcs - - mov x23, #0 // signal count - - mov w0, #SIGINT - adr x1, terminate_handler - mov w2, #SA_SIGINFO - bl setsignal - - mov w0, #SIGTERM - adr x1, terminate_handler - mov w2, #SA_SIGINFO - bl setsignal - - mov w0, #SIGUSR1 - adr x1, irritator_handler - mov w2, #SA_SIGINFO - orr w2, w2, #SA_NODEFER - bl setsignal - - mov w0, #SIGUSR2 - adr x1, tickle_handler - mov w2, #SA_SIGINFO - orr w2, w2, #SA_NODEFER - bl setsignal - +// Program specific main function +.globl main +function main smstart_za - // Obtain our PID, to ensure test pattern uniqueness between processes - mov x8, #__NR_getpid - svc #0 - mov x20, x0 - - puts "PID:\t" - mov x0, x20 - bl putdecn - mov x22, #0 // generation number, increments per iteration .Ltest_loop: mov x0, x20 -- 2.47.3

