Remove more duplicated code.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@124056 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Rafael Espindola 2011-01-23 04:43:11 +00:00
parent 907b56ce7a
commit 1c13026e8f
12 changed files with 158 additions and 165 deletions

View File

@ -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) {

View File

@ -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

View File

@ -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);
}

View File

@ -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);

View File

@ -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);

View File

@ -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, "");

View File

@ -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 {

View File

@ -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());
}

View File

@ -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());
}

View File

@ -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());
}

View File

@ -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;
}
};

View File

@ -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