[llvm] be5d92e - [Debug-Info][NFC] move emitDwarfUnitLength to MCStreamer class

Chen Zheng via llvm-commits llvm-commits at lists.llvm.org
Tue Feb 23 18:29:32 PST 2021


Author: Chen Zheng
Date: 2021-02-23T21:29:05-05:00
New Revision: be5d92e37e4fe0b7ba2f5658fa828c1c39988374

URL: https://github.com/llvm/llvm-project/commit/be5d92e37e4fe0b7ba2f5658fa828c1c39988374
DIFF: https://github.com/llvm/llvm-project/commit/be5d92e37e4fe0b7ba2f5658fa828c1c39988374.diff

LOG: [Debug-Info][NFC] move emitDwarfUnitLength to MCStreamer class

We may need to do some customization for DWARF unit length in DWARF
section headers for some targets for some code generation path.

For example, for XCOFF in assembly path, AIX assembler does not require
the debug section containing its debug unit length in the header.

Move emitDwarfUnitLength to MCStreamer class so that we can do
customization in different Streamers

Reviewed By: ikudrin

Differential Revision: https://reviews.llvm.org/D95932

Added: 
    

Modified: 
    llvm/include/llvm/CodeGen/AsmPrinter.h
    llvm/include/llvm/MC/MCStreamer.h
    llvm/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp
    llvm/lib/MC/MCStreamer.cpp
    llvm/unittests/CodeGen/AsmPrinterDwarfTest.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/include/llvm/CodeGen/AsmPrinter.h b/llvm/include/llvm/CodeGen/AsmPrinter.h
