mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-14 02:33:53 +00:00
now that getOrCreateSection is all object-file specific,
give the impls an object-file-specific name. In the future they can take different arguments etc. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78495 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
fbf1d271e6
commit
0c0cb71233
@ -207,9 +207,8 @@ protected:
|
|||||||
const MCSection *MergeableConst16Section;
|
const MCSection *MergeableConst16Section;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
const MCSection *getOrCreateSection(const char *Name,
|
const MCSection *getELFSection(const char *Name, bool isDirective,
|
||||||
bool isDirective,
|
SectionKind Kind) const;
|
||||||
SectionKind K) const;
|
|
||||||
public:
|
public:
|
||||||
/// ELF Constructor - AtIsCommentChar is true if the CommentCharacter from TAI
|
/// ELF Constructor - AtIsCommentChar is true if the CommentCharacter from TAI
|
||||||
/// is "@".
|
/// is "@".
|
||||||
@ -250,10 +249,6 @@ class TargetLoweringObjectFileMachO : public TargetLoweringObjectFile {
|
|||||||
const MCSection *FourByteConstantSection;
|
const MCSection *FourByteConstantSection;
|
||||||
const MCSection *EightByteConstantSection;
|
const MCSection *EightByteConstantSection;
|
||||||
const MCSection *SixteenByteConstantSection;
|
const MCSection *SixteenByteConstantSection;
|
||||||
protected:
|
|
||||||
const MCSection *getOrCreateSection(const char *Name,
|
|
||||||
bool isDirective,
|
|
||||||
SectionKind K) const;
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
virtual void Initialize(MCContext &Ctx, const TargetMachine &TM);
|
virtual void Initialize(MCContext &Ctx, const TargetMachine &TM);
|
||||||
@ -277,16 +272,12 @@ public:
|
|||||||
/// getMachOSection - Return the MCSection for the specified mach-o section.
|
/// getMachOSection - Return the MCSection for the specified mach-o section.
|
||||||
/// FIXME: Switch this to a semantic view eventually.
|
/// FIXME: Switch this to a semantic view eventually.
|
||||||
const MCSection *getMachOSection(const char *Name, bool isDirective,
|
const MCSection *getMachOSection(const char *Name, bool isDirective,
|
||||||
SectionKind K);
|
SectionKind K) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class TargetLoweringObjectFileCOFF : public TargetLoweringObjectFile {
|
class TargetLoweringObjectFileCOFF : public TargetLoweringObjectFile {
|
||||||
protected:
|
|
||||||
const MCSection *getOrCreateSection(const char *Name,
|
|
||||||
bool isDirective,
|
|
||||||
SectionKind K) const;
|
|
||||||
public:
|
public:
|
||||||
virtual void Initialize(MCContext &Ctx, const TargetMachine &TM);
|
virtual void Initialize(MCContext &Ctx, const TargetMachine &TM);
|
||||||
|
|
||||||
@ -304,7 +295,7 @@ public:
|
|||||||
/// getCOFFSection - Return the MCSection for the specified COFF section.
|
/// getCOFFSection - Return the MCSection for the specified COFF section.
|
||||||
/// FIXME: Switch this to a semantic view eventually.
|
/// FIXME: Switch this to a semantic view eventually.
|
||||||
const MCSection *getCOFFSection(const char *Name, bool isDirective,
|
const MCSection *getCOFFSection(const char *Name, bool isDirective,
|
||||||
SectionKind K);
|
SectionKind K) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // end namespace llvm
|
} // end namespace llvm
|
||||||
|
@ -25,11 +25,11 @@ namespace llvm {
|
|||||||
// That will allow not treating these as "directives".
|
// That will allow not treating these as "directives".
|
||||||
if (TM.getSubtarget<ARMSubtarget>().isAAPCS_ABI()) {
|
if (TM.getSubtarget<ARMSubtarget>().isAAPCS_ABI()) {
|
||||||
StaticCtorSection =
|
StaticCtorSection =
|
||||||
getOrCreateSection("\t.section .init_array,\"aw\",%init_array", true,
|
getELFSection("\t.section .init_array,\"aw\",%init_array", true,
|
||||||
SectionKind::getDataRel());
|
SectionKind::getDataRel());
|
||||||
StaticDtorSection =
|
StaticDtorSection =
|
||||||
getOrCreateSection("\t.section .fini_array,\"aw\",%fini_array", true,
|
getELFSection("\t.section .fini_array,\"aw\",%fini_array", true,
|
||||||
SectionKind::getDataRel());
|
SectionKind::getDataRel());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -280,7 +280,7 @@ TargetLoweringObjectFile::getSectionForConstant(SectionKind Kind) const {
|
|||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
const MCSection *TargetLoweringObjectFileELF::
|
const MCSection *TargetLoweringObjectFileELF::
|
||||||
getOrCreateSection(const char *Name, bool isDirective, SectionKind Kind) const {
|
getELFSection(const char *Name, bool isDirective, SectionKind Kind) const {
|
||||||
if (MCSection *S = getContext().GetSection(Name))
|
if (MCSection *S = getContext().GetSection(Name))
|
||||||
return S;
|
return S;
|
||||||
return MCSection::Create(Name, isDirective, Kind, getContext());
|
return MCSection::Create(Name, isDirective, Kind, getContext());
|
||||||
@ -290,47 +290,47 @@ void TargetLoweringObjectFileELF::Initialize(MCContext &Ctx,
|
|||||||
const TargetMachine &TM) {
|
const TargetMachine &TM) {
|
||||||
TargetLoweringObjectFile::Initialize(Ctx, TM);
|
TargetLoweringObjectFile::Initialize(Ctx, TM);
|
||||||
if (!HasCrazyBSS)
|
if (!HasCrazyBSS)
|
||||||
BSSSection = getOrCreateSection("\t.bss", true, SectionKind::getBSS());
|
BSSSection = getELFSection("\t.bss", true, SectionKind::getBSS());
|
||||||
else
|
else
|
||||||
// PPC/Linux doesn't support the .bss directive, it needs .section .bss.
|
// PPC/Linux doesn't support the .bss directive, it needs .section .bss.
|
||||||
// FIXME: Does .section .bss work everywhere??
|
// FIXME: Does .section .bss work everywhere??
|
||||||
// FIXME2: this should just be handle by the section printer. We should get
|
// FIXME2: this should just be handle by the section printer. We should get
|
||||||
// away from syntactic view of the sections and MCSection should just be a
|
// away from syntactic view of the sections and MCSection should just be a
|
||||||
// semantic view.
|
// semantic view.
|
||||||
BSSSection = getOrCreateSection("\t.bss", false, SectionKind::getBSS());
|
BSSSection = getELFSection("\t.bss", false, SectionKind::getBSS());
|
||||||
|
|
||||||
|
|
||||||
TextSection = getOrCreateSection("\t.text", true, SectionKind::getText());
|
TextSection = getELFSection("\t.text", true, SectionKind::getText());
|
||||||
DataSection = getOrCreateSection("\t.data", true, SectionKind::getDataRel());
|
DataSection = getELFSection("\t.data", true, SectionKind::getDataRel());
|
||||||
ReadOnlySection =
|
ReadOnlySection =
|
||||||
getOrCreateSection("\t.rodata", false, SectionKind::getReadOnly());
|
getELFSection("\t.rodata", false, SectionKind::getReadOnly());
|
||||||
TLSDataSection =
|
TLSDataSection =
|
||||||
getOrCreateSection("\t.tdata", false, SectionKind::getThreadData());
|
getELFSection("\t.tdata", false, SectionKind::getThreadData());
|
||||||
|
|
||||||
TLSBSSSection = getOrCreateSection("\t.tbss", false,
|
TLSBSSSection = getELFSection("\t.tbss", false,
|
||||||
SectionKind::getThreadBSS());
|
SectionKind::getThreadBSS());
|
||||||
|
|
||||||
DataRelSection = getOrCreateSection("\t.data.rel", false,
|
DataRelSection = getELFSection("\t.data.rel", false,
|
||||||
SectionKind::getDataRel());
|
SectionKind::getDataRel());
|
||||||
DataRelLocalSection = getOrCreateSection("\t.data.rel.local", false,
|
DataRelLocalSection = getELFSection("\t.data.rel.local", false,
|
||||||
SectionKind::getDataRelLocal());
|
SectionKind::getDataRelLocal());
|
||||||
DataRelROSection = getOrCreateSection("\t.data.rel.ro", false,
|
DataRelROSection = getELFSection("\t.data.rel.ro", false,
|
||||||
SectionKind::getReadOnlyWithRel());
|
SectionKind::getReadOnlyWithRel());
|
||||||
DataRelROLocalSection =
|
DataRelROLocalSection =
|
||||||
getOrCreateSection("\t.data.rel.ro.local", false,
|
getELFSection("\t.data.rel.ro.local", false,
|
||||||
SectionKind::getReadOnlyWithRelLocal());
|
SectionKind::getReadOnlyWithRelLocal());
|
||||||
|
|
||||||
MergeableConst4Section = getOrCreateSection(".rodata.cst4", false,
|
MergeableConst4Section = getELFSection(".rodata.cst4", false,
|
||||||
SectionKind::getMergeableConst4());
|
SectionKind::getMergeableConst4());
|
||||||
MergeableConst8Section = getOrCreateSection(".rodata.cst8", false,
|
MergeableConst8Section = getELFSection(".rodata.cst8", false,
|
||||||
SectionKind::getMergeableConst8());
|
SectionKind::getMergeableConst8());
|
||||||
MergeableConst16Section = getOrCreateSection(".rodata.cst16", false,
|
MergeableConst16Section = getELFSection(".rodata.cst16", false,
|
||||||
SectionKind::getMergeableConst16());
|
SectionKind::getMergeableConst16());
|
||||||
|
|
||||||
StaticCtorSection =
|
StaticCtorSection =
|
||||||
getOrCreateSection(".ctors", false, SectionKind::getDataRel());
|
getELFSection(".ctors", false, SectionKind::getDataRel());
|
||||||
StaticDtorSection =
|
StaticDtorSection =
|
||||||
getOrCreateSection(".dtors", false, SectionKind::getDataRel());
|
getELFSection(".dtors", false, SectionKind::getDataRel());
|
||||||
|
|
||||||
// Exception Handling Sections.
|
// Exception Handling Sections.
|
||||||
|
|
||||||
@ -339,33 +339,33 @@ void TargetLoweringObjectFileELF::Initialize(MCContext &Ctx,
|
|||||||
// runtime hit for C++ apps. Either the contents of the LSDA need to be
|
// runtime hit for C++ apps. Either the contents of the LSDA need to be
|
||||||
// adjusted or this should be a data section.
|
// adjusted or this should be a data section.
|
||||||
LSDASection =
|
LSDASection =
|
||||||
getOrCreateSection(".gcc_except_table", false, SectionKind::getReadOnly());
|
getELFSection(".gcc_except_table", false, SectionKind::getReadOnly());
|
||||||
EHFrameSection =
|
EHFrameSection =
|
||||||
getOrCreateSection(".eh_frame", false, SectionKind::getDataRel());
|
getELFSection(".eh_frame", false, SectionKind::getDataRel());
|
||||||
|
|
||||||
// Debug Info Sections.
|
// Debug Info Sections.
|
||||||
DwarfAbbrevSection =
|
DwarfAbbrevSection =
|
||||||
getOrCreateSection(".debug_abbrev", false, SectionKind::getMetadata());
|
getELFSection(".debug_abbrev", false, SectionKind::getMetadata());
|
||||||
DwarfInfoSection =
|
DwarfInfoSection =
|
||||||
getOrCreateSection(".debug_info", false, SectionKind::getMetadata());
|
getELFSection(".debug_info", false, SectionKind::getMetadata());
|
||||||
DwarfLineSection =
|
DwarfLineSection =
|
||||||
getOrCreateSection(".debug_line", false, SectionKind::getMetadata());
|
getELFSection(".debug_line", false, SectionKind::getMetadata());
|
||||||
DwarfFrameSection =
|
DwarfFrameSection =
|
||||||
getOrCreateSection(".debug_frame", false, SectionKind::getMetadata());
|
getELFSection(".debug_frame", false, SectionKind::getMetadata());
|
||||||
DwarfPubNamesSection =
|
DwarfPubNamesSection =
|
||||||
getOrCreateSection(".debug_pubnames", false, SectionKind::getMetadata());
|
getELFSection(".debug_pubnames", false, SectionKind::getMetadata());
|
||||||
DwarfPubTypesSection =
|
DwarfPubTypesSection =
|
||||||
getOrCreateSection(".debug_pubtypes", false, SectionKind::getMetadata());
|
getELFSection(".debug_pubtypes", false, SectionKind::getMetadata());
|
||||||
DwarfStrSection =
|
DwarfStrSection =
|
||||||
getOrCreateSection(".debug_str", false, SectionKind::getMetadata());
|
getELFSection(".debug_str", false, SectionKind::getMetadata());
|
||||||
DwarfLocSection =
|
DwarfLocSection =
|
||||||
getOrCreateSection(".debug_loc", false, SectionKind::getMetadata());
|
getELFSection(".debug_loc", false, SectionKind::getMetadata());
|
||||||
DwarfARangesSection =
|
DwarfARangesSection =
|
||||||
getOrCreateSection(".debug_aranges", false, SectionKind::getMetadata());
|
getELFSection(".debug_aranges", false, SectionKind::getMetadata());
|
||||||
DwarfRangesSection =
|
DwarfRangesSection =
|
||||||
getOrCreateSection(".debug_ranges", false, SectionKind::getMetadata());
|
getELFSection(".debug_ranges", false, SectionKind::getMetadata());
|
||||||
DwarfMacroInfoSection =
|
DwarfMacroInfoSection =
|
||||||
getOrCreateSection(".debug_macinfo", false, SectionKind::getMetadata());
|
getELFSection(".debug_macinfo", false, SectionKind::getMetadata());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -401,7 +401,7 @@ getExplicitSectionGlobal(const GlobalValue *GV, SectionKind Kind,
|
|||||||
// Infer section flags from the section name if we can.
|
// Infer section flags from the section name if we can.
|
||||||
Kind = getELFKindForNamedSection(GV->getSection().c_str(), Kind);
|
Kind = getELFKindForNamedSection(GV->getSection().c_str(), Kind);
|
||||||
|
|
||||||
return getOrCreateSection(GV->getSection().c_str(), false, Kind);
|
return getELFSection(GV->getSection().c_str(), false, Kind);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -497,7 +497,7 @@ SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
|
|||||||
if (GV->isWeakForLinker()) {
|
if (GV->isWeakForLinker()) {
|
||||||
const char *Prefix = getSectionPrefixForUniqueGlobal(Kind);
|
const char *Prefix = getSectionPrefixForUniqueGlobal(Kind);
|
||||||
std::string Name = Mang->makeNameProper(GV->getNameStr());
|
std::string Name = Mang->makeNameProper(GV->getNameStr());
|
||||||
return getOrCreateSection((Prefix+Name).c_str(), false, Kind);
|
return getELFSection((Prefix+Name).c_str(), false, Kind);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Kind.isText()) return TextSection;
|
if (Kind.isText()) return TextSection;
|
||||||
@ -522,7 +522,7 @@ SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
|
|||||||
|
|
||||||
|
|
||||||
std::string Name = SizeSpec + utostr(Align);
|
std::string Name = SizeSpec + utostr(Align);
|
||||||
return getOrCreateSection(Name.c_str(), false, Kind);
|
return getELFSection(Name.c_str(), false, Kind);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Kind.isMergeableConst()) {
|
if (Kind.isMergeableConst()) {
|
||||||
@ -574,36 +574,29 @@ getSectionForConstant(SectionKind Kind) const {
|
|||||||
// MachO
|
// MachO
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
|
||||||
const MCSection *TargetLoweringObjectFileMachO::
|
const MCSection *TargetLoweringObjectFileMachO::
|
||||||
getOrCreateSection(const char *Name, bool isDirective, SectionKind Kind) const {
|
getMachOSection(const char *Name, bool isDirective, SectionKind Kind) const {
|
||||||
if (MCSection *S = getContext().GetSection(Name))
|
if (MCSection *S = getContext().GetSection(Name))
|
||||||
return S;
|
return S;
|
||||||
return MCSection::Create(Name, isDirective, Kind, getContext());
|
return MCSection::Create(Name, isDirective, Kind, getContext());
|
||||||
}
|
}
|
||||||
|
|
||||||
const MCSection *TargetLoweringObjectFileMachO::
|
|
||||||
getMachOSection(const char *Name, bool isDirective, SectionKind K) {
|
|
||||||
// FOR NOW, Just forward.
|
|
||||||
return getOrCreateSection(Name, isDirective, K);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void TargetLoweringObjectFileMachO::Initialize(MCContext &Ctx,
|
void TargetLoweringObjectFileMachO::Initialize(MCContext &Ctx,
|
||||||
const TargetMachine &TM) {
|
const TargetMachine &TM) {
|
||||||
TargetLoweringObjectFile::Initialize(Ctx, TM);
|
TargetLoweringObjectFile::Initialize(Ctx, TM);
|
||||||
TextSection = getOrCreateSection("\t.text", true,
|
TextSection = getMachOSection("\t.text", true, SectionKind::getText());
|
||||||
SectionKind::getText());
|
DataSection = getMachOSection("\t.data", true, SectionKind::getDataRel());
|
||||||
DataSection = getOrCreateSection("\t.data", true,
|
|
||||||
SectionKind::getDataRel());
|
|
||||||
|
|
||||||
CStringSection = getOrCreateSection("\t.cstring", true,
|
CStringSection = getMachOSection("\t.cstring", true,
|
||||||
SectionKind::getMergeable1ByteCString());
|
SectionKind::getMergeable1ByteCString());
|
||||||
UStringSection = getOrCreateSection("__TEXT,__ustring", false,
|
UStringSection = getMachOSection("__TEXT,__ustring", false,
|
||||||
SectionKind::getMergeable2ByteCString());
|
SectionKind::getMergeable2ByteCString());
|
||||||
FourByteConstantSection = getOrCreateSection("\t.literal4\n", true,
|
FourByteConstantSection = getMachOSection("\t.literal4\n", true,
|
||||||
SectionKind::getMergeableConst4());
|
SectionKind::getMergeableConst4());
|
||||||
EightByteConstantSection = getOrCreateSection("\t.literal8\n", true,
|
EightByteConstantSection = getMachOSection("\t.literal8\n", true,
|
||||||
SectionKind::getMergeableConst8());
|
SectionKind::getMergeableConst8());
|
||||||
|
|
||||||
// ld_classic doesn't support .literal16 in 32-bit mode, and ld64 falls back
|
// ld_classic doesn't support .literal16 in 32-bit mode, and ld64 falls back
|
||||||
@ -611,93 +604,90 @@ void TargetLoweringObjectFileMachO::Initialize(MCContext &Ctx,
|
|||||||
if (TM.getRelocationModel() != Reloc::Static &&
|
if (TM.getRelocationModel() != Reloc::Static &&
|
||||||
TM.getTargetData()->getPointerSize() == 32)
|
TM.getTargetData()->getPointerSize() == 32)
|
||||||
SixteenByteConstantSection =
|
SixteenByteConstantSection =
|
||||||
getOrCreateSection("\t.literal16\n", true,
|
getMachOSection("\t.literal16\n", true,
|
||||||
SectionKind::getMergeableConst16());
|
SectionKind::getMergeableConst16());
|
||||||
else
|
else
|
||||||
SixteenByteConstantSection = 0;
|
SixteenByteConstantSection = 0;
|
||||||
|
|
||||||
ReadOnlySection = getOrCreateSection("\t.const", true,
|
ReadOnlySection = getMachOSection("\t.const", true,
|
||||||
SectionKind::getReadOnly());
|
SectionKind::getReadOnly());
|
||||||
|
|
||||||
TextCoalSection =
|
TextCoalSection =
|
||||||
getOrCreateSection("\t__TEXT,__textcoal_nt,coalesced,pure_instructions",
|
getMachOSection("\t__TEXT,__textcoal_nt,coalesced,pure_instructions",
|
||||||
false, SectionKind::getText());
|
false, SectionKind::getText());
|
||||||
ConstTextCoalSection = getOrCreateSection("\t__TEXT,__const_coal,coalesced",
|
ConstTextCoalSection = getMachOSection("\t__TEXT,__const_coal,coalesced",
|
||||||
false,
|
false, SectionKind::getText());
|
||||||
SectionKind::getText());
|
ConstDataCoalSection = getMachOSection("\t__DATA,__const_coal,coalesced",
|
||||||
ConstDataCoalSection = getOrCreateSection("\t__DATA,__const_coal,coalesced",
|
false, SectionKind::getText());
|
||||||
false,
|
ConstDataSection = getMachOSection("\t.const_data", true,
|
||||||
SectionKind::getText());
|
SectionKind::getReadOnlyWithRel());
|
||||||
ConstDataSection = getOrCreateSection("\t.const_data", true,
|
DataCoalSection = getMachOSection("\t__DATA,__datacoal_nt,coalesced",
|
||||||
SectionKind::getReadOnlyWithRel());
|
false, SectionKind::getDataRel());
|
||||||
DataCoalSection = getOrCreateSection("\t__DATA,__datacoal_nt,coalesced",
|
|
||||||
false,
|
|
||||||
SectionKind::getDataRel());
|
|
||||||
|
|
||||||
if (TM.getRelocationModel() == Reloc::Static) {
|
if (TM.getRelocationModel() == Reloc::Static) {
|
||||||
StaticCtorSection =
|
StaticCtorSection =
|
||||||
getOrCreateSection(".constructor", true, SectionKind::getDataRel());
|
getMachOSection(".constructor", true, SectionKind::getDataRel());
|
||||||
StaticDtorSection =
|
StaticDtorSection =
|
||||||
getOrCreateSection(".destructor", true, SectionKind::getDataRel());
|
getMachOSection(".destructor", true, SectionKind::getDataRel());
|
||||||
} else {
|
} else {
|
||||||
StaticCtorSection =
|
StaticCtorSection =
|
||||||
getOrCreateSection(".mod_init_func", true, SectionKind::getDataRel());
|
getMachOSection(".mod_init_func", true, SectionKind::getDataRel());
|
||||||
StaticDtorSection =
|
StaticDtorSection =
|
||||||
getOrCreateSection(".mod_term_func", true, SectionKind::getDataRel());
|
getMachOSection(".mod_term_func", true, SectionKind::getDataRel());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Exception Handling.
|
// Exception Handling.
|
||||||
LSDASection = getOrCreateSection("__DATA,__gcc_except_tab", false,
|
LSDASection = getMachOSection("__DATA,__gcc_except_tab", false,
|
||||||
SectionKind::getDataRel());
|
SectionKind::getDataRel());
|
||||||
EHFrameSection =
|
EHFrameSection =
|
||||||
getOrCreateSection("__TEXT,__eh_frame,coalesced,no_toc+strip_static_syms"
|
getMachOSection("__TEXT,__eh_frame,coalesced,no_toc+strip_static_syms"
|
||||||
"+live_support", false, SectionKind::getReadOnly());
|
"+live_support", false, SectionKind::getReadOnly());
|
||||||
|
|
||||||
// Debug Information.
|
// Debug Information.
|
||||||
// FIXME: Don't use 'directive' syntax: need flags for debug/regular??
|
// FIXME: Don't use 'directive' syntax: need flags for debug/regular??
|
||||||
// FIXME: Need __DWARF segment.
|
// FIXME: Need __DWARF segment.
|
||||||
DwarfAbbrevSection =
|
DwarfAbbrevSection =
|
||||||
getOrCreateSection(".section __DWARF,__debug_abbrev,regular,debug", true,
|
getMachOSection(".section __DWARF,__debug_abbrev,regular,debug", true,
|
||||||
SectionKind::getMetadata());
|
SectionKind::getMetadata());
|
||||||
DwarfInfoSection =
|
DwarfInfoSection =
|
||||||
getOrCreateSection(".section __DWARF,__debug_info,regular,debug", true,
|
getMachOSection(".section __DWARF,__debug_info,regular,debug", true,
|
||||||
SectionKind::getMetadata());
|
SectionKind::getMetadata());
|
||||||
DwarfLineSection =
|
DwarfLineSection =
|
||||||
getOrCreateSection(".section __DWARF,__debug_line,regular,debug", true,
|
getMachOSection(".section __DWARF,__debug_line,regular,debug", true,
|
||||||
SectionKind::getMetadata());
|
SectionKind::getMetadata());
|
||||||
DwarfFrameSection =
|
DwarfFrameSection =
|
||||||
getOrCreateSection(".section __DWARF,__debug_frame,regular,debug", true,
|
getMachOSection(".section __DWARF,__debug_frame,regular,debug", true,
|
||||||
SectionKind::getMetadata());
|
SectionKind::getMetadata());
|
||||||
DwarfPubNamesSection =
|
DwarfPubNamesSection =
|
||||||
getOrCreateSection(".section __DWARF,__debug_pubnames,regular,debug", true,
|
getMachOSection(".section __DWARF,__debug_pubnames,regular,debug", true,
|
||||||
SectionKind::getMetadata());
|
SectionKind::getMetadata());
|
||||||
DwarfPubTypesSection =
|
DwarfPubTypesSection =
|
||||||
getOrCreateSection(".section __DWARF,__debug_pubtypes,regular,debug", true,
|
getMachOSection(".section __DWARF,__debug_pubtypes,regular,debug", true,
|
||||||
SectionKind::getMetadata());
|
SectionKind::getMetadata());
|
||||||
DwarfStrSection =
|
DwarfStrSection =
|
||||||
getOrCreateSection(".section __DWARF,__debug_str,regular,debug", true,
|
getMachOSection(".section __DWARF,__debug_str,regular,debug", true,
|
||||||
SectionKind::getMetadata());
|
SectionKind::getMetadata());
|
||||||
DwarfLocSection =
|
DwarfLocSection =
|
||||||
getOrCreateSection(".section __DWARF,__debug_loc,regular,debug", true,
|
getMachOSection(".section __DWARF,__debug_loc,regular,debug", true,
|
||||||
SectionKind::getMetadata());
|
SectionKind::getMetadata());
|
||||||
DwarfARangesSection =
|
DwarfARangesSection =
|
||||||
getOrCreateSection(".section __DWARF,__debug_aranges,regular,debug", true,
|
getMachOSection(".section __DWARF,__debug_aranges,regular,debug", true,
|
||||||
SectionKind::getMetadata());
|
SectionKind::getMetadata());
|
||||||
DwarfRangesSection =
|
DwarfRangesSection =
|
||||||
getOrCreateSection(".section __DWARF,__debug_ranges,regular,debug", true,
|
getMachOSection(".section __DWARF,__debug_ranges,regular,debug", true,
|
||||||
SectionKind::getMetadata());
|
SectionKind::getMetadata());
|
||||||
DwarfMacroInfoSection =
|
DwarfMacroInfoSection =
|
||||||
getOrCreateSection(".section __DWARF,__debug_macinfo,regular,debug", true,
|
getMachOSection(".section __DWARF,__debug_macinfo,regular,debug", true,
|
||||||
SectionKind::getMetadata());
|
SectionKind::getMetadata());
|
||||||
DwarfDebugInlineSection =
|
DwarfDebugInlineSection =
|
||||||
getOrCreateSection(".section __DWARF,__debug_inlined,regular,debug", true,
|
getMachOSection(".section __DWARF,__debug_inlined,regular,debug", true,
|
||||||
SectionKind::getMetadata());
|
SectionKind::getMetadata());
|
||||||
}
|
}
|
||||||
|
|
||||||
const MCSection *TargetLoweringObjectFileMachO::
|
const MCSection *TargetLoweringObjectFileMachO::
|
||||||
getExplicitSectionGlobal(const GlobalValue *GV, SectionKind Kind,
|
getExplicitSectionGlobal(const GlobalValue *GV, SectionKind Kind,
|
||||||
Mangler *Mang, const TargetMachine &TM) const {
|
Mangler *Mang, const TargetMachine &TM) const {
|
||||||
return getOrCreateSection(GV->getSection().c_str(), false, Kind);
|
return getMachOSection(GV->getSection().c_str(), false, Kind);
|
||||||
}
|
}
|
||||||
|
|
||||||
const MCSection *TargetLoweringObjectFileMachO::
|
const MCSection *TargetLoweringObjectFileMachO::
|
||||||
@ -794,72 +784,66 @@ shouldEmitUsedDirectiveFor(const GlobalValue *GV, Mangler *Mang) const {
|
|||||||
// COFF
|
// COFF
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
|
||||||
const MCSection *TargetLoweringObjectFileCOFF::
|
const MCSection *TargetLoweringObjectFileCOFF::
|
||||||
getOrCreateSection(const char *Name, bool isDirective, SectionKind Kind) const {
|
getCOFFSection(const char *Name, bool isDirective, SectionKind Kind) const {
|
||||||
if (MCSection *S = getContext().GetSection(Name))
|
if (MCSection *S = getContext().GetSection(Name))
|
||||||
return S;
|
return S;
|
||||||
return MCSection::Create(Name, isDirective, Kind, getContext());
|
return MCSection::Create(Name, isDirective, Kind, getContext());
|
||||||
}
|
}
|
||||||
|
|
||||||
const MCSection *TargetLoweringObjectFileCOFF::
|
|
||||||
getCOFFSection(const char *Name, bool isDirective, SectionKind K) {
|
|
||||||
return getOrCreateSection(Name, isDirective, K);
|
|
||||||
}
|
|
||||||
|
|
||||||
void TargetLoweringObjectFileCOFF::Initialize(MCContext &Ctx,
|
void TargetLoweringObjectFileCOFF::Initialize(MCContext &Ctx,
|
||||||
const TargetMachine &TM) {
|
const TargetMachine &TM) {
|
||||||
TargetLoweringObjectFile::Initialize(Ctx, TM);
|
TargetLoweringObjectFile::Initialize(Ctx, TM);
|
||||||
TextSection = getOrCreateSection("\t.text", true,
|
TextSection = getCOFFSection("\t.text", true, SectionKind::getText());
|
||||||
SectionKind::getText());
|
DataSection = getCOFFSection("\t.data", true, SectionKind::getDataRel());
|
||||||
DataSection = getOrCreateSection("\t.data", true,
|
|
||||||
SectionKind::getDataRel());
|
|
||||||
StaticCtorSection =
|
StaticCtorSection =
|
||||||
getOrCreateSection(".ctors", false, SectionKind::getDataRel());
|
getCOFFSection(".ctors", false, SectionKind::getDataRel());
|
||||||
StaticDtorSection =
|
StaticDtorSection =
|
||||||
getOrCreateSection(".dtors", false, SectionKind::getDataRel());
|
getCOFFSection(".dtors", false, SectionKind::getDataRel());
|
||||||
|
|
||||||
|
|
||||||
// Debug info.
|
// Debug info.
|
||||||
// FIXME: Don't use 'directive' mode here.
|
// FIXME: Don't use 'directive' mode here.
|
||||||
DwarfAbbrevSection =
|
DwarfAbbrevSection =
|
||||||
getOrCreateSection("\t.section\t.debug_abbrev,\"dr\"",
|
getCOFFSection("\t.section\t.debug_abbrev,\"dr\"",
|
||||||
true, SectionKind::getMetadata());
|
true, SectionKind::getMetadata());
|
||||||
DwarfInfoSection =
|
DwarfInfoSection =
|
||||||
getOrCreateSection("\t.section\t.debug_info,\"dr\"",
|
getCOFFSection("\t.section\t.debug_info,\"dr\"",
|
||||||
true, SectionKind::getMetadata());
|
true, SectionKind::getMetadata());
|
||||||
DwarfLineSection =
|
DwarfLineSection =
|
||||||
getOrCreateSection("\t.section\t.debug_line,\"dr\"",
|
getCOFFSection("\t.section\t.debug_line,\"dr\"",
|
||||||
true, SectionKind::getMetadata());
|
true, SectionKind::getMetadata());
|
||||||
DwarfFrameSection =
|
DwarfFrameSection =
|
||||||
getOrCreateSection("\t.section\t.debug_frame,\"dr\"",
|
getCOFFSection("\t.section\t.debug_frame,\"dr\"",
|
||||||
true, SectionKind::getMetadata());
|
true, SectionKind::getMetadata());
|
||||||
DwarfPubNamesSection =
|
DwarfPubNamesSection =
|
||||||
getOrCreateSection("\t.section\t.debug_pubnames,\"dr\"",
|
getCOFFSection("\t.section\t.debug_pubnames,\"dr\"",
|
||||||
true, SectionKind::getMetadata());
|
true, SectionKind::getMetadata());
|
||||||
DwarfPubTypesSection =
|
DwarfPubTypesSection =
|
||||||
getOrCreateSection("\t.section\t.debug_pubtypes,\"dr\"",
|
getCOFFSection("\t.section\t.debug_pubtypes,\"dr\"",
|
||||||
true, SectionKind::getMetadata());
|
true, SectionKind::getMetadata());
|
||||||
DwarfStrSection =
|
DwarfStrSection =
|
||||||
getOrCreateSection("\t.section\t.debug_str,\"dr\"",
|
getCOFFSection("\t.section\t.debug_str,\"dr\"",
|
||||||
true, SectionKind::getMetadata());
|
true, SectionKind::getMetadata());
|
||||||
DwarfLocSection =
|
DwarfLocSection =
|
||||||
getOrCreateSection("\t.section\t.debug_loc,\"dr\"",
|
getCOFFSection("\t.section\t.debug_loc,\"dr\"",
|
||||||
true, SectionKind::getMetadata());
|
true, SectionKind::getMetadata());
|
||||||
DwarfARangesSection =
|
DwarfARangesSection =
|
||||||
getOrCreateSection("\t.section\t.debug_aranges,\"dr\"",
|
getCOFFSection("\t.section\t.debug_aranges,\"dr\"",
|
||||||
true, SectionKind::getMetadata());
|
true, SectionKind::getMetadata());
|
||||||
DwarfRangesSection =
|
DwarfRangesSection =
|
||||||
getOrCreateSection("\t.section\t.debug_ranges,\"dr\"",
|
getCOFFSection("\t.section\t.debug_ranges,\"dr\"",
|
||||||
true, SectionKind::getMetadata());
|
true, SectionKind::getMetadata());
|
||||||
DwarfMacroInfoSection =
|
DwarfMacroInfoSection =
|
||||||
getOrCreateSection("\t.section\t.debug_macinfo,\"dr\"",
|
getCOFFSection("\t.section\t.debug_macinfo,\"dr\"",
|
||||||
true, SectionKind::getMetadata());
|
true, SectionKind::getMetadata());
|
||||||
}
|
}
|
||||||
|
|
||||||
const MCSection *TargetLoweringObjectFileCOFF::
|
const MCSection *TargetLoweringObjectFileCOFF::
|
||||||
getExplicitSectionGlobal(const GlobalValue *GV, SectionKind Kind,
|
getExplicitSectionGlobal(const GlobalValue *GV, SectionKind Kind,
|
||||||
Mangler *Mang, const TargetMachine &TM) const {
|
Mangler *Mang, const TargetMachine &TM) const {
|
||||||
return getOrCreateSection(GV->getSection().c_str(), false, Kind);
|
return getCOFFSection(GV->getSection().c_str(), false, Kind);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -895,7 +879,7 @@ SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
|
|||||||
if (GV->isWeakForLinker()) {
|
if (GV->isWeakForLinker()) {
|
||||||
const char *Prefix = getCOFFSectionPrefixForUniqueGlobal(Kind);
|
const char *Prefix = getCOFFSectionPrefixForUniqueGlobal(Kind);
|
||||||
std::string Name = Mang->makeNameProper(GV->getNameStr());
|
std::string Name = Mang->makeNameProper(GV->getNameStr());
|
||||||
return getOrCreateSection((Prefix+Name).c_str(), false, Kind);
|
return getCOFFSection((Prefix+Name).c_str(), false, Kind);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Kind.isText())
|
if (Kind.isText())
|
||||||
|
@ -16,12 +16,9 @@ using namespace llvm;
|
|||||||
void XCoreTargetObjectFile::Initialize(MCContext &Ctx, const TargetMachine &TM){
|
void XCoreTargetObjectFile::Initialize(MCContext &Ctx, const TargetMachine &TM){
|
||||||
TargetLoweringObjectFileELF::Initialize(Ctx, TM);
|
TargetLoweringObjectFileELF::Initialize(Ctx, TM);
|
||||||
|
|
||||||
TextSection = getOrCreateSection("\t.text", true,
|
TextSection = getELFSection("\t.text", true, SectionKind::getText());
|
||||||
SectionKind::getText());
|
DataSection = getELFSection("\t.dp.data", false, SectionKind::getDataRel());
|
||||||
DataSection = getOrCreateSection("\t.dp.data", false,
|
BSSSection = getELFSection("\t.dp.bss", false, SectionKind::getBSS());
|
||||||
SectionKind::getDataRel());
|
|
||||||
BSSSection = getOrCreateSection("\t.dp.bss", false,
|
|
||||||
SectionKind::getBSS());
|
|
||||||
|
|
||||||
// TLS globals are lowered in the backend to arrays indexed by the current
|
// TLS globals are lowered in the backend to arrays indexed by the current
|
||||||
// thread id. After lowering they require no special handling by the linker
|
// thread id. After lowering they require no special handling by the linker
|
||||||
@ -31,9 +28,9 @@ void XCoreTargetObjectFile::Initialize(MCContext &Ctx, const TargetMachine &TM){
|
|||||||
|
|
||||||
if (TM.getSubtarget<XCoreSubtarget>().isXS1A())
|
if (TM.getSubtarget<XCoreSubtarget>().isXS1A())
|
||||||
// FIXME: Why is this writable ("datarel")???
|
// FIXME: Why is this writable ("datarel")???
|
||||||
ReadOnlySection = getOrCreateSection("\t.dp.rodata", false,
|
ReadOnlySection = getELFSection("\t.dp.rodata", false,
|
||||||
SectionKind::getDataRel());
|
SectionKind::getDataRel());
|
||||||
else
|
else
|
||||||
ReadOnlySection = getOrCreateSection("\t.cp.rodata", false,
|
ReadOnlySection = getELFSection("\t.cp.rodata", false,
|
||||||
SectionKind::getReadOnly());
|
SectionKind::getReadOnly());
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user