DC-ROMA RISC-V Laptop II unavailable vector register in gdb

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.

On bianbu os, gdb apply some patches to support vector.
bianbu-gdb.zip contains the deb and patches, you can try the deb package or apply patches to build your own gdb

2 Likes

Thanks a lot!