aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/MC/MCStreamer.cpp
diff options
context:
space:
mode:
authorRamNalamothu <VenkataRamanaiah.Nalamothu@amd.com>2021-06-14 06:57:58 +0530
committerRamNalamothu <VenkataRamanaiah.Nalamothu@amd.com>2021-06-14 08:51:50 +0530
commit167e7afcd52bc1438d60320ec1d1bc53b8eae4a3 (patch)
treedc3cb0f9a309f05e26771ff7cbce689425c409a1 /llvm/lib/MC/MCStreamer.cpp
parentdcbbc69cc58294cedc865259c6fd5ba80ecd9bd3 (diff)
downloadllvm-167e7afcd52bc1438d60320ec1d1bc53b8eae4a3.zip
llvm-167e7afcd52bc1438d60320ec1d1bc53b8eae4a3.tar.gz
llvm-167e7afcd52bc1438d60320ec1d1bc53b8eae4a3.tar.bz2
Implement DW_CFA_LLVM_* for Heterogeneous Debugging
Add support in MC/MIR for writing/parsing, and DebugInfo. This is part of the Extensions for Heterogeneous Debugging defined at https://llvm.org/docs/AMDGPUDwarfExtensionsForHeterogeneousDebugging.html Specifically the CFI instructions implemented here are defined at https://llvm.org/docs/AMDGPUDwarfExtensionsForHeterogeneousDebugging.html#cfa-definition-instructions Reviewed By: clayborg Differential Revision: https://reviews.llvm.org/D76877
Diffstat (limited to 'llvm/lib/MC/MCStreamer.cpp')
-rw-r--r--llvm/lib/MC/MCStreamer.cpp15
1 files changed, 14 insertions, 1 deletions
diff --git a/llvm/lib/MC/MCStreamer.cpp b/llvm/lib/MC/MCStreamer.cpp
index 5d06240..2a1998f 100644
--- a/llvm/lib/MC/MCStreamer.cpp
+++ b/llvm/lib/MC/MCStreamer.cpp
@@ -444,7 +444,8 @@ void MCStreamer::emitCFIStartProc(bool IsSimple, SMLoc Loc) {
if (MAI) {
for (const MCCFIInstruction& Inst : MAI->getInitialFrameState()) {
if (Inst.getOperation() == MCCFIInstruction::OpDefCfa ||
- Inst.getOperation() == MCCFIInstruction::OpDefCfaRegister) {
+ Inst.getOperation() == MCCFIInstruction::OpDefCfaRegister ||
+ Inst.getOperation() == MCCFIInstruction::OpLLVMDefAspaceCfa) {
Frame.CurrentCfaRegister = Inst.getRegister();
}
}
@@ -517,6 +518,18 @@ void MCStreamer::emitCFIDefCfaRegister(int64_t Register) {
CurFrame->CurrentCfaRegister = static_cast<unsigned>(Register);
}
+void MCStreamer::emitCFILLVMDefAspaceCfa(int64_t Register, int64_t Offset,
+ int64_t AddressSpace) {
+ MCSymbol *Label = emitCFILabel();
+ MCCFIInstruction Instruction = MCCFIInstruction::createLLVMDefAspaceCfa(
+ Label, Register, Offset, AddressSpace);
+ MCDwarfFrameInfo *CurFrame = getCurrentDwarfFrameInfo();
+ if (!CurFrame)
+ return;
+ CurFrame->Instructions.push_back(Instruction);
+ CurFrame->CurrentCfaRegister = static_cast<unsigned>(Register);
+}
+
void MCStreamer::emitCFIOffset(int64_t Register, int64_t Offset) {
MCSymbol *Label = emitCFILabel();
MCCFIInstruction Instruction =