Skip to content

Commit

Permalink
[LLDB][LoongArch] Delete the s9 register alias definition
Browse files Browse the repository at this point in the history
In RegisterInfos_loongarch64.h, r22 is defined twice. Having an extra array
member causes problems reading and writing registers defined after r22. So,
for r22, keep the alias fp, delete the s9 alias.

The PC register is incorrectly accessed when the step command is executed.
The step command behavior is incorrect.

This test reflects this problem:

```
loongson@linux:~$ cat test.c

 #include <stdio.h>

int func(int a) {
  return a + 1;
}

int main(int argc, char const *argv[]) {
  func(10);
  return 0;
}

loongson@linux:~$ clang -g test.c  -o test

```

Without this patch:
```
loongson@linux:~$ llvm-project/llvm/build/bin/lldb test
(lldb) target create "test"
Current executable set to '/home/loongson/test' (loongarch64).
(lldb) b main
Breakpoint 1: where = test`main + 40 at test.c:8:3, address = 0x0000000120000668
(lldb) r
Process 278049 launched: '/home/loongson/test' (loongarch64)
Process 278049 stopped
* thread triSYCL#1, name = 'test', stop reason = breakpoint 1.1
    frame #0: 0x0000000120000668 test`main(argc=1, argv=0x00007fffffff72a8) at test.c:8:3
   5   	}
   6
   7   	int main(int argc, char const *argv[]) {
-> 8   	  func(10);
   9   	  return 0;
   10  	}
   11
(lldb) s
Process 278049 stopped
* thread triSYCL#1, name = 'test', stop reason = step in
    frame #0: 0x0000000120000670 test`main(argc=1, argv=0x00007fffffff72a8) at test.c:9:3
   6
   7   	int main(int argc, char const *argv[]) {
   8   	  func(10);
-> 9   	  return 0;
   10  	}

```

With this patch:

```
loongson@linux:~$ llvm-project/llvm/build/bin/lldb test
(lldb) target create "test"
Current executable set to '/home/loongson/test' (loongarch64).
(lldb) b main
Breakpoint 1: where = test`main + 40 at test.c:8:3, address = 0x0000000120000668
(lldb) r
Process 278632 launched: '/home/loongson/test' (loongarch64)
Process 278632 stopped
* thread triSYCL#1, name = 'test', stop reason = breakpoint 1.1
    frame #0: 0x0000000120000668 test`main(argc=1, argv=0x00007fffffff72a8) at test.c:8:3
   5   	}
   6
   7   	int main(int argc, char const *argv[]) {
-> 8   	  func(10);
   9   	  return 0;
   10  	}
   11
(lldb) s
Process 278632 stopped
* thread triSYCL#1, name = 'test', stop reason = step in
    frame #0: 0x0000000120000624 test`func(a=10) at test.c:4:10
   1   	 #include <stdio.h>
   2
   3   	int func(int a) {
-> 4   	  return a + 1;
   5   	}

```

Reviewed By: SixWeining, DavidSpickett

Differential Revision: https://reviews.llvm.org/D140615
  • Loading branch information
lhloongson authored and SixWeining committed Jan 14, 2023
1 parent 292019e commit b1f4f06
Show file tree
Hide file tree
Showing 3 changed files with 0 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,6 @@ static lldb_private::RegisterInfo g_register_infos_loongarch64[] = {
DEFINE_GPR64_ALT(r20, t8, LLDB_INVALID_REGNUM),
DEFINE_GPR64(r21, LLDB_INVALID_REGNUM),
DEFINE_GPR64_ALT(r22, fp, LLDB_REGNUM_GENERIC_FP),
DEFINE_GPR64_ALT(r22, s9, LLDB_REGNUM_GENERIC_FP),
DEFINE_GPR64_ALT(r23, s0, LLDB_INVALID_REGNUM),
DEFINE_GPR64_ALT(r24, s1, LLDB_INVALID_REGNUM),
DEFINE_GPR64_ALT(r25, s2, LLDB_INVALID_REGNUM),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,6 @@ enum {
gpr_t7_loongarch = gpr_r19_loongarch,
gpr_t8_loongarch = gpr_r20_loongarch,
gpr_fp_loongarch = gpr_r22_loongarch,
gpr_s9_loongarch = gpr_r22_loongarch,
gpr_s0_loongarch = gpr_r23_loongarch,
gpr_s1_loongarch = gpr_r24_loongarch,
gpr_s2_loongarch = gpr_r25_loongarch,
Expand Down
1 change: 0 additions & 1 deletion lldb/source/Utility/LoongArch_DWARF_Registers.h
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,6 @@ enum {
dwarf_gpr_t7 = dwarf_gpr_r19,
dwarf_gpr_t8 = dwarf_gpr_r20,
dwarf_gpr_fp = dwarf_gpr_r22,
dwarf_gpr_s9 = dwarf_gpr_r22,
dwarf_gpr_s0 = dwarf_gpr_r23,
dwarf_gpr_s1 = dwarf_gpr_r24,
dwarf_gpr_s2 = dwarf_gpr_r25,
Expand Down

0 comments on commit b1f4f06

Please sign in to comment.