Hello great developers,
I have DC-ROMA RISC-V Laptop II equipped with SpacemiT’s SoC K1. I am using gdb to observe vector registers’ status on it. But in gdb it shows vector register is unavailable.
I have an ELF coming from the following cross compilation cmd:
RISCV_GNU_TOOLCHAIN_DIR="/install"
#RISCV_GNU_TOOLCHAIN_DIR is riscv-toolchain installation path, `configure --prefix=/install --with-arch=rv64gcv --with-abi=lp64d`
CLANGPP="clang++ --target=riscv64-unknown-linux-gnu \
--sysroot=${RISCV_GNU_TOOLCHAIN_DIR}/sysroot \
--gcc-toolchain=${RISCV_GNU_TOOLCHAIN_DIR} \
-march=rv64gcv -mabi=lp64d \
-O2 -g"
# The following command is to compile from LLVM bit code and link necessary object files.
$CLANGPP \
-fPIC \
-c "${kernel_name}_kernel.bc" \
-o "${kernel_name}.o"
$CLANGPP \
-I "../env_build/include" \
-c "${kernel_launcher}" \
-fPIC \
-o "${launcher_name}.o"
$CLANGPP ${main} \
-I "../env_build/include" \
-L "${LIB_DIR}" \
-l"${lib_name}" \
-lsupport \
-latomic \
-std=c++17 \
-fPIC \
-o "${OUT_ELF_DIR}/${kernel_name}.elf"
Then I use gdb like this:
aicompiler@aicompiler:~/work/riscv_test$ gdb _matmul_8_32_8_g.elf
GNU gdb (Ubuntu 15.0.50.20240403-0ubuntu1bb1) 15.0.50.20240403-git
Copyright (C) 2024 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "riscv64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<https://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from _matmul_8_32_8_g.elf...
(gdb) b *0x0000002aaaaac9fe
Breakpoint 1 at 0x2aaaaac9fe
(gdb) r
Starting program: /home/aicompiler/work/riscv_test/_matmul_8_32_8_g.elf
This GDB supports auto-downloading debuginfo from the following URLs:
<https://debuginfod.ubuntu.com>
Enable debuginfod for this session? (y or [n]) n
Debuginfod has been disabled.
To make this setting permanent, add 'set debuginfod enabled off' to .gdbinit.
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/riscv64-linux-gnu/libthread_db.so.1".
Data shape 128x128x128x10
Breakpoint 1, 0x0000002aaaaac9fe in matmul_kernel () at matmul.py:217
warning: 217 matmul.py: No such file or directory
(gdb) set disassemble-next-line on
...
(gdb) ni
0x0000002aaaaaca16 217 in matmul.py
0x0000002aaaaac9ec <matmul_kernel+210>: 00534463 blt t1,t0,0x2aaaaac9f4 <matmul_kernel+218>
0x0000002aaaaac9f0 <matmul_kernel+214>: 6b80606f j 0x2aaaab30a8 <matmul_kernel+26510>
0x0000002aaaaac9f4 <matmul_kernel+218>: fc32 sd a2,56(sp)
0x0000002aaaaac9f6 <matmul_kernel+220>: e4fa sd t5,72(sp)
0x0000002aaaaac9f8 <matmul_kernel+222>: e8f6 sd t4,80(sp)
0x0000002aaaaac9fa <matmul_kernel+224>: ecfe sd t6,88(sp)
0x0000002aaaaac9fc <matmul_kernel+226>: 4e81 li t4,0
0x0000002aaaaac9fe <matmul_kernel+228>: c2202673 csrr a2,vlenb
0x0000002aaaaaca02 <matmul_kernel+232>: 0606 slli a2,a2,0x1
0x0000002aaaaaca04 <matmul_kernel+234>: 960a add a2,a2,sp
0x0000002aaaaaca06 <matmul_kernel+236>: 6285 lui t0,0x1
0x0000002aaaaaca08 <matmul_kernel+238>: 7c02829b addiw t0,t0,1984 # 0x17c0
0x0000002aaaaaca0c <matmul_kernel+242>: 9616 add a2,a2,t0
0x0000002aaaaaca0e <matmul_kernel+244>: e2860027 vs8r.v v0,(a2)
0x0000002aaaaaca12 <matmul_kernel+248>: 9e03b857 vmv8r.v v16,v0
=> 0x0000002aaaaaca16 <matmul_kernel+252>: e0ba sd a4,64(sp)
(gdb) ni
206 in matmul.py
=> 0x0000002aaaaaca18 <matmul_kernel+254>: 8e076857 vrem.vx v16,v0,a4
(gdb) info register v
vstart <unavailable>
vxsat <unavailable>
vxrm <unavailable>
vcsr <unavailable>
vl <unavailable>
vtype <unavailable>
vlenb <unavailable>
v0 {q = {<unavailable>, <unavailable>}, l = {<unavailable>, <unavailable>,
<unavailable>, <unavailable>}, w = {<unavailable>, <unavailable>, <unavailable>,
<unavailable>, <unavailable>, <unavailable>, <unavailable>, <unavailable>}, s = {
<unavailable> <repeats 16 times>}, b = {<unavailable> <repeats 32 times>}}
v1 {q = {<unavailable>, <unavailable>}, l = {<unavailable>, <unavailable>,
<unavailable>, <unavailable>}, w = {<unavailable>, <unavailable>, <unavailable>,
<unavailable>, <unavailable>, <unavailable>, <unavailable>, <unavailable>}, s = {
<unavailable> <repeats 16 times>}, b = {<unavailable> <repeats 32 times>}}
v2 {q = {<unavailable>, <unavailable>}, l = {<unavailable>, <unavailable>,
<unavailable>, <unavailable>}, w = {<unavailable>, <unavailable>, <unavailable>,
<unavailable>, <unavailable>, <unavailable>, <unavailable>, <unavailable>}, s = {
<unavailable> <repeats 16 times>}, b = {<unavailable> <repeats 32 times>}}
v3 {q = {<unavailable>, <unavailable>}, l = {<unavailable>, <unavailable>,
<unavailable>, <unavailable>}, w = {<unavailable>, <unavailable>, <unavailable>,
<unavailable>, <unavailable>, <unavailable>, <unavailable>, <unavailable>}, s = {
<unavailable> <repeats 16 times>}, b = {<unavailable> <repeats 32 times>}}
--Type <RET> for more, q to quit, c to continue without paging--
v4 {q = {<unavailable>, <unavailable>}, l = {<unavailable>, <unavailable>,
<unavailable>, <unavailable>}, w = {<unavailable>, <unavailable>, <unavailable>,
<unavailable>, <unavailable>, <unavailable>, <unavailable>, <unavailable>}, s = {
<unavailable> <repeats 16 times>}, b = {<unavailable> <repeats 32 times>}}
v5 {q = {<unavailable>, <unavailable>}, l = {<unavailable>, <unavailable>,
<unavailable>, <unavailable>}, w = {<unavailable>, <unavailable>, <unavailable>,
<unavailable>, <unavailable>, <unavailable>, <unavailable>, <unavailable>}, s = {
<unavailable> <repeats 16 times>}, b = {<unavailable> <repeats 32 times>}}
v6 {q = {<unavailable>, <unavailable>}, l = {<unavailable>, <unavailable>,
<unavailable>, <unavailable>}, w = {<unavailable>, <unavailable>, <unavailable>,
<unavailable>, <unavailable>, <unavailable>, <unavailable>, <unavailable>}, s = {
<unavailable> <repeats 16 times>}, b = {<unavailable> <repeats 32 times>}}
v7 {q = {<unavailable>, <unavailable>}, l = {<unavailable>, <unavailable>,
<unavailable>, <unavailable>}, w = {<unavailable>, <unavailable>, <unavailable>,
<unavailable>, <unavailable>, <unavailable>, <unavailable>, <unavailable>}, s = {
<unavailable> <repeats 16 times>}, b = {<unavailable> <repeats 32 times>}}
v8 {q = {<unavailable>, <unavailable>}, l = {<unavailable>, <unavailable>,
<unavailable>, <unavailable>}, w = {<unavailable>, <unavailable>, <unavailable>,
<unavailable>, <unavailable>, <unavailable>, <unavailable>, <unavailable>}, s = {
<unavailable> <repeats 16 times>}, b = {<unavailable> <repeats 32 times>}}
v9 {q = {<unavailable>, <unavailable>}, l = {<unavailable>, <unavailable>,
<unavailable>, <unavailable>}, w = {<unavailable>, <unavailable>, <unavailable>,
<unavailable>, <unavailable>, <unavailable>, <unavailable>, <unavailable>}, s = {
--Type <RET> for more, q to quit, c to continue without paging--
<unavailable> <repeats 16 times>}, b = {<unavailable> <repeats 32 times>}}
v10 {q = {<unavailable>, <unavailable>}, l = {<unavailable>, <unavailable>,
<unavailable>, <unavailable>}, w = {<unavailable>, <unavailable>, <unavailable>,
<unavailable>, <unavailable>, <unavailable>, <unavailable>, <unavailable>}, s = {
<unavailable> <repeats 16 times>}, b = {<unavailable> <repeats 32 times>}}
v11 {q = {<unavailable>, <unavailable>}, l = {<unavailable>, <unavailable>,
<unavailable>, <unavailable>}, w = {<unavailable>, <unavailable>, <unavailable>,
<unavailable>, <unavailable>, <unavailable>, <unavailable>, <unavailable>}, s = {
<unavailable> <repeats 16 times>}, b = {<unavailable> <repeats 32 times>}}
v12 {q = {<unavailable>, <unavailable>}, l = {<unavailable>, <unavailable>,
<unavailable>, <unavailable>}, w = {<unavailable>, <unavailable>, <unavailable>,
<unavailable>, <unavailable>, <unavailable>, <unavailable>, <unavailable>}, s = {
<unavailable> <repeats 16 times>}, b = {<unavailable> <repeats 32 times>}}
v13 {q = {<unavailable>, <unavailable>}, l = {<unavailable>, <unavailable>,
<unavailable>, <unavailable>}, w = {<unavailable>, <unavailable>, <unavailable>,
<unavailable>, <unavailable>, <unavailable>, <unavailable>, <unavailable>}, s = {
<unavailable> <repeats 16 times>}, b = {<unavailable> <repeats 32 times>}}
v14 {q = {<unavailable>, <unavailable>}, l = {<unavailable>, <unavailable>,
<unavailable>, <unavailable>}, w = {<unavailable>, <unavailable>, <unavailable>,
<unavailable>, <unavailable>, <unavailable>, <unavailable>, <unavailable>}, s = {
<unavailable> <repeats 16 times>}, b = {<unavailable> <repeats 32 times>}}
v15 {q = {<unavailable>, <unavailable>}, l = {<unavailable>, <unavailable>,
<unavailable>, <unavailable>}, w = {<unavailable>, <unavailable>, <unavailable>,
--Type <RET> for more, q to quit, c to continue without paging--
<unavailable>, <unavailable>, <unavailable>, <unavailable>, <unavailable>}, s = {
<unavailable> <repeats 16 times>}, b = {<unavailable> <repeats 32 times>}}
v16 {q = {<unavailable>, <unavailable>}, l = {<unavailable>, <unavailable>,
<unavailable>, <unavailable>}, w = {<unavailable>, <unavailable>, <unavailable>,
<unavailable>, <unavailable>, <unavailable>, <unavailable>, <unavailable>}, s = {
<unavailable> <repeats 16 times>}, b = {<unavailable> <repeats 32 times>}}
v17 {q = {<unavailable>, <unavailable>}, l = {<unavailable>, <unavailable>,
<unavailable>, <unavailable>}, w = {<unavailable>, <unavailable>, <unavailable>,
<unavailable>, <unavailable>, <unavailable>, <unavailable>, <unavailable>}, s = {
<unavailable> <repeats 16 times>}, b = {<unavailable> <repeats 32 times>}}
v18 {q = {<unavailable>, <unavailable>}, l = {<unavailable>, <unavailable>,
<unavailable>, <unavailable>}, w = {<unavailable>, <unavailable>, <unavailable>,
<unavailable>, <unavailable>, <unavailable>, <unavailable>, <unavailable>}, s = {
<unavailable> <repeats 16 times>}, b = {<unavailable> <repeats 32 times>}}
v19 {q = {<unavailable>, <unavailable>}, l = {<unavailable>, <unavailable>,
<unavailable>, <unavailable>}, w = {<unavailable>, <unavailable>, <unavailable>,
<unavailable>, <unavailable>, <unavailable>, <unavailable>, <unavailable>}, s = {
<unavailable> <repeats 16 times>}, b = {<unavailable> <repeats 32 times>}}
v20 {q = {<unavailable>, <unavailable>}, l = {<unavailable>, <unavailable>,
<unavailable>, <unavailable>}, w = {<unavailable>, <unavailable>, <unavailable>,
<unavailable>, <unavailable>, <unavailable>, <unavailable>, <unavailable>}, s = {
<unavailable> <repeats 16 times>}, b = {<unavailable> <repeats 32 times>}}
v21 {q = {<unavailable>, <unavailable>}, l = {<unavailable>, <unavailable>,
--Type <RET> for more, q to quit, c to continue without paging--
<unavailable>, <unavailable>}, w = {<unavailable>, <unavailable>, <unavailable>,
<unavailable>, <unavailable>, <unavailable>, <unavailable>, <unavailable>}, s = {
<unavailable> <repeats 16 times>}, b = {<unavailable> <repeats 32 times>}}
v22 {q = {<unavailable>, <unavailable>}, l = {<unavailable>, <unavailable>,
<unavailable>, <unavailable>}, w = {<unavailable>, <unavailable>, <unavailable>,
<unavailable>, <unavailable>, <unavailable>, <unavailable>, <unavailable>}, s = {
<unavailable> <repeats 16 times>}, b = {<unavailable> <repeats 32 times>}}
v23 {q = {<unavailable>, <unavailable>}, l = {<unavailable>, <unavailable>,
<unavailable>, <unavailable>}, w = {<unavailable>, <unavailable>, <unavailable>,
<unavailable>, <unavailable>, <unavailable>, <unavailable>, <unavailable>}, s = {
<unavailable> <repeats 16 times>}, b = {<unavailable> <repeats 32 times>}}
v24 {q = {<unavailable>, <unavailable>}, l = {<unavailable>, <unavailable>,
<unavailable>, <unavailable>}, w = {<unavailable>, <unavailable>, <unavailable>,
<unavailable>, <unavailable>, <unavailable>, <unavailable>, <unavailable>}, s = {
<unavailable> <repeats 16 times>}, b = {<unavailable> <repeats 32 times>}}
v25 {q = {<unavailable>, <unavailable>}, l = {<unavailable>, <unavailable>,
<unavailable>, <unavailable>}, w = {<unavailable>, <unavailable>, <unavailable>,
<unavailable>, <unavailable>, <unavailable>, <unavailable>, <unavailable>}, s = {
<unavailable> <repeats 16 times>}, b = {<unavailable> <repeats 32 times>}}
v26 {q = {<unavailable>, <unavailable>}, l = {<unavailable>, <unavailable>,
<unavailable>, <unavailable>}, w = {<unavailable>, <unavailable>, <unavailable>,
<unavailable>, <unavailable>, <unavailable>, <unavailable>, <unavailable>}, s = {
<unavailable> <repeats 16 times>}, b = {<unavailable> <repeats 32 times>}}
--Type <RET> for more, q to quit, c to continue without paging--
v27 {q = {<unavailable>, <unavailable>}, l = {<unavailable>, <unavailable>,
<unavailable>, <unavailable>}, w = {<unavailable>, <unavailable>, <unavailable>,
<unavailable>, <unavailable>, <unavailable>, <unavailable>, <unavailable>}, s = {
<unavailable> <repeats 16 times>}, b = {<unavailable> <repeats 32 times>}}
v28 {q = {<unavailable>, <unavailable>}, l = {<unavailable>, <unavailable>,
<unavailable>, <unavailable>}, w = {<unavailable>, <unavailable>, <unavailable>,
<unavailable>, <unavailable>, <unavailable>, <unavailable>, <unavailable>}, s = {
<unavailable> <repeats 16 times>}, b = {<unavailable> <repeats 32 times>}}
v29 {q = {<unavailable>, <unavailable>}, l = {<unavailable>, <unavailable>,
<unavailable>, <unavailable>}, w = {<unavailable>, <unavailable>, <unavailable>,
<unavailable>, <unavailable>, <unavailable>, <unavailable>, <unavailable>}, s = {
<unavailable> <repeats 16 times>}, b = {<unavailable> <repeats 32 times>}}
v30 {q = {<unavailable>, <unavailable>}, l = {<unavailable>, <unavailable>,
<unavailable>, <unavailable>}, w = {<unavailable>, <unavailable>, <unavailable>,
<unavailable>, <unavailable>, <unavailable>, <unavailable>, <unavailable>}, s = {
<unavailable> <repeats 16 times>}, b = {<unavailable> <repeats 32 times>}}
v31 {q = {<unavailable>, <unavailable>}, l = {<unavailable>, <unavailable>,
<unavailable>, <unavailable>}, w = {<unavailable>, <unavailable>, <unavailable>,
<unavailable>, <unavailable>, <unavailable>, <unavailable>, <unavailable>}, s = {
<unavailable> <repeats 16 times>}, b = {<unavailable> <repeats 32 times>}}
LLVM version:
yuhao@99-G1:~$ clang --version
clang version 18.1.8 (https://github.com/llvm/llvm-project.git 3b5b5c1ec4a3095ab096dd780e84d7ab81f3d7ff)
Target: riscv64-unknown-linux-gnu
Thread model: posix
InstalledDir: /opt/riscv/bin
My RISC-V laptop OS info:
aicompiler@aicompiler:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 24.04.1-V2.0.1 LTS
Release: 24.04
Codename: noble
aicompiler@aicompiler:~$ uname -a
Linux aicompiler 6.6.36 #2.0.1.2 SMP PREEMPT Fri Oct 25 12:34:10 UTC 2024 riscv64 riscv64 riscv64 GNU/Linux
Is it not supporting vector registers now?
Should I change the OS?(hope not because I guess it is pretty brutal for that laptop)
Or what mistakes I made?
Thank you.