Skip to content

Commit a4b842e

Browse files
committed
Show register names in DWARF unwind info.
Register context information was already being passed into the DWARFDebugFrame code that dumps unwind information but it wasn't being used. This change adds the ability to dump registers names of a valid MC register context was passed in and if it knows about the register. Updated the tests to use the newly returned register names. Differential Revision: https://reviews.llvm.org/D88767
1 parent 69f8740 commit a4b842e

File tree

6 files changed

+24
-11
lines changed

6 files changed

+24
-11
lines changed

llvm/lib/DebugInfo/DWARF/DWARFDebugFrame.cpp

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include "llvm/ADT/StringExtras.h"
1313
#include "llvm/ADT/StringRef.h"
1414
#include "llvm/BinaryFormat/Dwarf.h"
15+
#include "llvm/MC/MCRegisterInfo.h"
1516
#include "llvm/Support/Casting.h"
1617
#include "llvm/Support/Compiler.h"
1718
#include "llvm/Support/DataExtractor.h"
@@ -29,6 +30,18 @@
2930
using namespace llvm;
3031
using namespace dwarf;
3132

33+
static void printRegister(raw_ostream &OS, const MCRegisterInfo *MRI, bool IsEH,
34+
unsigned RegNum) {
35+
if (MRI) {
36+
if (Optional<unsigned> LLVMRegNum = MRI->getLLVMRegNum(RegNum, IsEH)) {
37+
if (const char *RegName = MRI->getName(*LLVMRegNum)) {
38+
OS << RegName;
39+
return;
40+
}
41+
}
42+
}
43+
OS << "reg" << RegNum;
44+
}
3245

3346
// See DWARF standard v3, section 7.23
3447
const uint8_t DWARF_CFI_PRIMARY_OPCODE_MASK = 0xc0;
@@ -268,7 +281,8 @@ void CFIProgram::printOperand(raw_ostream &OS, const MCRegisterInfo *MRI,
268281
OS << format(" %" PRId64 "*data_alignment_factor" , Operand);
269282
break;
270283
case OT_Register:
271-
OS << format(" reg%" PRId64, Operand);
284+
OS << ' ';
285+
printRegister(OS, MRI, IsEH, Operand);
272286
break;
273287
case OT_Expression:
274288
assert(Instr.Expression && "missing DWARFExpression object");

llvm/test/DebugInfo/RISCV/eh-frame.s

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ func:
2626
# FDECFIEncoding and should be DW_EH_PE_pcrel | DW_EH_PE_sdata4 (0x1b).
2727

2828
# CHECK: Augmentation data: 1B
29-
# CHECK: DW_CFA_def_cfa: reg2 +0
29+
# CHECK: DW_CFA_def_cfa: X2 +0
3030
#
3131
# CHECK: 00000014 00000010 00000018 FDE cie=00000000 pc=00000000...00000004
3232
# CHECK: DW_CFA_nop:

llvm/test/DebugInfo/dwarfdump-debug-frame-simple.test

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55

66
; FRAMES: 00000000 00000010 ffffffff CIE
77
; FRAMES: Version: 1
8-
; FRAMES: DW_CFA_def_cfa: reg4 +4
9-
; FRAMES-NEXT: DW_CFA_offset: reg8 -4
8+
; FRAMES: DW_CFA_def_cfa: ESP +4
9+
; FRAMES-NEXT: DW_CFA_offset: EIP -4
1010
; FRAMES-NEXT: DW_CFA_nop:
1111
; FRAMES-NEXT: DW_CFA_nop:
1212

@@ -18,9 +18,9 @@
1818
; FRAMES: 00000028 00000014 00000000 FDE cie=00000000 pc=00000030...00000080
1919
; FRAMES: DW_CFA_advance_loc: 1
2020
; FRAMES-NEXT: DW_CFA_def_cfa_offset: +8
21-
; FRAMES-NEXT: DW_CFA_offset: reg5 -8
21+
; FRAMES-NEXT: DW_CFA_offset: EBP -8
2222
; FRAMES-NEXT: DW_CFA_advance_loc: 2
23-
; FRAMES-NEXT: DW_CFA_def_cfa_register: reg5
23+
; FRAMES-NEXT: DW_CFA_def_cfa_register: EBP
2424

2525
; FRAMES-NOT: CIE
2626
; FRAMES-NOT: FDE

llvm/test/MC/ELF/cfi-restore-extended.s

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,11 @@ f:
66
nop
77
// CHECK: DW_CFA_advance_loc: 1
88
.cfi_restore %rbp
9-
// CHECK-NEXT: DW_CFA_restore: reg6
9+
// CHECK-NEXT: DW_CFA_restore: RBP
1010
nop
1111
// CHECK-NEXT: DW_CFA_advance_loc: 1
1212
.cfi_restore 89
1313
// CHECK-NEXT: DW_CFA_restore_extended: reg89
1414
// CHECK-NEXT: DW_CFA_nop:
1515
nop
1616
.cfi_endproc
17-

llvm/test/MC/Mips/eh-frame.s

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ func:
6666
// DWARF32_PIC-NEXT: Augmentation data: 1B
6767
// ^^ fde pointer encoding: DW_EH_PE_pcrel | DW_EH_PE_sdata4
6868
// DWARF32-EMPTY:
69-
// DWARF32-NEXT: DW_CFA_def_cfa_register: reg29
69+
// DWARF32-NEXT: DW_CFA_def_cfa_register: SP_64
7070
//
7171
// DWARF32_ABS: 00000014 00000010 00000018 FDE cie=00000000 pc=00000000...00000000
7272
// DWARF32_PIC: 00000014 00000010 00000018 FDE cie=00000000 pc=0000001c...0000001c
@@ -90,7 +90,7 @@ func:
9090
// DWARF64_PIC: Augmentation data: 1B
9191
// ^^ fde pointer encoding: DW_EH_PE_pcrel | DW_EH_PE_sdata4
9292
// DWARF64-EMPTY:
93-
// DWARF64-NEXT: DW_CFA_def_cfa_register: reg29
93+
// DWARF64-NEXT: DW_CFA_def_cfa_register: SP_64
9494
// DWARF64_PIC-NEXT: DW_CFA_nop:
9595
//
9696
// DWARF64_ABS: 00000014 00000018 00000018 FDE cie=00000000 pc=00000000...00000000

llvm/test/MC/X86/i386-darwin-frame-register.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
; CHECK: .debug_frame contents:
1212
; CHECK: ffffffff CIE
1313
; CHECK-NOT: {{CIE|FDE}}
14-
; CHECK: DW_CFA_def_cfa: reg4 +4
14+
; CHECK: DW_CFA_def_cfa: ESP +4
1515

1616
; ModuleID = 'foo.c'
1717
target datalayout = "e-m:o-p:32:32-f64:32:64-f80:128-n8:16:32-S128"

0 commit comments

Comments
 (0)