mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-09 13:33:17 +00:00
Move flag decoding stuff into special hook
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@53297 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
29b03f7375
commit
6e405f3f77
@ -474,6 +474,8 @@ namespace llvm {
|
||||
virtual std::string UniqueSectionForGlobal(const GlobalValue* GV,
|
||||
SectionKind::Kind kind) const;
|
||||
|
||||
virtual std::string PrintSectionFlags(unsigned flags) const { return ""; }
|
||||
|
||||
// Accessors.
|
||||
//
|
||||
const char *getTextSection() const {
|
||||
|
@ -411,7 +411,6 @@ std::string X86TargetAsmInfo::UniqueSectionForGlobal(const GlobalValue* GV,
|
||||
|
||||
|
||||
std::string X86TargetAsmInfo::SectionForGlobal(const GlobalValue *GV) const {
|
||||
const X86Subtarget *Subtarget = &X86TM->getSubtarget<X86Subtarget>();
|
||||
SectionKind::Kind kind = SectionKindForGlobal(GV);
|
||||
unsigned flags = SectionFlagsForGlobal(GV, GV->getSection().c_str());
|
||||
std::string Name;
|
||||
@ -471,44 +470,53 @@ std::string X86TargetAsmInfo::SectionForGlobal(const GlobalValue *GV) const {
|
||||
assert(0 && "Unsupported global");
|
||||
}
|
||||
|
||||
Name += PrintSectionFlags(flags);
|
||||
return Name;
|
||||
}
|
||||
|
||||
std::string X86TargetAsmInfo::PrintSectionFlags(unsigned flags) const {
|
||||
const X86Subtarget *Subtarget = &X86TM->getSubtarget<X86Subtarget>();
|
||||
|
||||
std::string Flags = "";
|
||||
|
||||
// Add all special flags, etc
|
||||
switch (Subtarget->TargetType) {
|
||||
case X86Subtarget::isELF:
|
||||
Name += ",\"";
|
||||
Flags += ",\"";
|
||||
|
||||
if (!(flags & SectionFlags::Debug))
|
||||
Name += 'a';
|
||||
Flags += 'a';
|
||||
if (flags & SectionFlags::Code)
|
||||
Name += 'x';
|
||||
Flags += 'x';
|
||||
if (flags & SectionFlags::Writeable)
|
||||
Name += 'w';
|
||||
Flags += 'w';
|
||||
if (flags & SectionFlags::Mergeable)
|
||||
Name += 'M';
|
||||
Flags += 'M';
|
||||
if (flags & SectionFlags::Strings)
|
||||
Name += 'S';
|
||||
Flags += 'S';
|
||||
if (flags & SectionFlags::TLS)
|
||||
Name += 'T';
|
||||
Flags += 'T';
|
||||
|
||||
Name += "\"";
|
||||
Flags += "\"";
|
||||
|
||||
// FIXME: There can be exceptions here
|
||||
if (flags & SectionFlags::BSS)
|
||||
Name += ",@nobits";
|
||||
Flags += ",@nobits";
|
||||
else
|
||||
Name += ",@progbits";
|
||||
Flags += ",@progbits";
|
||||
|
||||
// FIXME: entity size for mergeable sections
|
||||
break;
|
||||
case X86Subtarget::isCygwin:
|
||||
case X86Subtarget::isMingw:
|
||||
Name += ",\"";
|
||||
Flags += ",\"";
|
||||
|
||||
if (flags & SectionFlags::Code)
|
||||
Name += 'x';
|
||||
Flags += 'x';
|
||||
if (flags & SectionFlags::Writeable)
|
||||
Name += 'w';
|
||||
Flags += 'w';
|
||||
|
||||
Name += "\"";
|
||||
Flags += "\"";
|
||||
|
||||
break;
|
||||
case X86Subtarget::isDarwin:
|
||||
@ -517,6 +525,5 @@ std::string X86TargetAsmInfo::SectionForGlobal(const GlobalValue *GV) const {
|
||||
break;
|
||||
}
|
||||
|
||||
return Name;
|
||||
return Flags;
|
||||
}
|
||||
|
||||
|
@ -30,6 +30,7 @@ namespace llvm {
|
||||
virtual std::string SectionForGlobal(const GlobalValue *GV) const;
|
||||
virtual std::string UniqueSectionForGlobal(const GlobalValue* GV,
|
||||
SectionKind::Kind kind) const;
|
||||
virtual std::string PrintSectionFlags(unsigned flags) const;
|
||||
|
||||
private:
|
||||
const X86TargetMachine* X86TM;
|
||||
|
Loading…
x
Reference in New Issue
Block a user