#11251: riscv64: SIGILL on hardware without the zbb extension
-------------------------------------+-------------------------------------
Reporter: Steven | Type: defect
Keuchel |
Status: new | Priority: normal
Component: | Version:
undetermined | unspecified
Keywords: | Blocked By:
Blocking: | Reproduced by developer: 0
Analyzed by developer: 0 |
-------------------------------------+-------------------------------------
Summary:
Compiling ffmpeg for riscv64 and running the testsuite on hardware that
does not support the zbb extensions results in a failure of
libavutil/tests/integer which crashes with a SIGILL. GDB
{{{
Program received signal SIGILL, Illegal instruction.
ff_log2_rv (x=<optimized out>) at ./libavutil/riscv/intmath.h:191
191 return 31 - ff_clz_rv(x | 1);
(gdb) bt
#0 ff_log2_rv (x=<optimized out>) at ./libavutil/riscv/intmath.h:191
#1 main () at libavutil/tests/integer.c:44
(gdb) disass $pc-32,$pc+32
Dump of assembler code from 0x2aaaab05e4 to 0x2aaaab0624:
0x0000002aaaab05e4 <main+114>: auipc s6,0x32
0x0000002aaaab05e8 <main+118>: addi s6,s6,-372 # 0x2aaaae2470
<ff_rv_zbb_supported>
0x0000002aaaab05ec <main+122>: addi s8,s8,-1554
0x0000002aaaab05f0 <main+126>: addi s7,s7,637
0x0000002aaaab05f4 <main+130>: mv s9,a2
0x0000002aaaab05f6 <main+132>: sd t3,24(sp)
0x0000002aaaab05f8 <main+134>: sd t1,32(sp)
0x0000002aaaab05fa <main+136>: sd a7,40(sp)
0x0000002aaaab05fc <main+138>: sd a6,48(sp)
0x0000002aaaab05fe <main+140>: sd t6,56(sp)
0x0000002aaaab0600 <main+142>: ori a5,s10,1
=> 0x0000002aaaab0604 <main+146>: .insn 4, 0x6007971b
0x0000002aaaab0608 <main+150>: slli a5,a5,0x20
0x0000002aaaab060a <main+152>: srli a5,a5,0x20
0x0000002aaaab060c <main+154>: sd a5,0(sp)
0x0000002aaaab060e <main+156>: sext.w a5,a4
0x0000002aaaab0612 <main+160>: srai s3,s10,0x9
0x0000002aaaab0616 <main+164>: srai s4,s10,0x11
0x0000002aaaab061a <main+168>: mv s2,s9
0x0000002aaaab061c <main+170>: li s0,3
0x0000002aaaab061e <main+172>: sd a5,8(sp)
0x0000002aaaab0620 <main+174>: sd s9,16(sp)
0x0000002aaaab0622 <main+176>: j 0x2aaaab068c <main+282>
End of assembler dump.
(gdb) i r
ra 0x3ff7df97cc 0x3ff7df97cc <__libc_start_call_main+96>
sp 0x3ffffff080 0x3ffffff080
gp 0x2aaaae2800 0x2aaaae2800 <buffer+896>
tp 0x3ff7dd0780 0x3ff7dd0780
t0 0x2aaaabd82a 183252015146
t1 0x155c34d2 358364370
t2 0xa46 2630
fp 0x3ffffff310 0x3ffffff310
s1 0xe00 3584
a0 0x1 1
a1 0x3ffffff378 274877903736
a2 0x15 21
a3 0x0 0
a4 0x3ff7ffdd08 274743680264
a5 0x7 7
a6 0x9add 39645
a7 0x673e00 6766080
s2 0x1 1
s3 0x0 0
s4 0x2aaaad9388 183252128648
s5 0xe0000 917504
s6 0x2aaaae2470 183252165744
s7 0x100227d 16786045
s8 0x69ee 27118
s9 0x15 21
s10 0x7 7
s11 0x2e582 189826
t3 0x339f 13215
t4 0x0 0
t5 0x3 3
t6 0x10016d1 16783057
pc 0x2aaaab0604 0x2aaaab0604 <main+146>
(gdb) print ff_rv_zbb_supported
$1 = 0 '\000'
}}}
The offending instruction {{{.insn 4, 0x6007971b}}} gdb has trouble
decoding is {{{clzw a4,a5}}} which is part of the zbb extension to the
RISC-V ISA. It seems the branching of the runtime check for the
availability of the zbb extensions has been compiled away and that
instruction is always executed even when not supported by the hardware.
Steps to reproduce (on hardware without zbb):
{{{
./configure
make fate-integer
}}}
Version:
{{{
ffmpeg version N-117612-gc98810ab47 Copyright (c) 2000-2024 the FFmpeg
developers
built with gcc 13 (Ubuntu 13.2.0-23ubuntu4)
}}}
--
Ticket URL: <https://trac.ffmpeg.org/ticket/11251>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker
_______________________________________________
FFmpeg-trac mailing list
FFmpeg-trac@avcodec.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-trac
To unsubscribe, visit link above, or email
ffmpeg-trac-requ...@ffmpeg.org with subject "unsubscribe".