diff options
| -rw-r--r-- | llvm/include/llvm/MC/MCObjectStreamer.h | 3 | ||||
| -rw-r--r-- | llvm/lib/MC/MCObjectStreamer.cpp | 2 | ||||
| -rw-r--r-- | llvm/tools/dsymutil/MachOUtils.cpp | 4 |
3 files changed, 7 insertions, 2 deletions
diff --git a/llvm/include/llvm/MC/MCObjectStreamer.h b/llvm/include/llvm/MC/MCObjectStreamer.h index ac204de31a3..e21eb680f1c 100644 --- a/llvm/include/llvm/MC/MCObjectStreamer.h +++ b/llvm/include/llvm/MC/MCObjectStreamer.h @@ -90,6 +90,9 @@ protected: public: void visitUsedSymbol(const MCSymbol &Sym) override; + /// Create a dummy fragment to assign any pending labels. + void flushPendingLabels() { flushPendingLabels(nullptr); } + MCAssembler &getAssembler() { return *Assembler; } MCAssembler *getAssemblerPtr() override; /// \name MCStreamer Interface diff --git a/llvm/lib/MC/MCObjectStreamer.cpp b/llvm/lib/MC/MCObjectStreamer.cpp index 8122af459b7..9fab8d835f8 100644 --- a/llvm/lib/MC/MCObjectStreamer.cpp +++ b/llvm/lib/MC/MCObjectStreamer.cpp @@ -671,6 +671,6 @@ void MCObjectStreamer::FinishImpl() { // Dump out the dwarf file & directory tables and line tables. MCDwarfLineTable::Emit(this, getAssembler().getDWARFLinetableParams()); - flushPendingLabels(nullptr); + flushPendingLabels(); getAssembler().Finish(); } diff --git a/llvm/tools/dsymutil/MachOUtils.cpp b/llvm/tools/dsymutil/MachOUtils.cpp index 5d70afdc9f7..eda530b810c 100644 --- a/llvm/tools/dsymutil/MachOUtils.cpp +++ b/llvm/tools/dsymutil/MachOUtils.cpp @@ -322,8 +322,10 @@ bool generateDsymCompanion(const DebugMap &DM, MCStreamer &MS, auto &ObjectStreamer = static_cast<MCObjectStreamer &>(MS); MCAssembler &MCAsm = ObjectStreamer.getAssembler(); auto &Writer = static_cast<MachObjectWriter &>(MCAsm.getWriter()); - MCAsmLayout Layout(MCAsm); + // Layout but don't emit. + ObjectStreamer.flushPendingLabels(); + MCAsmLayout Layout(MCAsm); MCAsm.layout(Layout); BinaryHolder InputBinaryHolder(false); |

