diff options
author | Alexey Bataev <a.bataev@hotmail.com> | 2018-12-06 16:02:09 +0000 |
---|---|---|
committer | Alexey Bataev <a.bataev@hotmail.com> | 2018-12-06 16:02:09 +0000 |
commit | 64ad0ad5ed92fc9881075cffebce418d05f61288 (patch) | |
tree | c3f21a68db202e2d9cfd4686e525fecb864832bd /llvm/lib | |
parent | 105a3662546d8ec92641ef3a8dbebc51f954f2f8 (diff) | |
download | bcm5719-llvm-64ad0ad5ed92fc9881075cffebce418d05f61288.tar.gz bcm5719-llvm-64ad0ad5ed92fc9881075cffebce418d05f61288.zip |
[DEBUGINFO, NVPTX]Emit last debugging directives.
Summary:
We may end up with not emitted debug directives at the end of the module
emission. Patch fixes this problem emitting those last directives the
end of the module emission.
Reviewers: echristo
Subscribers: jholewinski, llvm-commits
Differential Revision: https://reviews.llvm.org/D54320
llvm-svn: 348495
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Target/NVPTX/MCTargetDesc/NVPTXTargetStreamer.cpp | 10 | ||||
-rw-r--r-- | llvm/lib/Target/NVPTX/MCTargetDesc/NVPTXTargetStreamer.h | 3 | ||||
-rw-r--r-- | llvm/lib/Target/NVPTX/NVPTXAsmPrinter.cpp | 5 |
3 files changed, 15 insertions, 3 deletions
diff --git a/llvm/lib/Target/NVPTX/MCTargetDesc/NVPTXTargetStreamer.cpp b/llvm/lib/Target/NVPTX/MCTargetDesc/NVPTXTargetStreamer.cpp index 71ca7a5ca8d..f7b4cf3a0f7 100644 --- a/llvm/lib/Target/NVPTX/MCTargetDesc/NVPTXTargetStreamer.cpp +++ b/llvm/lib/Target/NVPTX/MCTargetDesc/NVPTXTargetStreamer.cpp @@ -25,6 +25,12 @@ NVPTXTargetStreamer::NVPTXTargetStreamer(MCStreamer &S) : MCTargetStreamer(S) {} NVPTXTargetStreamer::~NVPTXTargetStreamer() = default; +void NVPTXTargetStreamer::outputDwarfFileDirectives() { + for (const std::string &S : DwarfFiles) + getStreamer().EmitRawText(S.data()); + DwarfFiles.clear(); +} + void NVPTXTargetStreamer::emitDwarfFileDirective(StringRef Directive) { DwarfFiles.emplace_back(Directive); } @@ -82,9 +88,7 @@ void NVPTXTargetStreamer::changeSection(const MCSection *CurSection, OS << "//\t}\n"; if (isDwarfSection(FI, Section)) { // Emit DWARF .file directives in the outermost scope. - for (const std::string &S : DwarfFiles) - getStreamer().EmitRawText(S.data()); - DwarfFiles.clear(); + outputDwarfFileDirectives(); OS << "//\t.section"; Section->PrintSwitchToSection(*getStreamer().getContext().getAsmInfo(), FI->getTargetTriple(), OS, SubSection); diff --git a/llvm/lib/Target/NVPTX/MCTargetDesc/NVPTXTargetStreamer.h b/llvm/lib/Target/NVPTX/MCTargetDesc/NVPTXTargetStreamer.h index 34391a8b9ab..f18e61cdca5 100644 --- a/llvm/lib/Target/NVPTX/MCTargetDesc/NVPTXTargetStreamer.h +++ b/llvm/lib/Target/NVPTX/MCTargetDesc/NVPTXTargetStreamer.h @@ -24,6 +24,9 @@ public: NVPTXTargetStreamer(MCStreamer &S); ~NVPTXTargetStreamer() override; + /// Outputs the list of the DWARF '.file' directives to the streamer. + void outputDwarfFileDirectives(); + /// Record DWARF file directives for later output. /// According to PTX ISA, CUDA Toolkit documentation, 11.5.3. Debugging /// Directives: .file diff --git a/llvm/lib/Target/NVPTX/NVPTXAsmPrinter.cpp b/llvm/lib/Target/NVPTX/NVPTXAsmPrinter.cpp index 3397769768a..e28d633fabe 100644 --- a/llvm/lib/Target/NVPTX/NVPTXAsmPrinter.cpp +++ b/llvm/lib/Target/NVPTX/NVPTXAsmPrinter.cpp @@ -16,6 +16,7 @@ #include "InstPrinter/NVPTXInstPrinter.h" #include "MCTargetDesc/NVPTXBaseInfo.h" #include "MCTargetDesc/NVPTXMCAsmInfo.h" +#include "MCTargetDesc/NVPTXTargetStreamer.h" #include "NVPTX.h" #include "NVPTXMCExpr.h" #include "NVPTXMachineFunctionInfo.h" @@ -938,6 +939,10 @@ bool NVPTXAsmPrinter::doFinalization(Module &M) { if (HasDebugInfo) OutStreamer->EmitRawText("//\t}"); + // Output last DWARF .file directives, if any. + static_cast<NVPTXTargetStreamer *>(OutStreamer->getTargetStreamer()) + ->outputDwarfFileDirectives(); + return ret; //bool Result = AsmPrinter::doFinalization(M); |