[PATCH] D88767: Show register names in DWARF unwind info.
Greg Clayton via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Oct 2 18:10:02 PDT 2020
clayborg updated this revision to Diff 295944.
clayborg added a comment.
Removed a change to DwarfTransformer.cpp that wasn't part of this patch.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D88767/new/
https://reviews.llvm.org/D88767
Files:
llvm/lib/DebugInfo/DWARF/DWARFDebugFrame.cpp
llvm/test/DebugInfo/dwarfdump-debug-frame-simple.test
llvm/test/MC/ELF/cfi-restore-extended.s
llvm/test/MC/X86/i386-darwin-frame-register.ll
Index: llvm/test/MC/X86/i386-darwin-frame-register.ll
===================================================================
--- llvm/test/MC/X86/i386-darwin-frame-register.ll
+++ llvm/test/MC/X86/i386-darwin-frame-register.ll
@@ -11,7 +11,7 @@
; CHECK: .debug_frame contents:
; CHECK: ffffffff CIE
; CHECK-NOT: {{CIE|FDE}}
-; CHECK: DW_CFA_def_cfa: reg4 +4
+; CHECK: DW_CFA_def_cfa: ESP +4
; ModuleID = 'foo.c'
target datalayout = "e-m:o-p:32:32-f64:32:64-f80:128-n8:16:32-S128"
Index: llvm/test/MC/ELF/cfi-restore-extended.s
===================================================================
--- llvm/test/MC/ELF/cfi-restore-extended.s
+++ llvm/test/MC/ELF/cfi-restore-extended.s
@@ -6,7 +6,7 @@
nop
// CHECK: DW_CFA_advance_loc: 1
.cfi_restore %rbp
-// CHECK-NEXT: DW_CFA_restore: reg6
+// CHECK-NEXT: DW_CFA_restore: RBP
nop
// CHECK-NEXT: DW_CFA_advance_loc: 1
.cfi_restore 89
@@ -14,4 +14,3 @@
// CHECK-NEXT: DW_CFA_nop:
nop
.cfi_endproc
-
Index: llvm/test/DebugInfo/dwarfdump-debug-frame-simple.test
===================================================================
--- llvm/test/DebugInfo/dwarfdump-debug-frame-simple.test
+++ llvm/test/DebugInfo/dwarfdump-debug-frame-simple.test
@@ -5,8 +5,8 @@
; FRAMES: 00000000 00000010 ffffffff CIE
; FRAMES: Version: 1
-; FRAMES: DW_CFA_def_cfa: reg4 +4
-; FRAMES-NEXT: DW_CFA_offset: reg8 -4
+; FRAMES: DW_CFA_def_cfa: ESP +4
+; FRAMES-NEXT: DW_CFA_offset: EIP -4
; FRAMES-NEXT: DW_CFA_nop:
; FRAMES-NEXT: DW_CFA_nop:
@@ -18,9 +18,9 @@
; FRAMES: 00000028 00000014 00000000 FDE cie=00000000 pc=00000030...00000080
; FRAMES: DW_CFA_advance_loc: 1
; FRAMES-NEXT: DW_CFA_def_cfa_offset: +8
-; FRAMES-NEXT: DW_CFA_offset: reg5 -8
+; FRAMES-NEXT: DW_CFA_offset: EBP -8
; FRAMES-NEXT: DW_CFA_advance_loc: 2
-; FRAMES-NEXT: DW_CFA_def_cfa_register: reg5
+; FRAMES-NEXT: DW_CFA_def_cfa_register: EBP
; FRAMES-NOT: CIE
; FRAMES-NOT: FDE
Index: llvm/lib/DebugInfo/DWARF/DWARFDebugFrame.cpp
===================================================================
--- llvm/lib/DebugInfo/DWARF/DWARFDebugFrame.cpp
+++ llvm/lib/DebugInfo/DWARF/DWARFDebugFrame.cpp
@@ -12,6 +12,7 @@
#include "llvm/ADT/StringExtras.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/BinaryFormat/Dwarf.h"
+#include "llvm/MC/MCRegisterInfo.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/Compiler.h"
#include "llvm/Support/DataExtractor.h"
@@ -29,6 +30,18 @@
using namespace llvm;
using namespace dwarf;
+static void printRegister(raw_ostream &OS, const MCRegisterInfo *MRI, bool IsEH,
+ unsigned RegNum) {
+ if (MRI) {
+ if (Optional<unsigned> LLVMRegNum = MRI->getLLVMRegNum(RegNum, IsEH)) {
+ if (const char *RegName = MRI->getName(*LLVMRegNum)) {
+ OS << RegName;
+ return;
+ }
+ }
+ }
+ OS << "reg" << RegNum;
+}
// See DWARF standard v3, section 7.23
const uint8_t DWARF_CFI_PRIMARY_OPCODE_MASK = 0xc0;
@@ -268,7 +281,8 @@
OS << format(" %" PRId64 "*data_alignment_factor" , Operand);
break;
case OT_Register:
- OS << format(" reg%" PRId64, Operand);
+ OS << ' ';
+ printRegister(OS, MRI, IsEH, Operand);
break;
case OT_Expression:
assert(Instr.Expression && "missing DWARFExpression object");
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D88767.295944.patch
Type: text/x-patch
Size: 3294 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20201003/c310bdc2/attachment-0001.bin>
More information about the llvm-commits
mailing list