forked from OSchip/llvm-project
Change DIEObjectLabel to take an MCSymbol instead of std::string.
llvm-svn: 93647
This commit is contained in:
parent
555ceabe64
commit
06d45f6e75
|
@ -15,6 +15,7 @@
|
|||
#include "DwarfPrinter.h"
|
||||
#include "llvm/CodeGen/AsmPrinter.h"
|
||||
#include "llvm/MC/MCAsmInfo.h"
|
||||
#include "llvm/MC/MCSymbol.h"
|
||||
#include "llvm/Target/TargetData.h"
|
||||
#include "llvm/Support/Debug.h"
|
||||
#include "llvm/Support/ErrorHandling.h"
|
||||
|
@ -276,7 +277,7 @@ void DIEDwarfLabel::print(raw_ostream &O) {
|
|||
///
|
||||
void DIEObjectLabel::EmitValue(Dwarf *D, unsigned Form) const {
|
||||
bool IsSmall = Form == dwarf::DW_FORM_data4;
|
||||
D->EmitReference(Label, false, IsSmall);
|
||||
D->EmitReference(Sym, false, IsSmall);
|
||||
}
|
||||
|
||||
/// SizeOf - Determine size of label value in bytes.
|
||||
|
@ -288,7 +289,7 @@ unsigned DIEObjectLabel::SizeOf(const TargetData *TD, unsigned Form) const {
|
|||
|
||||
#ifndef NDEBUG
|
||||
void DIEObjectLabel::print(raw_ostream &O) {
|
||||
O << "Obj: " << Label;
|
||||
O << "Obj: " << Sym->getName();
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
@ -25,6 +25,7 @@ namespace llvm {
|
|||
class AsmPrinter;
|
||||
class Dwarf;
|
||||
class TargetData;
|
||||
class MCSymbol;
|
||||
|
||||
//===--------------------------------------------------------------------===//
|
||||
/// DIEAbbrevData - Dwarf abbreviation data, describes the one attribute of a
|
||||
|
@ -333,10 +334,10 @@ namespace llvm {
|
|||
/// DIEObjectLabel - A label to an object in code or data.
|
||||
//
|
||||
class DIEObjectLabel : public DIEValue {
|
||||
const std::string Label;
|
||||
const MCSymbol *Sym;
|
||||
public:
|
||||
explicit DIEObjectLabel(const std::string &L)
|
||||
: DIEValue(isAsIsLabel), Label(L) {}
|
||||
explicit DIEObjectLabel(const MCSymbol *S)
|
||||
: DIEValue(isAsIsLabel), Sym(S) {}
|
||||
|
||||
/// EmitValue - Emit label value.
|
||||
///
|
||||
|
|
|
@ -361,8 +361,8 @@ void DwarfDebug::addLabel(DIE *Die, unsigned Attribute, unsigned Form,
|
|||
/// addObjectLabel - Add an non-Dwarf label attribute data and value.
|
||||
///
|
||||
void DwarfDebug::addObjectLabel(DIE *Die, unsigned Attribute, unsigned Form,
|
||||
const std::string &Label) {
|
||||
DIEValue *Value = new DIEObjectLabel(Label);
|
||||
const MCSymbol *Sym) {
|
||||
DIEValue *Value = new DIEObjectLabel(Sym);
|
||||
DIEValues.push_back(Value);
|
||||
Die->addValue(Attribute, Form, Value);
|
||||
}
|
||||
|
@ -1665,14 +1665,14 @@ void DwarfDebug::constructGlobalVariableDIE(MDNode *N) {
|
|||
DIEBlock *Block = new DIEBlock();
|
||||
addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_addr);
|
||||
addObjectLabel(Block, 0, dwarf::DW_FORM_udata,
|
||||
Asm->Mang->getMangledName(DI_GV.getGlobal()));
|
||||
Asm->GetGlobalValueSymbol(DI_GV.getGlobal()));
|
||||
addBlock(VariableSpecDIE, dwarf::DW_AT_location, 0, Block);
|
||||
ModuleCU->addDie(VariableSpecDIE);
|
||||
} else {
|
||||
DIEBlock *Block = new DIEBlock();
|
||||
addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_addr);
|
||||
addObjectLabel(Block, 0, dwarf::DW_FORM_udata,
|
||||
Asm->Mang->getMangledName(DI_GV.getGlobal()));
|
||||
Asm->GetGlobalValueSymbol(DI_GV.getGlobal()));
|
||||
addBlock(VariableDie, dwarf::DW_AT_location, 0, Block);
|
||||
}
|
||||
addToContextOwner(VariableDie, GVContext);
|
||||
|
|
|
@ -256,7 +256,7 @@ class DwarfDebug : public Dwarf {
|
|||
/// addObjectLabel - Add an non-Dwarf label attribute data and value.
|
||||
///
|
||||
void addObjectLabel(DIE *Die, unsigned Attribute, unsigned Form,
|
||||
const std::string &Label);
|
||||
const MCSymbol *Sym);
|
||||
|
||||
/// addSectionOffset - Add a section offset label attribute data and value.
|
||||
///
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
#include "llvm/CodeGen/MachineFunction.h"
|
||||
#include "llvm/CodeGen/MachineModuleInfo.h"
|
||||
#include "llvm/MC/MCAsmInfo.h"
|
||||
#include "llvm/MC/MCSymbol.h"
|
||||
#include "llvm/Target/TargetData.h"
|
||||
#include "llvm/Target/TargetFrameInfo.h"
|
||||
#include "llvm/Target/TargetRegisterInfo.h"
|
||||
|
@ -76,6 +77,13 @@ void Dwarf::EmitReference(const std::string &Name, bool IsPCRelative,
|
|||
if (IsPCRelative) O << "-" << MAI->getPCSymbol();
|
||||
}
|
||||
|
||||
void Dwarf::EmitReference(const MCSymbol *Sym, bool IsPCRelative,
|
||||
bool Force32Bit) const {
|
||||
PrintRelDirective(Force32Bit);
|
||||
Sym->print(O, MAI);
|
||||
if (IsPCRelative) O << "-" << MAI->getPCSymbol();
|
||||
}
|
||||
|
||||
/// EmitDifference - Emit the difference between two labels. Some assemblers do
|
||||
/// not behave with absolute expressions with data directives, so there is an
|
||||
/// option (needsSet) to use an intermediary set expression.
|
||||
|
|
|
@ -28,6 +28,7 @@ namespace llvm {
|
|||
class MCAsmInfo;
|
||||
class TargetData;
|
||||
class TargetRegisterInfo;
|
||||
class MCSymbol;
|
||||
|
||||
class Dwarf {
|
||||
protected:
|
||||
|
@ -123,6 +124,8 @@ namespace llvm {
|
|||
bool Force32Bit = false) const;
|
||||
void EmitReference(const std::string &Name, bool IsPCRelative = false,
|
||||
bool Force32Bit = false) const;
|
||||
void EmitReference(const MCSymbol *Sym, bool IsPCRelative = false,
|
||||
bool Force32Bit = false) const;
|
||||
|
||||
/// EmitDifference - Emit the difference between two labels. Some
|
||||
/// assemblers do not behave with absolute expressions with data directives,
|
||||
|
|
Loading…
Reference in New Issue