]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commit
gdb: LoongArch: Add support for hardware breakpoint
authorHui Li <lihui@loongson.cn>
Tue, 11 Jun 2024 11:21:26 +0000 (19:21 +0800)
committerTiezhu Yang <yangtiezhu@loongson.cn>
Mon, 24 Jun 2024 21:50:29 +0000 (05:50 +0800)
commit6ced1278fc0078022f73d623702cf4582750f783
treed6cf7eb15ee11a375fac83a29e1ddc20c845577a
parentc1cdee0e2c1715718c1e6224038096142ccabe40
gdb: LoongArch: Add support for hardware breakpoint

LoongArch defines hardware watchpoint functions for fetch operations.
After the software configures the watchpoints for fetch, the processor
hardware will monitor the access addresses of the fetch operations and
trigger a watchpoint exception when the watchpoint setting conditions
are met.

Hardware watchpoints for fetch operations is used to implement hardware
breakpoint function on LoongArch. Refer to the following document for
hardware breakpoint.
https://loongson.github.io/LoongArch-Documentation/LoongArch-Vol1-EN.html#control-and-status-registers-related-to-watchpoints

A simple test is as follows:

lihui@bogon:~$ cat test.c
  #include <stdio.h>
  int a = 0;
  int main()
  {
        printf("start test\n");
        a = 1;
        printf("a = %d\n", a);
        printf("end test\n");
        return 0;
  }
lihui@bogon:~$ gcc -g test.c -o test

without this patch:

lihui@bogon:~$ gdb test
...
(gdb) start
...
Temporary breakpoint 1, main () at test.c:5
5               printf("start test\n");
(gdb) hbreak 8
No hardware breakpoint support in the target.

with this patch:

lihui@bogon:~$ gdb test
...
(gdb) start
...

Temporary breakpoint 1, main () at test.c:5
5               printf("start test\n");
(gdb) hbreak 8
Hardware assisted breakpoint 2 at 0x1200006ec: file test.c, line 8.
(gdb) c
Continuing.
start test
a = 1

Breakpoint 2, main () at test.c:8
8               printf("end test\n");
(gdb) c
Continuing.
end test
[Inferior 1 (process 25378) exited normally]

Signed-off-by: Hui Li <lihui@loongson.cn>
Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
gdb/loongarch-linux-nat.c
gdb/nat/loongarch-hw-point.c
gdb/nat/loongarch-hw-point.h
gdb/nat/loongarch-linux-hw-point.c
gdb/nat/loongarch-linux-hw-point.h
gdb/nat/loongarch-linux.c
include/elf/common.h