[llvm-commits] [llvm] r126127 - in /llvm/trunk/lib: CodeGen/TargetLoweringObjectFileImpl.cpp MC/MCSectionMachO.cpp
Daniel Dunbar
daniel at zuster.org
Thu Mar 17 11:09:01 PDT 2011
Hi Stuart,
On Mon, Feb 21, 2011 at 9:27 AM, Stuart Hastings <stuart at apple.com> wrote:
> Author: stuart
> Date: Mon Feb 21 11:27:17 2011
> New Revision: 126127
>
> URL: http://llvm.org/viewvc/llvm-project?rev=126127&view=rev
> Log:
> Fix to correctly support attribute((section("__DATA, __common"))).
> Radar 9012638.
>
> Modified:
> llvm/trunk/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
> llvm/trunk/lib/MC/MCSectionMachO.cpp
>
> Modified: llvm/trunk/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/TargetLoweringObjectFileImpl.cpp?rev=126127&r1=126126&r2=126127&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/TargetLoweringObjectFileImpl.cpp (original)
> +++ llvm/trunk/lib/CodeGen/TargetLoweringObjectFileImpl.cpp Mon Feb 21 11:27:17 2011
> @@ -630,7 +630,7 @@
> Mangler *Mang, const TargetMachine &TM) const {
> // Parse the section specifier and create it if valid.
> StringRef Segment, Section;
> - unsigned TAA, StubSize;
> + unsigned TAA = (unsigned)MCSectionMachO::SECTION_ATTRIBUTES, StubSize = 0;
> std::string ErrorCode =
> MCSectionMachO::ParseSectionSpecifier(GV->getSection(), Segment, Section,
> TAA, StubSize);
> @@ -643,10 +643,19 @@
> return DataSection;
> }
>
> + bool TAAWasSet = (TAA != MCSectionMachO::SECTION_ATTRIBUTES);
> + if (!TAAWasSet)
> + TAA = 0; // Sensible default if this is a new section.
> +
> // Get the section.
> const MCSectionMachO *S =
> 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.
> // If the user declared multiple globals with different section flags, we need
> // to reject it here.
>
> Modified: llvm/trunk/lib/MC/MCSectionMachO.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCSectionMachO.cpp?rev=126127&r1=126126&r2=126127&view=diff
> ==============================================================================
> --- llvm/trunk/lib/MC/MCSectionMachO.cpp (original)
> +++ llvm/trunk/lib/MC/MCSectionMachO.cpp Mon Feb 21 11:27:17 2011
> @@ -101,16 +101,16 @@
> return;
> }
>
> - OS << ',';
> -
> unsigned SectionType = TAA & MCSectionMachO::SECTION_TYPE;
> assert(SectionType <= MCSectionMachO::LAST_KNOWN_SECTION_TYPE &&
> "Invalid SectionType specified!");
>
> - if (SectionTypeDescriptors[SectionType].AssemblerName)
> + if (SectionTypeDescriptors[SectionType].AssemblerName) {
> + OS << ',';
> OS << SectionTypeDescriptors[SectionType].AssemblerName;
> - else
> - OS << "<<" << SectionTypeDescriptors[SectionType].EnumName << ">>";
> + } else
> + // If we have no name for the attribute, stop here.
> + return;
>
> // If we don't have any attributes, we're done.
> unsigned SectionAttrs = TAA & MCSectionMachO::SECTION_ATTRIBUTES;
> @@ -125,7 +125,9 @@
>
> // Check each attribute to see if we have it.
> 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.
> if ((SectionAttrDescriptors[i].AttrFlag & SectionAttrs) == 0)
> continue;
> @@ -207,7 +209,6 @@
> "between 1 and 16 characters";
>
> // If there is no comma after the section, we're done.
> - TAA = 0;
It looks like you changed the semantics of ParseSectionSpecifier, but
didn't update all callers. The side effect is that this ends up
allowing MC to emit sections with bogus flags.
I added a minimal fix in r127812, but I find the code in
TargetLoweringObjectFileImpl a bit gross. Is it just using
MCSectionMachO::SECTION_ATTRIBUTES as a sentinel value? I think it
would be better to have ParseSectionSpecifier explicitly return a bool
indicating whether the TAA was parsed or not, instead of using a
sentinel. Or at a minimum, it would be good to comment what
TargetLoweringObjectFileMachO::getExplicitSectionGlobal is doing.
Thanks,
- Daniel
> StubSize = 0;
> if (Comma.second.empty())
> return "";
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
More information about the llvm-commits
mailing list