summaryrefslogtreecommitdiff
path: root/tools/perf/scripts/python/bin/stackcollapse-report
diff options
context:
space:
mode:
authorDaniel Borkmann <daniel@iogearbox.net>2026-10-16 12:18:20 +0200
committerAlexei Starovoitov <ast@kernel.org>2026-10-16 17:45:11 +0000
commit4d8c247f1a21431a5cfb8c0237d5a35b7de4cc81 (patch)
tree5d3b004b6b5d0dce232261c93d1b2139c4fd67d3 /tools/perf/scripts/python/bin/stackcollapse-report
parentca201ad6e92a1924138e83ff966f7a091e3bbe6e (diff)
bpf, s390: Mask the count of 32-bit shifts by register
RFC9669 defines the shifts as dst <<= (src & mask), dst >>= (src & mask) and sign extending dst >>= (src & mask), where "shift operations use a mask of 0x3F (63) for 64-bit operations and 0x1F (31) for 32-bit operations" (Section 4.1), which the interpreter implements. On x86-64 and arm64 the hardware does so by itself, so both JITs emit the shift alone and conform. The 32-bit shifts by register of the s390x JIT do not conform to the spec. They emit sll, srl and sra with the count in the address of the second operand, of which the "rightmost six bits indicate the number of bit positions to be shifted" (z/Architecture Principles of Operation, SA22-7832-13), so a count of 32 to 63 clears the register, or fills it with the sign for sra, instead of shifting by the count masked with 31. The 64-bit sllg, srlg and srag take six bits as well, which is the mask there, so only the 32-bit forms differ. Put the count masked with 31 into %w1 and shift by that. A single risbg does the copy and the mask: it inserts bits 59 to 63 of the source into the same positions of %w1 and zeroes the rest, available since the general-instructions-extension facility of z10, below the z196 the JIT requires. One instruction more per shift by register, shifts by immediate are not affected since the verifier rejects a count at or beyond the width. # KERNEL_CMDLINE_EXTRA=nokaslr PLATFORM=s390x CROSS_COMPILE=s390x-linux-gnu- ./vmtest.sh -- \ ./test_progs -t jit_insns/shift_counts,jit_insns/shifts,jit_insns/alu_edges,jit_insns/calls [...] #191/8 jit_insns/alu_edges:OK #191/9 jit_insns/shifts:OK #191/10 jit_insns/shift_counts:OK #191/21 jit_insns/calls:OK #191/22 jit_insns/helper_calls:OK #191 jit_insns:OK #192/3 jit_insns_blinded/alu_edges:OK #192/5 jit_insns_blinded/shifts:OK #192 jit_insns_blinded:OK Summary: 2/7 PASSED, 0 SKIPPED, 0/0 FAILED Signed-off-by: Daniel Borkmann <daniel@iogearbox.net> Signed-off-by: Alexei Starovoitov <ast@kernel.org> Link: https://patch.msgid.link/20261016101822.632891-1-daniel@iogearbox.net
Diffstat (limited to 'tools/perf/scripts/python/bin/stackcollapse-report')
0 files changed, 0 insertions, 0 deletions