mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 19:23:23 +01:00
Remove more duplicated code.
llvm-svn: 124056
This commit is contained in:
parent
d857dd6882
commit
492ad6ca06
@ -15,6 +15,7 @@
|
||||
#define LLVM_MC_MCSECTIONELF_H
|
||||
|
||||
#include "llvm/MC/MCSection.h"
|
||||
#include "llvm/Support/ELF.h"
|
||||
|
||||
namespace llvm {
|
||||
|
||||
@ -59,53 +60,6 @@ public:
|
||||
/// header index.
|
||||
bool HasCommonSymbols() const;
|
||||
|
||||
/// Valid section flags.
|
||||
enum {
|
||||
// The section contains data that should be writable.
|
||||
SHF_WRITE = 0x1U,
|
||||
|
||||
// The section occupies memory during execution.
|
||||
SHF_ALLOC = 0x2U,
|
||||
|
||||
// The section contains executable machine instructions.
|
||||
SHF_EXECINSTR = 0x4U,
|
||||
|
||||
// The data in the section may be merged to eliminate duplication.
|
||||
SHF_MERGE = 0x10U,
|
||||
|
||||
// Elements in the section consist of null-terminated character strings.
|
||||
SHF_STRINGS = 0x20U,
|
||||
|
||||
// A field in this section holds a section header table index.
|
||||
SHF_INFO_LINK = 0x40U,
|
||||
|
||||
// Adds special ordering requirements for link editors.
|
||||
SHF_LINK_ORDER = 0x80U,
|
||||
|
||||
// This section requires special OS-specific processing to avoid incorrect
|
||||
// behavior.
|
||||
SHF_OS_NONCONFORMING = 0x100U,
|
||||
|
||||
// This section is a member of a section group.
|
||||
SHF_GROUP = 0x200U,
|
||||
|
||||
// This section holds Thread-Local Storage.
|
||||
SHF_TLS = 0x400U,
|
||||
|
||||
|
||||
// Start of target-specific flags.
|
||||
|
||||
/// XCORE_SHF_CP_SECTION - All sections with the "c" flag are grouped
|
||||
/// together by the linker to form the constant pool and the cp register is
|
||||
/// set to the start of the constant pool by the boot code.
|
||||
XCORE_SHF_CP_SECTION = 0x800U,
|
||||
|
||||
/// XCORE_SHF_DP_SECTION - All sections with the "d" flag are grouped
|
||||
/// together by the linker to form the data section and the dp register is
|
||||
/// set to the start of the section by the boot code.
|
||||
XCORE_SHF_DP_SECTION = 0x1000U
|
||||
};
|
||||
|
||||
StringRef getSectionName() const { return SectionName; }
|
||||
unsigned getType() const { return Type; }
|
||||
unsigned getFlags() const { return Flags; }
|
||||
@ -120,7 +74,7 @@ public:
|
||||
/// isBaseAddressKnownZero - We know that non-allocatable sections (like
|
||||
/// debug info) have a base of zero.
|
||||
virtual bool isBaseAddressKnownZero() const {
|
||||
return (getFlags() & SHF_ALLOC) == 0;
|
||||
return (getFlags() & ELF::SHF_ALLOC) == 0;
|
||||
}
|
||||
|
||||
static bool classof(const MCSection *S) {
|
||||
|
@ -508,12 +508,51 @@ enum {
|
||||
|
||||
// Section flags.
|
||||
enum {
|
||||
SHF_WRITE = 0x1, // Section data should be writable during execution.
|
||||
SHF_ALLOC = 0x2, // Section occupies memory during program execution.
|
||||
SHF_EXECINSTR = 0x4, // Section contains executable machine instructions.
|
||||
SHF_MERGE = 0x10, // The data in this section may be merged.
|
||||
SHF_STRINGS = 0x20, // The data in this section is null-terminated strings.
|
||||
SHF_MASKPROC = 0xf0000000 // Bits indicating processor-specific flags.
|
||||
// Section data should be writable during execution.
|
||||
SHF_WRITE = 0x1,
|
||||
|
||||
// Section occupies memory during program execution.
|
||||
SHF_ALLOC = 0x2,
|
||||
|
||||
// Section contains executable machine instructions.
|
||||
SHF_EXECINSTR = 0x4,
|
||||
|
||||
// The data in this section may be merged.
|
||||
SHF_MERGE = 0x10,
|
||||
|
||||
// The data in this section is null-terminated strings.
|
||||
SHF_STRINGS = 0x20,
|
||||
|
||||
// A field in this section holds a section header table index.
|
||||
SHF_INFO_LINK = 0x40U,
|
||||
|
||||
// Adds special ordering requirements for link editors.
|
||||
SHF_LINK_ORDER = 0x80U,
|
||||
|
||||
// This section requires special OS-specific processing to avoid incorrect
|
||||
// behavior.
|
||||
SHF_OS_NONCONFORMING = 0x100U,
|
||||
|
||||
// This section is a member of a section group.
|
||||
SHF_GROUP = 0x200U,
|
||||
|
||||
// This section holds Thread-Local Storage.
|
||||
SHF_TLS = 0x400U,
|
||||
|
||||
// Start of target-specific flags.
|
||||
|
||||
/// XCORE_SHF_CP_SECTION - All sections with the "c" flag are grouped
|
||||
/// together by the linker to form the constant pool and the cp register is
|
||||
/// set to the start of the constant pool by the boot code.
|
||||
XCORE_SHF_CP_SECTION = 0x800U,
|
||||
|
||||
/// XCORE_SHF_DP_SECTION - All sections with the "d" flag are grouped
|
||||
/// together by the linker to form the data section and the dp register is
|
||||
/// set to the start of the section by the boot code.
|
||||
XCORE_SHF_DP_SECTION = 0x1000U,
|
||||
|
||||
// Bits indicating processor-specific flags.
|
||||
SHF_MASKPROC = 0xf0000000
|
||||
};
|
||||
|
||||
// Section Group Flags
|
||||
|
@ -48,80 +48,80 @@ void TargetLoweringObjectFileELF::Initialize(MCContext &Ctx,
|
||||
|
||||
BSSSection =
|
||||
getContext().getELFSection(".bss", ELF::SHT_NOBITS,
|
||||
MCSectionELF::SHF_WRITE |MCSectionELF::SHF_ALLOC,
|
||||
ELF::SHF_WRITE |ELF::SHF_ALLOC,
|
||||
SectionKind::getBSS());
|
||||
|
||||
TextSection =
|
||||
getContext().getELFSection(".text", ELF::SHT_PROGBITS,
|
||||
MCSectionELF::SHF_EXECINSTR |
|
||||
MCSectionELF::SHF_ALLOC,
|
||||
ELF::SHF_EXECINSTR |
|
||||
ELF::SHF_ALLOC,
|
||||
SectionKind::getText());
|
||||
|
||||
DataSection =
|
||||
getContext().getELFSection(".data", ELF::SHT_PROGBITS,
|
||||
MCSectionELF::SHF_WRITE |MCSectionELF::SHF_ALLOC,
|
||||
ELF::SHF_WRITE |ELF::SHF_ALLOC,
|
||||
SectionKind::getDataRel());
|
||||
|
||||
ReadOnlySection =
|
||||
getContext().getELFSection(".rodata", ELF::SHT_PROGBITS,
|
||||
MCSectionELF::SHF_ALLOC,
|
||||
ELF::SHF_ALLOC,
|
||||
SectionKind::getReadOnly());
|
||||
|
||||
TLSDataSection =
|
||||
getContext().getELFSection(".tdata", ELF::SHT_PROGBITS,
|
||||
MCSectionELF::SHF_ALLOC | MCSectionELF::SHF_TLS |
|
||||
MCSectionELF::SHF_WRITE,
|
||||
ELF::SHF_ALLOC | ELF::SHF_TLS |
|
||||
ELF::SHF_WRITE,
|
||||
SectionKind::getThreadData());
|
||||
|
||||
TLSBSSSection =
|
||||
getContext().getELFSection(".tbss", ELF::SHT_NOBITS,
|
||||
MCSectionELF::SHF_ALLOC | MCSectionELF::SHF_TLS |
|
||||
MCSectionELF::SHF_WRITE,
|
||||
ELF::SHF_ALLOC | ELF::SHF_TLS |
|
||||
ELF::SHF_WRITE,
|
||||
SectionKind::getThreadBSS());
|
||||
|
||||
DataRelSection =
|
||||
getContext().getELFSection(".data.rel", ELF::SHT_PROGBITS,
|
||||
MCSectionELF::SHF_ALLOC |MCSectionELF::SHF_WRITE,
|
||||
ELF::SHF_ALLOC |ELF::SHF_WRITE,
|
||||
SectionKind::getDataRel());
|
||||
|
||||
DataRelLocalSection =
|
||||
getContext().getELFSection(".data.rel.local", ELF::SHT_PROGBITS,
|
||||
MCSectionELF::SHF_ALLOC |MCSectionELF::SHF_WRITE,
|
||||
ELF::SHF_ALLOC |ELF::SHF_WRITE,
|
||||
SectionKind::getDataRelLocal());
|
||||
|
||||
DataRelROSection =
|
||||
getContext().getELFSection(".data.rel.ro", ELF::SHT_PROGBITS,
|
||||
MCSectionELF::SHF_ALLOC |MCSectionELF::SHF_WRITE,
|
||||
ELF::SHF_ALLOC |ELF::SHF_WRITE,
|
||||
SectionKind::getReadOnlyWithRel());
|
||||
|
||||
DataRelROLocalSection =
|
||||
getContext().getELFSection(".data.rel.ro.local", ELF::SHT_PROGBITS,
|
||||
MCSectionELF::SHF_ALLOC |MCSectionELF::SHF_WRITE,
|
||||
ELF::SHF_ALLOC |ELF::SHF_WRITE,
|
||||
SectionKind::getReadOnlyWithRelLocal());
|
||||
|
||||
MergeableConst4Section =
|
||||
getContext().getELFSection(".rodata.cst4", ELF::SHT_PROGBITS,
|
||||
MCSectionELF::SHF_ALLOC |MCSectionELF::SHF_MERGE,
|
||||
ELF::SHF_ALLOC |ELF::SHF_MERGE,
|
||||
SectionKind::getMergeableConst4());
|
||||
|
||||
MergeableConst8Section =
|
||||
getContext().getELFSection(".rodata.cst8", ELF::SHT_PROGBITS,
|
||||
MCSectionELF::SHF_ALLOC |MCSectionELF::SHF_MERGE,
|
||||
ELF::SHF_ALLOC |ELF::SHF_MERGE,
|
||||
SectionKind::getMergeableConst8());
|
||||
|
||||
MergeableConst16Section =
|
||||
getContext().getELFSection(".rodata.cst16", ELF::SHT_PROGBITS,
|
||||
MCSectionELF::SHF_ALLOC |MCSectionELF::SHF_MERGE,
|
||||
ELF::SHF_ALLOC |ELF::SHF_MERGE,
|
||||
SectionKind::getMergeableConst16());
|
||||
|
||||
StaticCtorSection =
|
||||
getContext().getELFSection(".ctors", ELF::SHT_PROGBITS,
|
||||
MCSectionELF::SHF_ALLOC |MCSectionELF::SHF_WRITE,
|
||||
ELF::SHF_ALLOC |ELF::SHF_WRITE,
|
||||
SectionKind::getDataRel());
|
||||
|
||||
StaticDtorSection =
|
||||
getContext().getELFSection(".dtors", ELF::SHT_PROGBITS,
|
||||
MCSectionELF::SHF_ALLOC |MCSectionELF::SHF_WRITE,
|
||||
ELF::SHF_ALLOC |ELF::SHF_WRITE,
|
||||
SectionKind::getDataRel());
|
||||
|
||||
// Exception Handling Sections.
|
||||
@ -132,11 +132,11 @@ void TargetLoweringObjectFileELF::Initialize(MCContext &Ctx,
|
||||
// adjusted or this should be a data section.
|
||||
LSDASection =
|
||||
getContext().getELFSection(".gcc_except_table", ELF::SHT_PROGBITS,
|
||||
MCSectionELF::SHF_ALLOC,
|
||||
ELF::SHF_ALLOC,
|
||||
SectionKind::getReadOnly());
|
||||
EHFrameSection =
|
||||
getContext().getELFSection(".eh_frame", ELF::SHT_PROGBITS,
|
||||
MCSectionELF::SHF_ALLOC,
|
||||
ELF::SHF_ALLOC,
|
||||
SectionKind::getDataRel());
|
||||
|
||||
// Debug Info Sections.
|
||||
@ -230,24 +230,24 @@ getELFSectionFlags(SectionKind K) {
|
||||
unsigned Flags = 0;
|
||||
|
||||
if (!K.isMetadata())
|
||||
Flags |= MCSectionELF::SHF_ALLOC;
|
||||
Flags |= ELF::SHF_ALLOC;
|
||||
|
||||
if (K.isText())
|
||||
Flags |= MCSectionELF::SHF_EXECINSTR;
|
||||
Flags |= ELF::SHF_EXECINSTR;
|
||||
|
||||
if (K.isWriteable())
|
||||
Flags |= MCSectionELF::SHF_WRITE;
|
||||
Flags |= ELF::SHF_WRITE;
|
||||
|
||||
if (K.isThreadLocal())
|
||||
Flags |= MCSectionELF::SHF_TLS;
|
||||
Flags |= ELF::SHF_TLS;
|
||||
|
||||
// K.isMergeableConst() is left out to honour PR4650
|
||||
if (K.isMergeableCString() || K.isMergeableConst4() ||
|
||||
K.isMergeableConst8() || K.isMergeableConst16())
|
||||
Flags |= MCSectionELF::SHF_MERGE;
|
||||
Flags |= ELF::SHF_MERGE;
|
||||
|
||||
if (K.isMergeableCString())
|
||||
Flags |= MCSectionELF::SHF_STRINGS;
|
||||
Flags |= ELF::SHF_STRINGS;
|
||||
|
||||
return Flags;
|
||||
}
|
||||
@ -355,9 +355,9 @@ SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
|
||||
|
||||
std::string Name = SizeSpec + utostr(Align);
|
||||
return getContext().getELFSection(Name, ELF::SHT_PROGBITS,
|
||||
MCSectionELF::SHF_ALLOC |
|
||||
MCSectionELF::SHF_MERGE |
|
||||
MCSectionELF::SHF_STRINGS,
|
||||
ELF::SHF_ALLOC |
|
||||
ELF::SHF_MERGE |
|
||||
ELF::SHF_STRINGS,
|
||||
Kind);
|
||||
}
|
||||
|
||||
|
@ -714,7 +714,7 @@ const MCSymbol *ELFObjectWriter::SymbolToReloc(const MCAssembler &Asm,
|
||||
return &Symbol;
|
||||
}
|
||||
|
||||
if (Section.getFlags() & MCSectionELF::SHF_MERGE) {
|
||||
if (Section.getFlags() & ELF::SHF_MERGE) {
|
||||
if (Target.getConstant() == 0)
|
||||
return NULL;
|
||||
if (Renamed)
|
||||
@ -1183,7 +1183,7 @@ void ELFObjectWriter::CreateGroupSections(MCAssembler &Asm,
|
||||
it != ie; ++it) {
|
||||
const MCSectionELF &Section =
|
||||
static_cast<const MCSectionELF&>(it->getSection());
|
||||
if (!(Section.getFlags() & MCSectionELF::SHF_GROUP))
|
||||
if (!(Section.getFlags() & ELF::SHF_GROUP))
|
||||
continue;
|
||||
|
||||
const MCSymbol *SignatureSymbol = Section.getGroup();
|
||||
@ -1206,7 +1206,7 @@ void ELFObjectWriter::CreateGroupSections(MCAssembler &Asm,
|
||||
it != ie; ++it, ++Index) {
|
||||
const MCSectionELF &Section =
|
||||
static_cast<const MCSectionELF&>(it->getSection());
|
||||
if (!(Section.getFlags() & MCSectionELF::SHF_GROUP))
|
||||
if (!(Section.getFlags() & ELF::SHF_GROUP))
|
||||
continue;
|
||||
const MCSectionELF *Group = RevGroupMap[Section.getGroup()];
|
||||
MCSectionData &Data = Asm.getOrCreateSectionData(*Group);
|
||||
|
@ -156,20 +156,20 @@ private:
|
||||
|
||||
void SetSectionData() {
|
||||
SetSection(".data", ELF::SHT_PROGBITS,
|
||||
MCSectionELF::SHF_WRITE |MCSectionELF::SHF_ALLOC,
|
||||
ELF::SHF_WRITE |ELF::SHF_ALLOC,
|
||||
SectionKind::getDataRel());
|
||||
EmitCodeAlignment(4, 0);
|
||||
}
|
||||
void SetSectionText() {
|
||||
SetSection(".text", ELF::SHT_PROGBITS,
|
||||
MCSectionELF::SHF_EXECINSTR |
|
||||
MCSectionELF::SHF_ALLOC, SectionKind::getText());
|
||||
ELF::SHF_EXECINSTR |
|
||||
ELF::SHF_ALLOC, SectionKind::getText());
|
||||
EmitCodeAlignment(4, 0);
|
||||
}
|
||||
void SetSectionBss() {
|
||||
SetSection(".bss", ELF::SHT_NOBITS,
|
||||
MCSectionELF::SHF_WRITE |
|
||||
MCSectionELF::SHF_ALLOC, SectionKind::getBSS());
|
||||
ELF::SHF_WRITE |
|
||||
ELF::SHF_ALLOC, SectionKind::getBSS());
|
||||
EmitCodeAlignment(4, 0);
|
||||
}
|
||||
};
|
||||
@ -193,7 +193,7 @@ void MCELFStreamer::EmitLabel(MCSymbol *Symbol) {
|
||||
const MCSectionELF &Section =
|
||||
static_cast<const MCSectionELF&>(Symbol->getSection());
|
||||
MCSymbolData &SD = getAssembler().getSymbolData(*Symbol);
|
||||
if (Section.getFlags() & MCSectionELF::SHF_TLS)
|
||||
if (Section.getFlags() & ELF::SHF_TLS)
|
||||
SetType(SD, ELF::STT_TLS);
|
||||
}
|
||||
|
||||
@ -347,8 +347,8 @@ void MCELFStreamer::EmitCommonSymbol(MCSymbol *Symbol, uint64_t Size,
|
||||
if (GetBinding(SD) == ELF_STB_Local) {
|
||||
const MCSection *Section = getAssembler().getContext().getELFSection(".bss",
|
||||
ELF::SHT_NOBITS,
|
||||
MCSectionELF::SHF_WRITE |
|
||||
MCSectionELF::SHF_ALLOC,
|
||||
ELF::SHF_WRITE |
|
||||
ELF::SHF_ALLOC,
|
||||
SectionKind::getBSS());
|
||||
Symbol->setSection(*Section);
|
||||
|
||||
|
@ -61,58 +61,58 @@ public:
|
||||
// the best way for us to get access to it?
|
||||
bool ParseSectionDirectiveData(StringRef, SMLoc) {
|
||||
return ParseSectionSwitch(".data", ELF::SHT_PROGBITS,
|
||||
MCSectionELF::SHF_WRITE |MCSectionELF::SHF_ALLOC,
|
||||
ELF::SHF_WRITE |ELF::SHF_ALLOC,
|
||||
SectionKind::getDataRel());
|
||||
}
|
||||
bool ParseSectionDirectiveText(StringRef, SMLoc) {
|
||||
return ParseSectionSwitch(".text", ELF::SHT_PROGBITS,
|
||||
MCSectionELF::SHF_EXECINSTR |
|
||||
MCSectionELF::SHF_ALLOC, SectionKind::getText());
|
||||
ELF::SHF_EXECINSTR |
|
||||
ELF::SHF_ALLOC, SectionKind::getText());
|
||||
}
|
||||
bool ParseSectionDirectiveBSS(StringRef, SMLoc) {
|
||||
return ParseSectionSwitch(".bss", ELF::SHT_NOBITS,
|
||||
MCSectionELF::SHF_WRITE |
|
||||
MCSectionELF::SHF_ALLOC, SectionKind::getBSS());
|
||||
ELF::SHF_WRITE |
|
||||
ELF::SHF_ALLOC, SectionKind::getBSS());
|
||||
}
|
||||
bool ParseSectionDirectiveRoData(StringRef, SMLoc) {
|
||||
return ParseSectionSwitch(".rodata", ELF::SHT_PROGBITS,
|
||||
MCSectionELF::SHF_ALLOC,
|
||||
ELF::SHF_ALLOC,
|
||||
SectionKind::getReadOnly());
|
||||
}
|
||||
bool ParseSectionDirectiveTData(StringRef, SMLoc) {
|
||||
return ParseSectionSwitch(".tdata", ELF::SHT_PROGBITS,
|
||||
MCSectionELF::SHF_ALLOC |
|
||||
MCSectionELF::SHF_TLS | MCSectionELF::SHF_WRITE,
|
||||
ELF::SHF_ALLOC |
|
||||
ELF::SHF_TLS | ELF::SHF_WRITE,
|
||||
SectionKind::getThreadData());
|
||||
}
|
||||
bool ParseSectionDirectiveTBSS(StringRef, SMLoc) {
|
||||
return ParseSectionSwitch(".tbss", ELF::SHT_NOBITS,
|
||||
MCSectionELF::SHF_ALLOC |
|
||||
MCSectionELF::SHF_TLS | MCSectionELF::SHF_WRITE,
|
||||
ELF::SHF_ALLOC |
|
||||
ELF::SHF_TLS | ELF::SHF_WRITE,
|
||||
SectionKind::getThreadBSS());
|
||||
}
|
||||
bool ParseSectionDirectiveDataRel(StringRef, SMLoc) {
|
||||
return ParseSectionSwitch(".data.rel", ELF::SHT_PROGBITS,
|
||||
MCSectionELF::SHF_ALLOC |
|
||||
MCSectionELF::SHF_WRITE,
|
||||
ELF::SHF_ALLOC |
|
||||
ELF::SHF_WRITE,
|
||||
SectionKind::getDataRel());
|
||||
}
|
||||
bool ParseSectionDirectiveDataRelRo(StringRef, SMLoc) {
|
||||
return ParseSectionSwitch(".data.rel.ro", ELF::SHT_PROGBITS,
|
||||
MCSectionELF::SHF_ALLOC |
|
||||
MCSectionELF::SHF_WRITE,
|
||||
ELF::SHF_ALLOC |
|
||||
ELF::SHF_WRITE,
|
||||
SectionKind::getReadOnlyWithRel());
|
||||
}
|
||||
bool ParseSectionDirectiveDataRelRoLocal(StringRef, SMLoc) {
|
||||
return ParseSectionSwitch(".data.rel.ro.local", ELF::SHT_PROGBITS,
|
||||
MCSectionELF::SHF_ALLOC |
|
||||
MCSectionELF::SHF_WRITE,
|
||||
ELF::SHF_ALLOC |
|
||||
ELF::SHF_WRITE,
|
||||
SectionKind::getReadOnlyWithRelLocal());
|
||||
}
|
||||
bool ParseSectionDirectiveEhFrame(StringRef, SMLoc) {
|
||||
return ParseSectionSwitch(".eh_frame", ELF::SHT_PROGBITS,
|
||||
MCSectionELF::SHF_ALLOC |
|
||||
MCSectionELF::SHF_WRITE,
|
||||
ELF::SHF_ALLOC |
|
||||
ELF::SHF_WRITE,
|
||||
SectionKind::getDataRel());
|
||||
}
|
||||
bool ParseDirectiveSection(StringRef, SMLoc);
|
||||
@ -195,9 +195,9 @@ bool ELFAsmParser::ParseSectionName(StringRef &SectionName) {
|
||||
}
|
||||
|
||||
static SectionKind computeSectionKind(unsigned Flags) {
|
||||
if (Flags & MCSectionELF::SHF_EXECINSTR)
|
||||
if (Flags & ELF::SHF_EXECINSTR)
|
||||
return SectionKind::getText();
|
||||
if (Flags & MCSectionELF::SHF_TLS)
|
||||
if (Flags & ELF::SHF_TLS)
|
||||
return SectionKind::getThreadData();
|
||||
return SectionKind::getDataRel();
|
||||
}
|
||||
@ -208,31 +208,31 @@ static int parseSectionFlags(StringRef flagsStr) {
|
||||
for (unsigned i = 0; i < flagsStr.size(); i++) {
|
||||
switch (flagsStr[i]) {
|
||||
case 'a':
|
||||
flags |= MCSectionELF::SHF_ALLOC;
|
||||
flags |= ELF::SHF_ALLOC;
|
||||
break;
|
||||
case 'x':
|
||||
flags |= MCSectionELF::SHF_EXECINSTR;
|
||||
flags |= ELF::SHF_EXECINSTR;
|
||||
break;
|
||||
case 'w':
|
||||
flags |= MCSectionELF::SHF_WRITE;
|
||||
flags |= ELF::SHF_WRITE;
|
||||
break;
|
||||
case 'M':
|
||||
flags |= MCSectionELF::SHF_MERGE;
|
||||
flags |= ELF::SHF_MERGE;
|
||||
break;
|
||||
case 'S':
|
||||
flags |= MCSectionELF::SHF_STRINGS;
|
||||
flags |= ELF::SHF_STRINGS;
|
||||
break;
|
||||
case 'T':
|
||||
flags |= MCSectionELF::SHF_TLS;
|
||||
flags |= ELF::SHF_TLS;
|
||||
break;
|
||||
case 'c':
|
||||
flags |= MCSectionELF::XCORE_SHF_CP_SECTION;
|
||||
flags |= ELF::XCORE_SHF_CP_SECTION;
|
||||
break;
|
||||
case 'd':
|
||||
flags |= MCSectionELF::XCORE_SHF_DP_SECTION;
|
||||
flags |= ELF::XCORE_SHF_DP_SECTION;
|
||||
break;
|
||||
case 'G':
|
||||
flags |= MCSectionELF::SHF_GROUP;
|
||||
flags |= ELF::SHF_GROUP;
|
||||
break;
|
||||
default:
|
||||
return -1;
|
||||
@ -257,9 +257,9 @@ bool ELFAsmParser::ParseDirectiveSection(StringRef, SMLoc) {
|
||||
// Set the defaults first.
|
||||
if (SectionName == ".fini" || SectionName == ".init" ||
|
||||
SectionName == ".rodata")
|
||||
Flags |= MCSectionELF::SHF_ALLOC;
|
||||
Flags |= ELF::SHF_ALLOC;
|
||||
if (SectionName == ".fini" || SectionName == ".init")
|
||||
Flags |= MCSectionELF::SHF_EXECINSTR;
|
||||
Flags |= ELF::SHF_EXECINSTR;
|
||||
|
||||
if (getLexer().is(AsmToken::Comma)) {
|
||||
Lex();
|
||||
@ -275,8 +275,8 @@ bool ELFAsmParser::ParseDirectiveSection(StringRef, SMLoc) {
|
||||
return TokError("unknown flag");
|
||||
Flags |= extraFlags;
|
||||
|
||||
bool Mergeable = Flags & MCSectionELF::SHF_MERGE;
|
||||
bool Group = Flags & MCSectionELF::SHF_GROUP;
|
||||
bool Mergeable = Flags & ELF::SHF_MERGE;
|
||||
bool Group = Flags & ELF::SHF_GROUP;
|
||||
|
||||
if (getLexer().isNot(AsmToken::Comma)) {
|
||||
if (Mergeable)
|
||||
@ -417,8 +417,8 @@ bool ELFAsmParser::ParseDirectiveIdent(StringRef, SMLoc) {
|
||||
const MCSection *OldSection = getStreamer().getCurrentSection();
|
||||
const MCSection *Comment =
|
||||
getContext().getELFSection(".comment", ELF::SHT_PROGBITS,
|
||||
MCSectionELF::SHF_MERGE |
|
||||
MCSectionELF::SHF_STRINGS,
|
||||
ELF::SHF_MERGE |
|
||||
ELF::SHF_STRINGS,
|
||||
SectionKind::getReadOnly(),
|
||||
1, "");
|
||||
|
||||
|
@ -43,37 +43,37 @@ void MCSectionELF::PrintSwitchToSection(const MCAsmInfo &MAI,
|
||||
|
||||
// Handle the weird solaris syntax if desired.
|
||||
if (MAI.usesSunStyleELFSectionSwitchSyntax() &&
|
||||
!(Flags & MCSectionELF::SHF_MERGE)) {
|
||||
if (Flags & MCSectionELF::SHF_ALLOC)
|
||||
!(Flags & ELF::SHF_MERGE)) {
|
||||
if (Flags & ELF::SHF_ALLOC)
|
||||
OS << ",#alloc";
|
||||
if (Flags & MCSectionELF::SHF_EXECINSTR)
|
||||
if (Flags & ELF::SHF_EXECINSTR)
|
||||
OS << ",#execinstr";
|
||||
if (Flags & MCSectionELF::SHF_WRITE)
|
||||
if (Flags & ELF::SHF_WRITE)
|
||||
OS << ",#write";
|
||||
if (Flags & MCSectionELF::SHF_TLS)
|
||||
if (Flags & ELF::SHF_TLS)
|
||||
OS << ",#tls";
|
||||
OS << '\n';
|
||||
return;
|
||||
}
|
||||
|
||||
OS << ",\"";
|
||||
if (Flags & MCSectionELF::SHF_ALLOC)
|
||||
if (Flags & ELF::SHF_ALLOC)
|
||||
OS << 'a';
|
||||
if (Flags & MCSectionELF::SHF_EXECINSTR)
|
||||
if (Flags & ELF::SHF_EXECINSTR)
|
||||
OS << 'x';
|
||||
if (Flags & MCSectionELF::SHF_WRITE)
|
||||
if (Flags & ELF::SHF_WRITE)
|
||||
OS << 'w';
|
||||
if (Flags & MCSectionELF::SHF_MERGE)
|
||||
if (Flags & ELF::SHF_MERGE)
|
||||
OS << 'M';
|
||||
if (Flags & MCSectionELF::SHF_STRINGS)
|
||||
if (Flags & ELF::SHF_STRINGS)
|
||||
OS << 'S';
|
||||
if (Flags & MCSectionELF::SHF_TLS)
|
||||
if (Flags & ELF::SHF_TLS)
|
||||
OS << 'T';
|
||||
|
||||
// If there are target-specific flags, print them.
|
||||
if (Flags & MCSectionELF::XCORE_SHF_CP_SECTION)
|
||||
if (Flags & ELF::XCORE_SHF_CP_SECTION)
|
||||
OS << 'c';
|
||||
if (Flags & MCSectionELF::XCORE_SHF_DP_SECTION)
|
||||
if (Flags & ELF::XCORE_SHF_DP_SECTION)
|
||||
OS << 'd';
|
||||
|
||||
OS << '"';
|
||||
@ -100,7 +100,7 @@ void MCSectionELF::PrintSwitchToSection(const MCAsmInfo &MAI,
|
||||
OS << "progbits";
|
||||
|
||||
if (EntrySize) {
|
||||
assert(Flags & MCSectionELF::SHF_MERGE);
|
||||
assert(Flags & ELF::SHF_MERGE);
|
||||
OS << "," << EntrySize;
|
||||
}
|
||||
|
||||
@ -108,7 +108,7 @@ void MCSectionELF::PrintSwitchToSection(const MCAsmInfo &MAI,
|
||||
}
|
||||
|
||||
bool MCSectionELF::UseCodeAlign() const {
|
||||
return getFlags() & MCSectionELF::SHF_EXECINSTR;
|
||||
return getFlags() & ELF::SHF_EXECINSTR;
|
||||
}
|
||||
|
||||
bool MCSectionELF::isVirtualSection() const {
|
||||
|
@ -28,13 +28,13 @@ void ARMElfTargetObjectFile::Initialize(MCContext &Ctx,
|
||||
if (TM.getSubtarget<ARMSubtarget>().isAAPCS_ABI()) {
|
||||
StaticCtorSection =
|
||||
getContext().getELFSection(".init_array", ELF::SHT_INIT_ARRAY,
|
||||
MCSectionELF::SHF_WRITE |
|
||||
MCSectionELF::SHF_ALLOC,
|
||||
ELF::SHF_WRITE |
|
||||
ELF::SHF_ALLOC,
|
||||
SectionKind::getDataRel());
|
||||
StaticDtorSection =
|
||||
getContext().getELFSection(".fini_array", ELF::SHT_FINI_ARRAY,
|
||||
MCSectionELF::SHF_WRITE |
|
||||
MCSectionELF::SHF_ALLOC,
|
||||
ELF::SHF_WRITE |
|
||||
ELF::SHF_ALLOC,
|
||||
SectionKind::getDataRel());
|
||||
}
|
||||
|
||||
|
@ -25,12 +25,12 @@ Initialize(MCContext &Ctx, const TargetMachine &TM) {
|
||||
|
||||
SmallDataSection =
|
||||
getContext().getELFSection(".sdata", ELF::SHT_PROGBITS,
|
||||
MCSectionELF::SHF_WRITE |MCSectionELF::SHF_ALLOC,
|
||||
ELF::SHF_WRITE |ELF::SHF_ALLOC,
|
||||
SectionKind::getDataRel());
|
||||
|
||||
SmallBSSSection =
|
||||
getContext().getELFSection(".sbss", ELF::SHT_NOBITS,
|
||||
MCSectionELF::SHF_WRITE |MCSectionELF::SHF_ALLOC,
|
||||
ELF::SHF_WRITE |ELF::SHF_ALLOC,
|
||||
SectionKind::getBSS());
|
||||
|
||||
}
|
||||
|
@ -29,12 +29,12 @@ void MipsTargetObjectFile::Initialize(MCContext &Ctx, const TargetMachine &TM){
|
||||
|
||||
SmallDataSection =
|
||||
getContext().getELFSection(".sdata", ELF::SHT_PROGBITS,
|
||||
MCSectionELF::SHF_WRITE |MCSectionELF::SHF_ALLOC,
|
||||
ELF::SHF_WRITE |ELF::SHF_ALLOC,
|
||||
SectionKind::getDataRel());
|
||||
|
||||
SmallBSSSection =
|
||||
getContext().getELFSection(".sbss", ELF::SHT_NOBITS,
|
||||
MCSectionELF::SHF_WRITE |MCSectionELF::SHF_ALLOC,
|
||||
ELF::SHF_WRITE |ELF::SHF_ALLOC,
|
||||
SectionKind::getBSS());
|
||||
|
||||
}
|
||||
|
@ -297,7 +297,7 @@ public:
|
||||
|
||||
virtual bool doesSectionRequireSymbols(const MCSection &Section) const {
|
||||
const MCSectionELF &ES = static_cast<const MCSectionELF&>(Section);
|
||||
return ES.getFlags() & MCSectionELF::SHF_MERGE;
|
||||
return ES.getFlags() & ELF::SHF_MERGE;
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -21,29 +21,29 @@ void XCoreTargetObjectFile::Initialize(MCContext &Ctx, const TargetMachine &TM){
|
||||
|
||||
DataSection =
|
||||
Ctx.getELFSection(".dp.data", ELF::SHT_PROGBITS,
|
||||
MCSectionELF::SHF_ALLOC | MCSectionELF::SHF_WRITE |
|
||||
MCSectionELF::XCORE_SHF_DP_SECTION,
|
||||
ELF::SHF_ALLOC | ELF::SHF_WRITE |
|
||||
ELF::XCORE_SHF_DP_SECTION,
|
||||
SectionKind::getDataRel());
|
||||
BSSSection =
|
||||
Ctx.getELFSection(".dp.bss", ELF::SHT_NOBITS,
|
||||
MCSectionELF::SHF_ALLOC | MCSectionELF::SHF_WRITE |
|
||||
MCSectionELF::XCORE_SHF_DP_SECTION,
|
||||
ELF::SHF_ALLOC | ELF::SHF_WRITE |
|
||||
ELF::XCORE_SHF_DP_SECTION,
|
||||
SectionKind::getBSS());
|
||||
|
||||
MergeableConst4Section =
|
||||
Ctx.getELFSection(".cp.rodata.cst4", ELF::SHT_PROGBITS,
|
||||
MCSectionELF::SHF_ALLOC | MCSectionELF::SHF_MERGE |
|
||||
MCSectionELF::XCORE_SHF_CP_SECTION,
|
||||
ELF::SHF_ALLOC | ELF::SHF_MERGE |
|
||||
ELF::XCORE_SHF_CP_SECTION,
|
||||
SectionKind::getMergeableConst4());
|
||||
MergeableConst8Section =
|
||||
Ctx.getELFSection(".cp.rodata.cst8", ELF::SHT_PROGBITS,
|
||||
MCSectionELF::SHF_ALLOC | MCSectionELF::SHF_MERGE |
|
||||
MCSectionELF::XCORE_SHF_CP_SECTION,
|
||||
ELF::SHF_ALLOC | ELF::SHF_MERGE |
|
||||
ELF::XCORE_SHF_CP_SECTION,
|
||||
SectionKind::getMergeableConst8());
|
||||
MergeableConst16Section =
|
||||
Ctx.getELFSection(".cp.rodata.cst16", ELF::SHT_PROGBITS,
|
||||
MCSectionELF::SHF_ALLOC | MCSectionELF::SHF_MERGE |
|
||||
MCSectionELF::XCORE_SHF_CP_SECTION,
|
||||
ELF::SHF_ALLOC | ELF::SHF_MERGE |
|
||||
ELF::XCORE_SHF_CP_SECTION,
|
||||
SectionKind::getMergeableConst16());
|
||||
|
||||
// TLS globals are lowered in the backend to arrays indexed by the current
|
||||
@ -54,8 +54,8 @@ void XCoreTargetObjectFile::Initialize(MCContext &Ctx, const TargetMachine &TM){
|
||||
|
||||
ReadOnlySection =
|
||||
Ctx.getELFSection(".cp.rodata", ELF::SHT_PROGBITS,
|
||||
MCSectionELF::SHF_ALLOC |
|
||||
MCSectionELF::XCORE_SHF_CP_SECTION,
|
||||
ELF::SHF_ALLOC |
|
||||
ELF::XCORE_SHF_CP_SECTION,
|
||||
SectionKind::getReadOnlyWithRel());
|
||||
|
||||
// Dynamic linking is not supported. Data with relocations is placed in the
|
||||
|
Loading…
Reference in New Issue
Block a user