[all-commits] [llvm/llvm-project] eb1b9f: [lldb][LoongArch] Fix the incorrect floating-point...
wanglei via All-commits
all-commits at lists.llvm.org
Thu Dec 19 17:03:31 PST 2024
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: eb1b9fca9ca66d051179d8d2f35edb4624118b26
https://github.com/llvm/llvm-project/commit/eb1b9fca9ca66d051179d8d2f35edb4624118b26
Author: wanglei <wanglei at loongson.cn>
Date: 2024-12-20 (Fri, 20 Dec 2024)
Changed paths:
M lldb/source/Utility/LoongArch_DWARF_Registers.h
Log Message:
-----------
[lldb][LoongArch] Fix the incorrect floating-point register dwarf number
According to the documentation described at
https://github.com/loongson/la-abi-specs/blob/release/ladwarf.adoc, the
dwarf numbers for floating-point registers range from 32 to 63.
An incorrect dwarf number will prevent the register values from being
properly restored during unwinding.
This test reflects this problem:
```
loongson at linux:~$ cat test.c
void foo() {
asm volatile ("movgr2fr.d $fs2, $ra":::"$fs2");
}
int main() {
asm volatile ("movgr2fr.d $fs2, $sp":::"$fs2");
foo();
return 0;
}
loongson at linux:~$ clang -g test.c -o test
```
Without this patch:
```
loongson at linux:~$ ./_build/bin/lldb ./t
(lldb) target create "./t"
Current executable set to
'/home/loongson/llvm-project/_build_lldb/t' (loongarch64).
(lldb) b foo
Breakpoint 1: where = t`foo + 20 at test.c:4:1, address =
0x0000000000000714
(lldb) r
Process 2455626 launched: '/home/loongson/llvm-project/_build_lldb/t' (loongarch64)
Process 2455626 stopped
* thread #1, name = 't', stop reason = breakpoint 1.1
frame #0: 0x0000555555554714 t`foo at test.c:4:1
1 #include <stdio.h>
2
3 void foo() {
-> 4 asm volatile ("movgr2fr.d $fs2, $ra":::"$fs2");
5 }
6 int main() {
7 asm volatile ("movgr2fr.d $fs2, $sp":::"$fs2");
(lldb) si
Process 2455626 stopped
* thread #1, name = 't', stop reason = instruction step into
frame #0: 0x0000555555554718 t`foo at test.c:4:1
1 #include <stdio.h>
2
3 void foo() {
-> 4 asm volatile ("movgr2fr.d $fs2, $ra":::"$fs2");
5 }
6 int main() {
7 asm volatile ("movgr2fr.d $fs2, $sp":::"$fs2");
(lldb) f 1
frame #1: 0x0000555555554768 t`main at test.c:8:1
5 }
6 int main() {
7 asm volatile ("movgr2fr.d $fs2, $sp":::"$fs2");
-> 8 foo();
9 return 0;
10 }
(lldb) register read -a
General Purpose Registers:
r1 = 0x0000555555554768 t`main + 40 at test.c:8:1
r3 = 0x00007ffffffef780
r22 = 0x00007ffffffef7b0
r23 = 0x00007ffffffef918
r24 = 0x0000000000000001
r25 = 0x0000000000000000
r26 = 0x000055555555be08 t`__do_global_dtors_aux_fini_array_entry
r27 = 0x0000555555554740 t`main at test.c:6
r28 = 0x00007ffffffef928
r29 = 0x00007ffff7febc88 ld-linux-loongarch-lp64d.so.1`_rtld_global_ro
r30 = 0x000055555555be08 t`__do_global_dtors_aux_fini_array_entry
pc = 0x0000555555554768 t`main + 40 at test.c:8:1
33 registers were unavailable.
Floating Point Registers:
f13 = 0x00007ffffffef780 !!!!! wrong register
f24 = 0xffffffffffffffff
f25 = 0xffffffffffffffff
f26 = 0x0000555555554768 t`main + 40 at test.c:8:1
f27 = 0xffffffffffffffff
f28 = 0xffffffffffffffff
f29 = 0xffffffffffffffff
f30 = 0xffffffffffffffff
f31 = 0xffffffffffffffff
32 registers were unavailable.
```
With this patch:
```
The previous operations are the same.
(lldb) register read -a
General Purpose Registers:
r1 = 0x0000555555554768 t`main + 40 at test.c:8:1
r3 = 0x00007ffffffef780
r22 = 0x00007ffffffef7b0
r23 = 0x00007ffffffef918
r24 = 0x0000000000000001
r25 = 0x0000000000000000
r26 = 0x000055555555be08 t`__do_global_dtors_aux_fini_array_entry
r27 = 0x0000555555554740 t`main at test.c:6
r28 = 0x00007ffffffef928
r29 = 0x00007ffff7febc88 ld-linux-loongarch-lp64d.so.1`_rtld_global_ro
r30 = 0x000055555555be08 t`__do_global_dtors_aux_fini_array_entry
pc = 0x0000555555554768 t`main + 40 at test.c:8:1
33 registers were unavailable.
Floating Point Registers:
f24 = 0xffffffffffffffff
f25 = 0xffffffffffffffff
f26 = 0x00007ffffffef780
f27 = 0xffffffffffffffff
f28 = 0xffffffffffffffff
f29 = 0xffffffffffffffff
f30 = 0xffffffffffffffff
f31 = 0xffffffffffffffff
33 registers were unavailable.
```
Reviewed By: SixWeining
Pull Request: https://github.com/llvm/llvm-project/pull/120391
To unsubscribe from these emails, change your notification settings at https://github.com/llvm/llvm-project/settings/notifications
More information about the All-commits
mailing list