mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-04 01:42:09 +00:00
All MCSections are now required to have a SectionKind.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@77787 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
f67e84edef
commit
4a7bc1e5aa
@ -31,35 +31,20 @@ namespace llvm {
|
||||
MCSection(const MCSection&); // DO NOT IMPLEMENT
|
||||
void operator=(const MCSection&); // DO NOT IMPLEMENT
|
||||
protected:
|
||||
MCSection(const StringRef &Name, MCContext &Ctx);
|
||||
// FIXME: HACK.
|
||||
MCSection(const StringRef &Name, SectionKind K, MCContext &Ctx);
|
||||
SectionKind Kind;
|
||||
public:
|
||||
virtual ~MCSection();
|
||||
|
||||
static MCSection *Create(const StringRef &Name, MCContext &Ctx);
|
||||
static MCSection *Create(const StringRef &Name, SectionKind K,
|
||||
MCContext &Ctx);
|
||||
|
||||
const std::string &getName() const { return Name; }
|
||||
SectionKind getKind() const { return Kind; }
|
||||
};
|
||||
|
||||
/// MCSectionWithKind - This is used by targets that use the SectionKind enum
|
||||
/// to classify their sections.
|
||||
class MCSectionWithKind : public MCSection {
|
||||
MCSectionWithKind(const StringRef &Name, SectionKind K, MCContext &Ctx)
|
||||
: MCSection(Name, Ctx) {
|
||||
Kind = K;
|
||||
}
|
||||
public:
|
||||
|
||||
static MCSectionWithKind *Create(const StringRef &Name, SectionKind K,
|
||||
MCContext &Ctx);
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
typedef MCSectionWithKind MCSectionELF;
|
||||
typedef MCSection MCSectionELF;
|
||||
|
||||
} // end namespace llvm
|
||||
|
||||
|
@ -14,18 +14,15 @@ using namespace llvm;
|
||||
MCSection::~MCSection() {
|
||||
}
|
||||
|
||||
MCSection::MCSection(const StringRef &N, MCContext &Ctx) : Name(N) {
|
||||
MCSection::MCSection(const StringRef &N, SectionKind K, MCContext &Ctx)
|
||||
: Name(N), Kind(K) {
|
||||
MCSection *&Entry = Ctx.Sections[Name];
|
||||
assert(Entry == 0 && "Multiple sections with the same name created");
|
||||
Entry = this;
|
||||
}
|
||||
|
||||
MCSection *MCSection::Create(const StringRef &Name, MCContext &Ctx) {
|
||||
return new (Ctx) MCSection(Name, Ctx);
|
||||
MCSection *MCSection::Create(const StringRef &Name, SectionKind K,
|
||||
MCContext &Ctx) {
|
||||
return new (Ctx) MCSection(Name, K, Ctx);
|
||||
}
|
||||
|
||||
|
||||
MCSectionWithKind *
|
||||
MCSectionWithKind::Create(const StringRef &Name, SectionKind K, MCContext &Ctx){
|
||||
return new (Ctx) MCSectionWithKind(Name, K, Ctx);
|
||||
}
|
||||
|
@ -249,7 +249,7 @@ getOrCreateSection(const char *Name, bool isDirective,
|
||||
if (MCSection *S = Ctx->GetSection(Name))
|
||||
return S;
|
||||
SectionKind K = SectionKind::get(Kind, false /*weak*/, !isDirective);
|
||||
return MCSectionWithKind::Create(Name, K, *Ctx);
|
||||
return MCSection::Create(Name, K, *Ctx);
|
||||
}
|
||||
|
||||
|
||||
|
@ -662,7 +662,7 @@ bool AsmParser::ParseDirectiveDarwinSection() {
|
||||
// FIXME: Arch specific.
|
||||
MCSection *S = Ctx.GetSection(Section);
|
||||
if (S == 0)
|
||||
S = MCSection::Create(Section, Ctx);
|
||||
S = MCSection::Create(Section, SectionKind(), Ctx);
|
||||
|
||||
Out.SwitchSection(S);
|
||||
return false;
|
||||
@ -683,7 +683,7 @@ bool AsmParser::ParseDirectiveSectionSwitch(const char *Section,
|
||||
// FIXME: Arch specific.
|
||||
MCSection *S = Ctx.GetSection(Section);
|
||||
if (S == 0)
|
||||
S = MCSection::Create(Section, Ctx);
|
||||
S = MCSection::Create(Section, SectionKind(), Ctx);
|
||||
|
||||
Out.SwitchSection(S);
|
||||
return false;
|
||||
@ -1074,7 +1074,7 @@ bool AsmParser::ParseDirectiveDarwinZerofill() {
|
||||
// FIXME: Arch specific.
|
||||
MCSection *S = Ctx.GetSection(Section);
|
||||
if (S == 0)
|
||||
S = MCSection::Create(Section, Ctx);
|
||||
S = MCSection::Create(Section, SectionKind(), Ctx);
|
||||
|
||||
// Create the zerofill section but no symbol
|
||||
Out.EmitZerofill(S);
|
||||
@ -1134,7 +1134,7 @@ bool AsmParser::ParseDirectiveDarwinZerofill() {
|
||||
// FIXME: Arch specific.
|
||||
MCSection *S = Ctx.GetSection(Section);
|
||||
if (S == 0)
|
||||
S = MCSection::Create(Section, Ctx);
|
||||
S = MCSection::Create(Section, SectionKind(), Ctx);
|
||||
|
||||
// Create the zerofill Symbol with Size and Pow2Alignment
|
||||
Out.EmitZerofill(S, Sym, Size, Pow2Alignment);
|
||||
|
@ -191,7 +191,9 @@ static int AssembleInput(const char *ProgName) {
|
||||
|
||||
// FIXME: Target hook & command line option for initial section.
|
||||
Str.get()->SwitchSection(MCSection::Create("__TEXT,__text,"
|
||||
"regular,pure_instructions", Ctx));
|
||||
"regular,pure_instructions",
|
||||
SectionKind::get(SectionKind::Text),
|
||||
Ctx));
|
||||
|
||||
AsmParser Parser(SrcMgr, Ctx, *Str.get());
|
||||
OwningPtr<TargetAsmParser> TAP(GetTargetAsmParser(ProgName, Parser));
|
||||
|
Loading…
Reference in New Issue
Block a user