diff options
Diffstat (limited to 'lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp')
| -rw-r--r-- | lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp | 34 | 
1 files changed, 20 insertions, 14 deletions
diff --git a/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp b/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp index 08eb14e242c5..605588470670 100644 --- a/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp +++ b/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp @@ -17,7 +17,6 @@  #include "llvm/CodeGen/AsmPrinter.h"  #include "llvm/CodeGen/DIE.h"  #include "llvm/CodeGen/MachineFunction.h" -#include "llvm/CodeGen/TargetLoweringObjectFile.h"  #include "llvm/IR/DataLayout.h"  #include "llvm/MC/MCAsmInfo.h"  #include "llvm/MC/MCRegisterInfo.h" @@ -26,6 +25,7 @@  #include "llvm/MC/MCSymbol.h"  #include "llvm/MC/MachineLocation.h"  #include "llvm/Support/ErrorHandling.h" +#include "llvm/Target/TargetLoweringObjectFile.h"  #include "llvm/Target/TargetMachine.h"  using namespace llvm; @@ -43,15 +43,6 @@ void AsmPrinter::EmitSLEB128(int64_t Value, const char *Desc) const {    OutStreamer->EmitSLEB128IntValue(Value);  } -/// EmitULEB128 - emit the specified unsigned leb128 value. -void AsmPrinter::EmitPaddedULEB128(uint64_t Value, unsigned PadTo, -                                   const char *Desc) const { -  if (isVerbose() && Desc) -    OutStreamer->AddComment(Desc); - -  OutStreamer->EmitPaddedULEB128IntValue(Value, PadTo); -} -  void AsmPrinter::EmitULEB128(uint64_t Value, const char *Desc) const {    if (isVerbose() && Desc)      OutStreamer->AddComment(Desc); @@ -59,6 +50,12 @@ void AsmPrinter::EmitULEB128(uint64_t Value, const char *Desc) const {    OutStreamer->EmitULEB128IntValue(Value);  } +/// Emit something like ".uleb128 Hi-Lo". +void AsmPrinter::EmitLabelDifferenceAsULEB128(const MCSymbol *Hi, +                                              const MCSymbol *Lo) const { +  OutStreamer->emitAbsoluteSymbolDiffAsULEB128(Hi, Lo); +} +  static const char *DecodeDWARFEncoding(unsigned Encoding) {    switch (Encoding) {    case dwarf::DW_EH_PE_absptr: @@ -67,6 +64,10 @@ static const char *DecodeDWARFEncoding(unsigned Encoding) {      return "omit";    case dwarf::DW_EH_PE_pcrel:      return "pcrel"; +  case dwarf::DW_EH_PE_uleb128: +    return "uleb128"; +  case dwarf::DW_EH_PE_sleb128: +    return "sleb128";    case dwarf::DW_EH_PE_udata4:      return "udata4";    case dwarf::DW_EH_PE_udata8: @@ -167,14 +168,19 @@ void AsmPrinter::emitDwarfSymbolReference(const MCSymbol *Label,    EmitLabelDifference(Label, Label->getSection().getBeginSymbol(), 4);  } -void AsmPrinter::emitDwarfStringOffset(DwarfStringPoolEntryRef S) const { +void AsmPrinter::emitDwarfStringOffset(DwarfStringPoolEntry S) const {    if (MAI->doesDwarfUseRelocationsAcrossSections()) { -    emitDwarfSymbolReference(S.getSymbol()); +    assert(S.Symbol && "No symbol available"); +    emitDwarfSymbolReference(S.Symbol);      return;    }    // Just emit the offset directly; no need for symbol math. -  EmitInt32(S.getOffset()); +  emitInt32(S.Offset); +} + +void AsmPrinter::EmitDwarfOffset(const MCSymbol *Label, uint64_t Offset) const { +  EmitLabelPlusOffset(Label, Offset, MAI->getCodePointerSize());  }  //===----------------------------------------------------------------------===// @@ -252,7 +258,7 @@ void AsmPrinter::emitDwarfDIE(const DIE &Die) const {        emitDwarfDIE(Child);      OutStreamer->AddComment("End Of Children Mark"); -    EmitInt8(0); +    emitInt8(0);    }  }  | 
