mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-12 13:38:21 +00:00
fix a fixme in TargetLoweringObjectFile::getExprForDwarfReference
where we used ot create an MCSymbol for ".". Now emit an assembler temporary label and reference it instead of "." textually. rdar://7739457 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@98292 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -19,6 +19,7 @@
|
||||
#include "llvm/GlobalVariable.h"
|
||||
#include "llvm/MC/MCContext.h"
|
||||
#include "llvm/MC/MCExpr.h"
|
||||
#include "llvm/MC/MCStreamer.h"
|
||||
#include "llvm/MC/MCSymbol.h"
|
||||
#include "llvm/Target/Mangler.h"
|
||||
#include "llvm/Target/TargetData.h"
|
||||
@ -307,29 +308,34 @@ getExprForDwarfGlobalReference(const GlobalValue *GV, Mangler *Mang,
|
||||
else
|
||||
Sym = getContext().GetOrCreateSymbol(Name.str());
|
||||
|
||||
return getExprForDwarfReference(Sym, MMI, Encoding, Streamer);
|
||||
return getExprForDwarfReference(Sym, Mang, MMI, Encoding, Streamer);
|
||||
}
|
||||
|
||||
const MCExpr *TargetLoweringObjectFile::
|
||||
getExprForDwarfReference(const MCSymbol *Sym, MachineModuleInfo *MMI,
|
||||
unsigned Encoding, MCStreamer &Streamer) const {
|
||||
getExprForDwarfReference(const MCSymbol *Sym, Mangler *Mang,
|
||||
MachineModuleInfo *MMI, unsigned Encoding,
|
||||
MCStreamer &Streamer) const {
|
||||
const MCExpr *Res = MCSymbolRefExpr::Create(Sym, getContext());
|
||||
|
||||
switch (Encoding & 0xF0) {
|
||||
default:
|
||||
llvm_report_error("We do not support this DWARF encoding yet!");
|
||||
break;
|
||||
case dwarf::DW_EH_PE_absptr:
|
||||
// Do nothing special
|
||||
break;
|
||||
case dwarf::DW_EH_PE_pcrel:
|
||||
// FIXME: PCSymbol
|
||||
const MCExpr *PC = MCSymbolRefExpr::Create(".", getContext());
|
||||
Res = MCBinaryExpr::CreateSub(Res, PC, getContext());
|
||||
break;
|
||||
}
|
||||
return Res;
|
||||
case dwarf::DW_EH_PE_pcrel: {
|
||||
// Emit a label to the streamer for the current position. This gives us
|
||||
// .-foo addressing.
|
||||
SmallString<128> Name;
|
||||
Mang->getNameWithPrefix(Name, Twine("PCtemp") + Twine(Mang->getUniqueID()),
|
||||
Mangler::Private);
|
||||
|
||||
return Res;
|
||||
MCSymbol *PCSym = getContext().GetOrCreateTemporarySymbol(Name.str());
|
||||
Streamer.EmitLabel(PCSym);
|
||||
const MCExpr *PC = MCSymbolRefExpr::Create(PCSym, getContext());
|
||||
return MCBinaryExpr::CreateSub(Res, PC, getContext());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
unsigned TargetLoweringObjectFile::getPersonalityEncoding() const {
|
||||
|
Reference in New Issue
Block a user