index 76486b0b48ce..9ad4048a3241 100644
--- a/llvm/include/llvm/CodeGen/AsmPrinter.h
+++ b/llvm/include/llvm/CodeGen/AsmPrinter.h
@@ -639,9 +639,6 @@ class AsmPrinter : public MachineFunctionPass {
   /// Emit 32- or 64-bit value depending on the DWARF format.
   void emitDwarfLengthOrOffset(uint64_t Value) const;
 
-  /// Emit a special value of 0xffffffff if producing 64-bit debugging info.
-  void maybeEmitDwarf64Mark() const;
-
   /// Emit a unit length field. The actual format, DWARF32 or DWARF64, is chosen
   /// according to the settings.
   void emitDwarfUnitLength(uint64_t Length, const Twine &Comment) const;

diff  --git a/llvm/include/llvm/MC/MCStreamer.h b/llvm/include/llvm/MC/MCStreamer.h
index 94fb2c828acb..62b5e0cd3493 100644
--- a/llvm/include/llvm/MC/MCStreamer.h
+++ b/llvm/include/llvm/MC/MCStreamer.h
@@ -1079,6 +1079,18 @@ class MCStreamer {
   void Finish(SMLoc EndLoc = SMLoc());
 
   virtual bool mayHaveInstructions(MCSection &Sec) const { return true; }
+
+  /// Emit a special value of 0xffffffff if producing 64-bit debugging info.
+  void maybeEmitDwarf64Mark();
+
+  /// Emit a unit length field. The actual format, DWARF32 or DWARF64, is chosen
+  /// according to the settings.
+  virtual void emitDwarfUnitLength(uint64_t Length, const Twine &Comment);
+
+  /// Emit a unit length field. The actual format, DWARF32 or DWARF64, is chosen
+  /// according to the settings.
+  virtual void emitDwarfUnitLength(const MCSymbol *Hi, const MCSymbol *Lo,
+                                   const Twine &Comment);
 };
 
 /// Create a dummy machine code streamer, which does nothing. This is useful for

diff  --git a/llvm/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp b/llvm/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp
index c6e43445e7d0..e42cd5f16f7b 100644
--- a/llvm/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp
+++ b/llvm/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp
@@ -198,26 +198,14 @@ void AsmPrinter::emitDwarfLengthOrOffset(uint64_t Value) const {
   OutStreamer->emitIntValue(Value, getDwarfOffsetByteSize());
 }
 
-void AsmPrinter::maybeEmitDwarf64Mark() const {
-  if (!isDwarf64())
-    return;
-  OutStreamer->AddComment("DWARF64 Mark");
-  OutStreamer->emitInt32(dwarf::DW_LENGTH_DWARF64);
-}
-
 void AsmPrinter::emitDwarfUnitLength(uint64_t Length,
                                      const Twine &Comment) const {
-  assert(isDwarf64() || Length <= dwarf::DW_LENGTH_lo_reserved);
-  maybeEmitDwarf64Mark();
-  OutStreamer->AddComment(Comment);
-  OutStreamer->emitIntValue(Length, getDwarfOffsetByteSize());
+  OutStreamer->emitDwarfUnitLength(Length, Comment);
 }
 
 void AsmPrinter::emitDwarfUnitLength(const MCSymbol *Hi, const MCSymbol *Lo,
                                      const Twine &Comment) const {
-  maybeEmitDwarf64Mark();
-  OutStreamer->AddComment(Comment);
-  OutStreamer->emitAbsoluteSymbolDiff(Hi, Lo, getDwarfOffsetByteSize());
+  OutStreamer->emitDwarfUnitLength(Hi, Lo, Comment);
 }
 
 void AsmPrinter::emitCallSiteOffset(const MCSymbol *Hi, const MCSymbol *Lo,

diff  --git a/llvm/lib/MC/MCStreamer.cpp b/llvm/lib/MC/MCStreamer.cpp
index 4b5ae3cc202d..4f2ec51eca62 100644
--- a/llvm/lib/MC/MCStreamer.cpp
+++ b/llvm/lib/MC/MCStreamer.cpp
@@ -991,6 +991,29 @@ void MCStreamer::Finish(SMLoc EndLoc) {
   finishImpl();
 }
 
+void MCStreamer::maybeEmitDwarf64Mark() {
+  if (Context.getDwarfFormat() != dwarf::DWARF64)
+    return;
+  AddComment("DWARF64 Mark");
+  emitInt32(dwarf::DW_LENGTH_DWARF64);
+}
+
+void MCStreamer::emitDwarfUnitLength(uint64_t Length, const Twine &Comment) {
+  assert(Context.getDwarfFormat() == dwarf::DWARF64 ||
+         Length <= dwarf::DW_LENGTH_lo_reserved);
+  maybeEmitDwarf64Mark();
+  AddComment(Comment);
+  emitIntValue(Length, dwarf::getDwarfOffsetByteSize(Context.getDwarfFormat()));
+}
+
+void MCStreamer::emitDwarfUnitLength(const MCSymbol *Hi, const MCSymbol *Lo,
+                                     const Twine &Comment) {
+  maybeEmitDwarf64Mark();
+  AddComment(Comment);
+  emitAbsoluteSymbolDiff(
+      Hi, Lo, dwarf::getDwarfOffsetByteSize(Context.getDwarfFormat()));
+}
+
 void MCStreamer::emitAssignment(MCSymbol *Symbol, const MCExpr *Value) {
   visitUsedExpr(*Value);
   Symbol->setVariableValue(Value);

diff  --git a/llvm/unittests/CodeGen/AsmPrinterDwarfTest.cpp b/llvm/unittests/CodeGen/AsmPrinterDwarfTest.cpp
index c9e489ed2d8a..674f350cd47f 100644
--- a/llvm/unittests/CodeGen/AsmPrinterDwarfTest.cpp
+++ b/llvm/unittests/CodeGen/AsmPrinterDwarfTest.cpp
@@ -294,24 +294,6 @@ TEST_F(AsmPrinterGetUnitLengthFieldByteSizeTest, DWARF64) {
   EXPECT_EQ(TestPrinter->getAP()->getUnitLengthFieldByteSize(), 12u);
 }
 
-class AsmPrinterMaybeEmitDwarf64MarkTest : public AsmPrinterFixtureBase {};
-
-TEST_F(AsmPrinterMaybeEmitDwarf64MarkTest, DWARF32) {
-  if (!init("x86_64-pc-linux", /*DwarfVersion=*/4, dwarf::DWARF32))
-    return;
-
-  EXPECT_CALL(TestPrinter->getMS(), emitIntValue(_, _)).Times(0);
-  TestPrinter->getAP()->maybeEmitDwarf64Mark();
-}
-
-TEST_F(AsmPrinterMaybeEmitDwarf64MarkTest, DWARF64) {
-  if (!init("x86_64-pc-linux", /*DwarfVersion=*/4, dwarf::DWARF64))
-    return;
-
-  EXPECT_CALL(TestPrinter->getMS(), emitIntValue(dwarf::DW_LENGTH_DWARF64, 4));
-  TestPrinter->getAP()->maybeEmitDwarf64Mark();
-}
-
 class AsmPrinterEmitDwarfUnitLengthAsIntTest : public AsmPrinterFixtureBase {
 protected:
   uint64_t Val = 42;


        


More information about the llvm-commits mailing list