diff options
Diffstat (limited to 'llvm/lib/MC/MCObjectStreamer.cpp')
| -rw-r--r-- | llvm/lib/MC/MCObjectStreamer.cpp | 19 | 
1 files changed, 19 insertions, 0 deletions
diff --git a/llvm/lib/MC/MCObjectStreamer.cpp b/llvm/lib/MC/MCObjectStreamer.cpp index a40c754..e2cd964 100644 --- a/llvm/lib/MC/MCObjectStreamer.cpp +++ b/llvm/lib/MC/MCObjectStreamer.cpp @@ -14,6 +14,7 @@  #include "llvm/MC/MCCodeEmitter.h"  #include "llvm/MC/MCDwarf.h"  #include "llvm/MC/MCExpr.h" +#include "llvm/MC/MCSymbol.h"  #include "llvm/Target/TargetAsmBackend.h"  using namespace llvm; @@ -75,6 +76,24 @@ const MCExpr *MCObjectStreamer::AddValueSymbols(const MCExpr *Value) {    return Value;  } +void MCObjectStreamer::EmitLabel(MCSymbol *Symbol) { +  assert(!Symbol->isVariable() && "Cannot emit a variable symbol!"); +  assert(CurSection && "Cannot emit before setting section!"); + +  Symbol->setSection(*CurSection); + +  MCSymbolData &SD = getAssembler().getOrCreateSymbolData(*Symbol); + +  // FIXME: This is wasteful, we don't necessarily need to create a data +  // fragment. Instead, we should mark the symbol as pointing into the data +  // fragment if it exists, otherwise we should just queue the label and set its +  // fragment pointer when we emit the next fragment. +  MCDataFragment *F = getOrCreateDataFragment(); +  assert(!SD.getFragment() && "Unexpected fragment on symbol data!"); +  SD.setFragment(F); +  SD.setOffset(F->getContents().size()); +} +  void MCObjectStreamer::EmitULEB128Value(const MCExpr *Value,                                          unsigned AddrSpace) {    new MCLEBFragment(*Value, false, getCurrentSectionData());  | 
