mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-17 04:24:00 +00:00
Revert r201622 and r201608.
This causes the LLVMgold plugin to segfault. More information on the replies to r201608. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@201669 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -36,7 +36,6 @@
|
||||
#include "llvm/Support/ErrorHandling.h"
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
#include "llvm/Target/TargetMachine.h"
|
||||
#include "llvm/Target/TargetLowering.h"
|
||||
using namespace llvm;
|
||||
using namespace dwarf;
|
||||
|
||||
@ -44,18 +43,19 @@ using namespace dwarf;
|
||||
// ELF
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
MCSymbol *TargetLoweringObjectFileELF::getCFIPersonalitySymbol(
|
||||
const GlobalValue *GV, Mangler &Mang, const TargetMachine &TM,
|
||||
MachineModuleInfo *MMI) const {
|
||||
MCSymbol *
|
||||
TargetLoweringObjectFileELF::getCFIPersonalitySymbol(const GlobalValue *GV,
|
||||
Mangler &Mang,
|
||||
MachineModuleInfo *MMI) const {
|
||||
unsigned Encoding = getPersonalityEncoding();
|
||||
switch (Encoding & 0x70) {
|
||||
default:
|
||||
report_fatal_error("We do not support this DWARF encoding yet!");
|
||||
case dwarf::DW_EH_PE_absptr:
|
||||
return TM.getTargetLowering()->getSymbol(GV, Mang);
|
||||
return getSymbol(GV, Mang);
|
||||
case dwarf::DW_EH_PE_pcrel: {
|
||||
return getContext().GetOrCreateSymbol(StringRef("DW.ref.") +
|
||||
TM.getTargetLowering()->getSymbol(GV, Mang)->getName());
|
||||
getSymbol(GV, Mang)->getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -89,19 +89,18 @@ void TargetLoweringObjectFileELF::emitPersonalityValue(MCStreamer &Streamer,
|
||||
|
||||
const MCExpr *TargetLoweringObjectFileELF::getTTypeGlobalReference(
|
||||
const GlobalValue *GV, unsigned Encoding, Mangler &Mang,
|
||||
const TargetMachine &TM, MachineModuleInfo *MMI,
|
||||
MCStreamer &Streamer) const {
|
||||
MachineModuleInfo *MMI, MCStreamer &Streamer) const {
|
||||
|
||||
if (Encoding & dwarf::DW_EH_PE_indirect) {
|
||||
MachineModuleInfoELF &ELFMMI = MMI->getObjFileInfo<MachineModuleInfoELF>();
|
||||
|
||||
MCSymbol *SSym = getSymbolWithGlobalValueBase(GV, ".DW.stub", Mang, TM);
|
||||
MCSymbol *SSym = getSymbolWithGlobalValueBase(GV, ".DW.stub", Mang);
|
||||
|
||||
// Add information about the stub reference to ELFMMI so that the stub
|
||||
// gets emitted by the asmprinter.
|
||||
MachineModuleInfoImpl::StubValueTy &StubSym = ELFMMI.getGVStubEntry(SSym);
|
||||
if (StubSym.getPointer() == 0) {
|
||||
MCSymbol *Sym = TM.getTargetLowering()->getSymbol(GV, Mang);
|
||||
MCSymbol *Sym = getSymbol(GV, Mang);
|
||||
StubSym = MachineModuleInfoImpl::StubValueTy(Sym, !GV->hasLocalLinkage());
|
||||
}
|
||||
|
||||
@ -110,8 +109,8 @@ const MCExpr *TargetLoweringObjectFileELF::getTTypeGlobalReference(
|
||||
Encoding & ~dwarf::DW_EH_PE_indirect, Streamer);
|
||||
}
|
||||
|
||||
return TargetLoweringObjectFile::
|
||||
getTTypeGlobalReference(GV, Encoding, Mang, TM, MMI, Streamer);
|
||||
return TargetLoweringObjectFile::getTTypeGlobalReference(GV, Encoding, Mang,
|
||||
MMI, Streamer);
|
||||
}
|
||||
|
||||
static SectionKind
|
||||
@ -196,9 +195,10 @@ getELFSectionFlags(SectionKind K) {
|
||||
return Flags;
|
||||
}
|
||||
|
||||
const MCSection *TargetLoweringObjectFileELF::getExplicitSectionGlobal(
|
||||
const GlobalValue *GV, SectionKind Kind, Mangler &Mang,
|
||||
const TargetMachine &TM) const {
|
||||
|
||||
const MCSection *TargetLoweringObjectFileELF::
|
||||
getExplicitSectionGlobal(const GlobalValue *GV, SectionKind Kind,
|
||||
Mangler &Mang, const TargetMachine &TM) const {
|
||||
StringRef SectionName = GV->getSection();
|
||||
|
||||
// Infer section flags from the section name if we can.
|
||||
@ -248,12 +248,12 @@ SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
|
||||
Prefix = getSectionPrefixForGlobal(Kind);
|
||||
|
||||
SmallString<128> Name(Prefix, Prefix+strlen(Prefix));
|
||||
TM.getTargetLowering()->getNameWithPrefix(Name, GV, Mang, true);
|
||||
|
||||
MCSymbol *Sym = getSymbol(GV, Mang);
|
||||
Name.append(Sym->getName().begin(), Sym->getName().end());
|
||||
StringRef Group = "";
|
||||
unsigned Flags = getELFSectionFlags(Kind);
|
||||
if (GV->isWeakForLinker()) {
|
||||
Group = Name.substr(strlen(Prefix));
|
||||
Group = Sym->getName();
|
||||
Flags |= ELF::SHF_GROUP;
|
||||
}
|
||||
|
||||
@ -487,9 +487,9 @@ emitModuleFlags(MCStreamer &Streamer,
|
||||
Streamer.AddBlankLine();
|
||||
}
|
||||
|
||||
const MCSection *TargetLoweringObjectFileMachO::getExplicitSectionGlobal(
|
||||
const GlobalValue *GV, SectionKind Kind, Mangler &Mang,
|
||||
const TargetMachine &TM) const {
|
||||
const MCSection *TargetLoweringObjectFileMachO::
|
||||
getExplicitSectionGlobal(const GlobalValue *GV, SectionKind Kind,
|
||||
Mangler &Mang, const TargetMachine &TM) const {
|
||||
// Parse the section specifier and create it if valid.
|
||||
StringRef Segment, Section;
|
||||
unsigned TAA = 0, StubSize = 0;
|
||||
@ -526,41 +526,6 @@ const MCSection *TargetLoweringObjectFileMachO::getExplicitSectionGlobal(
|
||||
return S;
|
||||
}
|
||||
|
||||
bool TargetLoweringObjectFileMachO::isSectionAtomizableBySymbols(
|
||||
const MCSection &Section) const {
|
||||
const MCSectionMachO &SMO = static_cast<const MCSectionMachO&>(Section);
|
||||
|
||||
// Sections holding 1 byte strings are atomized based on the data
|
||||
// they contain.
|
||||
// Sections holding 2 byte strings require symbols in order to be
|
||||
// atomized.
|
||||
// There is no dedicated section for 4 byte strings.
|
||||
if (SMO.getKind().isMergeable1ByteCString())
|
||||
return false;
|
||||
|
||||
if (SMO.getSegmentName() == "__DATA" &&
|
||||
SMO.getSectionName() == "__cfstring")
|
||||
return false;
|
||||
|
||||
switch (SMO.getType()) {
|
||||
default:
|
||||
return true;
|
||||
|
||||
// These sections are atomized at the element boundaries without using
|
||||
// symbols.
|
||||
case MCSectionMachO::S_4BYTE_LITERALS:
|
||||
case MCSectionMachO::S_8BYTE_LITERALS:
|
||||
case MCSectionMachO::S_16BYTE_LITERALS:
|
||||
case MCSectionMachO::S_LITERAL_POINTERS:
|
||||
case MCSectionMachO::S_NON_LAZY_SYMBOL_POINTERS:
|
||||
case MCSectionMachO::S_LAZY_SYMBOL_POINTERS:
|
||||
case MCSectionMachO::S_MOD_INIT_FUNC_POINTERS:
|
||||
case MCSectionMachO::S_MOD_TERM_FUNC_POINTERS:
|
||||
case MCSectionMachO::S_INTERPOSING:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
const MCSection *TargetLoweringObjectFileMachO::
|
||||
SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
|
||||
Mangler &Mang, const TargetMachine &TM) const {
|
||||
@ -641,17 +606,21 @@ TargetLoweringObjectFileMachO::getSectionForConstant(SectionKind Kind) const {
|
||||
return ReadOnlySection; // .const
|
||||
}
|
||||
|
||||
/// This hook allows targets to selectively decide not to emit the UsedDirective
|
||||
/// for some symbols in llvm.used.
|
||||
/// shouldEmitUsedDirectiveFor - This hook allows targets to selectively decide
|
||||
/// not to emit the UsedDirective for some symbols in llvm.used.
|
||||
// FIXME: REMOVE this (rdar://7071300)
|
||||
bool TargetLoweringObjectFileMachO::shouldEmitUsedDirectiveFor(
|
||||
const GlobalValue *GV, Mangler &Mang, TargetMachine &TM) const {
|
||||
bool TargetLoweringObjectFileMachO::
|
||||
shouldEmitUsedDirectiveFor(const GlobalValue *GV, Mangler &Mang) const {
|
||||
/// On Darwin, internally linked data beginning with "L" or "l" does not have
|
||||
/// the directive emitted (this occurs in ObjC metadata).
|
||||
if (!GV) return false;
|
||||
|
||||
// Check whether the mangled name has the "Private" or "LinkerPrivate" prefix.
|
||||
if (GV->hasLocalLinkage() && !isa<Function>(GV)) {
|
||||
// FIXME: ObjC metadata is currently emitted as internal symbols that have
|
||||
// \1L and \0l prefixes on them. Fix them to be Private/LinkerPrivate and
|
||||
// this horrible hack can go away.
|
||||
MCSymbol *Sym = TM.getTargetLowering()->getSymbol(GV, Mang);
|
||||
MCSymbol *Sym = getSymbol(GV, Mang);
|
||||
if (Sym->getName()[0] == 'L' || Sym->getName()[0] == 'l')
|
||||
return false;
|
||||
}
|
||||
@ -661,16 +630,14 @@ bool TargetLoweringObjectFileMachO::shouldEmitUsedDirectiveFor(
|
||||
|
||||
const MCExpr *TargetLoweringObjectFileMachO::getTTypeGlobalReference(
|
||||
const GlobalValue *GV, unsigned Encoding, Mangler &Mang,
|
||||
const TargetMachine &TM, MachineModuleInfo *MMI,
|
||||
MCStreamer &Streamer) const {
|
||||
MachineModuleInfo *MMI, MCStreamer &Streamer) const {
|
||||
// The mach-o version of this method defaults to returning a stub reference.
|
||||
|
||||
if (Encoding & DW_EH_PE_indirect) {
|
||||
MachineModuleInfoMachO &MachOMMI =
|
||||
MMI->getObjFileInfo<MachineModuleInfoMachO>();
|
||||
|
||||
MCSymbol *SSym =
|
||||
getSymbolWithGlobalValueBase(GV, "$non_lazy_ptr", Mang, TM);
|
||||
MCSymbol *SSym = getSymbolWithGlobalValueBase(GV, "$non_lazy_ptr", Mang);
|
||||
|
||||
// Add information about the stub reference to MachOMMI so that the stub
|
||||
// gets emitted by the asmprinter.
|
||||
@ -678,7 +645,7 @@ const MCExpr *TargetLoweringObjectFileMachO::getTTypeGlobalReference(
|
||||
GV->hasHiddenVisibility() ? MachOMMI.getHiddenGVStubEntry(SSym) :
|
||||
MachOMMI.getGVStubEntry(SSym);
|
||||
if (StubSym.getPointer() == 0) {
|
||||
MCSymbol *Sym = TM.getTargetLowering()->getSymbol(GV, Mang);
|
||||
MCSymbol *Sym = getSymbol(GV, Mang);
|
||||
StubSym = MachineModuleInfoImpl::StubValueTy(Sym, !GV->hasLocalLinkage());
|
||||
}
|
||||
|
||||
@ -687,24 +654,24 @@ const MCExpr *TargetLoweringObjectFileMachO::getTTypeGlobalReference(
|
||||
Encoding & ~dwarf::DW_EH_PE_indirect, Streamer);
|
||||
}
|
||||
|
||||
return TargetLoweringObjectFile::getTTypeGlobalReference(GV, Encoding, Mang,
|
||||
TM, MMI, Streamer);
|
||||
return TargetLoweringObjectFile::
|
||||
getTTypeGlobalReference(GV, Encoding, Mang, MMI, Streamer);
|
||||
}
|
||||
|
||||
MCSymbol *TargetLoweringObjectFileMachO::getCFIPersonalitySymbol(
|
||||
const GlobalValue *GV, Mangler &Mang, const TargetMachine &TM,
|
||||
MachineModuleInfo *MMI) const {
|
||||
MCSymbol *TargetLoweringObjectFileMachO::
|
||||
getCFIPersonalitySymbol(const GlobalValue *GV, Mangler &Mang,
|
||||
MachineModuleInfo *MMI) const {
|
||||
// The mach-o version of this method defaults to returning a stub reference.
|
||||
MachineModuleInfoMachO &MachOMMI =
|
||||
MMI->getObjFileInfo<MachineModuleInfoMachO>();
|
||||
|
||||
MCSymbol *SSym = getSymbolWithGlobalValueBase(GV, "$non_lazy_ptr", Mang, TM);
|
||||
MCSymbol *SSym = getSymbolWithGlobalValueBase(GV, "$non_lazy_ptr", Mang);
|
||||
|
||||
// Add information about the stub reference to MachOMMI so that the stub
|
||||
// gets emitted by the asmprinter.
|
||||
MachineModuleInfoImpl::StubValueTy &StubSym = MachOMMI.getGVStubEntry(SSym);
|
||||
if (StubSym.getPointer() == 0) {
|
||||
MCSymbol *Sym = TM.getTargetLowering()->getSymbol(GV, Mang);
|
||||
MCSymbol *Sym = getSymbol(GV, Mang);
|
||||
StubSym = MachineModuleInfoImpl::StubValueTy(Sym, !GV->hasLocalLinkage());
|
||||
}
|
||||
|
||||
@ -750,9 +717,9 @@ getCOFFSectionFlags(SectionKind K) {
|
||||
return Flags;
|
||||
}
|
||||
|
||||
const MCSection *TargetLoweringObjectFileCOFF::getExplicitSectionGlobal(
|
||||
const GlobalValue *GV, SectionKind Kind, Mangler &Mang,
|
||||
const TargetMachine &TM) const {
|
||||
const MCSection *TargetLoweringObjectFileCOFF::
|
||||
getExplicitSectionGlobal(const GlobalValue *GV, SectionKind Kind,
|
||||
Mangler &Mang, const TargetMachine &TM) const {
|
||||
int Selection = 0;
|
||||
unsigned Characteristics = getCOFFSectionFlags(Kind);
|
||||
StringRef Name = GV->getSection();
|
||||
@ -760,7 +727,7 @@ const MCSection *TargetLoweringObjectFileCOFF::getExplicitSectionGlobal(
|
||||
if (GV->isWeakForLinker()) {
|
||||
Selection = COFF::IMAGE_COMDAT_SELECT_ANY;
|
||||
Characteristics |= COFF::IMAGE_SCN_LNK_COMDAT;
|
||||
MCSymbol *Sym = TM.getTargetLowering()->getSymbol(GV, Mang);
|
||||
MCSymbol *Sym = getSymbol(GV, Mang);
|
||||
COMDATSymName = Sym->getName();
|
||||
}
|
||||
return getContext().getCOFFSection(Name,
|
||||
@ -794,7 +761,7 @@ SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
|
||||
unsigned Characteristics = getCOFFSectionFlags(Kind);
|
||||
|
||||
Characteristics |= COFF::IMAGE_SCN_LNK_COMDAT;
|
||||
MCSymbol *Sym = TM.getTargetLowering()->getSymbol(GV, Mang);
|
||||
MCSymbol *Sym = getSymbol(GV, Mang);
|
||||
return getContext().getCOFFSection(Name, Characteristics,
|
||||
Kind, Sym->getName(),
|
||||
COFF::IMAGE_COMDAT_SELECT_ANY);
|
||||
|
Reference in New Issue
Block a user