mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-10 04:33:40 +00:00
Fix to correctly support attribute((section("__DATA, __common"))).
Radar 9012638. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@126127 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
fb456c25c2
commit
6ad82d81cc
@ -630,7 +630,7 @@ getExplicitSectionGlobal(const GlobalValue *GV, SectionKind Kind,
|
|||||||
Mangler *Mang, const TargetMachine &TM) const {
|
Mangler *Mang, const TargetMachine &TM) const {
|
||||||
// Parse the section specifier and create it if valid.
|
// Parse the section specifier and create it if valid.
|
||||||
StringRef Segment, Section;
|
StringRef Segment, Section;
|
||||||
unsigned TAA, StubSize;
|
unsigned TAA = (unsigned)MCSectionMachO::SECTION_ATTRIBUTES, StubSize = 0;
|
||||||
std::string ErrorCode =
|
std::string ErrorCode =
|
||||||
MCSectionMachO::ParseSectionSpecifier(GV->getSection(), Segment, Section,
|
MCSectionMachO::ParseSectionSpecifier(GV->getSection(), Segment, Section,
|
||||||
TAA, StubSize);
|
TAA, StubSize);
|
||||||
@ -643,10 +643,19 @@ getExplicitSectionGlobal(const GlobalValue *GV, SectionKind Kind,
|
|||||||
return DataSection;
|
return DataSection;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool TAAWasSet = (TAA != MCSectionMachO::SECTION_ATTRIBUTES);
|
||||||
|
if (!TAAWasSet)
|
||||||
|
TAA = 0; // Sensible default if this is a new section.
|
||||||
|
|
||||||
// Get the section.
|
// Get the section.
|
||||||
const MCSectionMachO *S =
|
const MCSectionMachO *S =
|
||||||
getContext().getMachOSection(Segment, Section, TAA, StubSize, Kind);
|
getContext().getMachOSection(Segment, Section, TAA, StubSize, Kind);
|
||||||
|
|
||||||
|
// If TAA wasn't set by ParseSectionSpecifier() above,
|
||||||
|
// use the value returned by getMachOSection() as a default.
|
||||||
|
if (!TAAWasSet)
|
||||||
|
TAA = S->getTypeAndAttributes();
|
||||||
|
|
||||||
// Okay, now that we got the section, verify that the TAA & StubSize agree.
|
// Okay, now that we got the section, verify that the TAA & StubSize agree.
|
||||||
// If the user declared multiple globals with different section flags, we need
|
// If the user declared multiple globals with different section flags, we need
|
||||||
// to reject it here.
|
// to reject it here.
|
||||||
|
@ -101,16 +101,16 @@ void MCSectionMachO::PrintSwitchToSection(const MCAsmInfo &MAI,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
OS << ',';
|
|
||||||
|
|
||||||
unsigned SectionType = TAA & MCSectionMachO::SECTION_TYPE;
|
unsigned SectionType = TAA & MCSectionMachO::SECTION_TYPE;
|
||||||
assert(SectionType <= MCSectionMachO::LAST_KNOWN_SECTION_TYPE &&
|
assert(SectionType <= MCSectionMachO::LAST_KNOWN_SECTION_TYPE &&
|
||||||
"Invalid SectionType specified!");
|
"Invalid SectionType specified!");
|
||||||
|
|
||||||
if (SectionTypeDescriptors[SectionType].AssemblerName)
|
if (SectionTypeDescriptors[SectionType].AssemblerName) {
|
||||||
|
OS << ',';
|
||||||
OS << SectionTypeDescriptors[SectionType].AssemblerName;
|
OS << SectionTypeDescriptors[SectionType].AssemblerName;
|
||||||
else
|
} else
|
||||||
OS << "<<" << SectionTypeDescriptors[SectionType].EnumName << ">>";
|
// If we have no name for the attribute, stop here.
|
||||||
|
return;
|
||||||
|
|
||||||
// If we don't have any attributes, we're done.
|
// If we don't have any attributes, we're done.
|
||||||
unsigned SectionAttrs = TAA & MCSectionMachO::SECTION_ATTRIBUTES;
|
unsigned SectionAttrs = TAA & MCSectionMachO::SECTION_ATTRIBUTES;
|
||||||
@ -125,7 +125,9 @@ void MCSectionMachO::PrintSwitchToSection(const MCAsmInfo &MAI,
|
|||||||
|
|
||||||
// Check each attribute to see if we have it.
|
// Check each attribute to see if we have it.
|
||||||
char Separator = ',';
|
char Separator = ',';
|
||||||
for (unsigned i = 0; SectionAttrDescriptors[i].AttrFlag; ++i) {
|
for (unsigned i = 0;
|
||||||
|
SectionAttrs != 0 && SectionAttrDescriptors[i].AttrFlag;
|
||||||
|
++i) {
|
||||||
// Check to see if we have this attribute.
|
// Check to see if we have this attribute.
|
||||||
if ((SectionAttrDescriptors[i].AttrFlag & SectionAttrs) == 0)
|
if ((SectionAttrDescriptors[i].AttrFlag & SectionAttrs) == 0)
|
||||||
continue;
|
continue;
|
||||||
@ -207,7 +209,6 @@ std::string MCSectionMachO::ParseSectionSpecifier(StringRef Spec, // In.
|
|||||||
"between 1 and 16 characters";
|
"between 1 and 16 characters";
|
||||||
|
|
||||||
// If there is no comma after the section, we're done.
|
// If there is no comma after the section, we're done.
|
||||||
TAA = 0;
|
|
||||||
StubSize = 0;
|
StubSize = 0;
|
||||||
if (Comma.second.empty())
|
if (Comma.second.empty())
|
||||||
return "";
|
return "";
|
||||||
|
Loading…
x
Reference in New Issue
Block a user