MC/Mach-O: Add MCSectionMachO::getType()

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@98582 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Daniel Dunbar 2010-03-15 21:56:38 +00:00
parent 689fac0226
commit 99d22adcad
2 changed files with 10 additions and 15 deletions

View File

@ -151,10 +151,12 @@ public:
return StringRef(SectionName, 16); return StringRef(SectionName, 16);
return StringRef(SectionName); return StringRef(SectionName);
} }
unsigned getTypeAndAttributes() const { return TypeAndAttributes; } unsigned getTypeAndAttributes() const { return TypeAndAttributes; }
unsigned getStubSize() const { return Reserved2; } unsigned getStubSize() const { return Reserved2; }
unsigned getType() const { return TypeAndAttributes & SECTION_TYPE; }
/// ParseSectionSpecifier - Parse the section specifier indicated by "Spec". /// ParseSectionSpecifier - Parse the section specifier indicated by "Spec".
/// This is a string that can appear after a .section directive in a mach-o /// This is a string that can appear after a .section directive in a mach-o
/// flavored .s file. If successful, this fills in the specified Out /// flavored .s file. If successful, this fills in the specified Out
@ -165,7 +167,7 @@ public:
StringRef &Section, // Out. StringRef &Section, // Out.
unsigned &TAA, // Out. unsigned &TAA, // Out.
unsigned &StubSize); // Out. unsigned &StubSize); // Out.
virtual void PrintSwitchToSection(const MCAsmInfo &MAI, virtual void PrintSwitchToSection(const MCAsmInfo &MAI,
raw_ostream &OS) const; raw_ostream &OS) const;
}; };

View File

@ -52,8 +52,7 @@ static uint64_t WriteNopData(uint64_t Count, MachObjectWriter &MOW);
static bool isVirtualSection(const MCSection &Section) { static bool isVirtualSection(const MCSection &Section) {
// FIXME: Lame. // FIXME: Lame.
const MCSectionMachO &SMO = static_cast<const MCSectionMachO&>(Section); const MCSectionMachO &SMO = static_cast<const MCSectionMachO&>(Section);
unsigned Type = SMO.getTypeAndAttributes() & MCSectionMachO::SECTION_TYPE; return (SMO.getType() == MCSectionMachO::S_ZEROFILL);
return (Type == MCSectionMachO::S_ZEROFILL);
} }
static unsigned getFixupKindLog2Size(unsigned Kind) { static unsigned getFixupKindLog2Size(unsigned Kind) {
@ -615,9 +614,7 @@ public:
const MCSectionMachO &Section = const MCSectionMachO &Section =
static_cast<const MCSectionMachO&>(it->SectionData->getSection()); static_cast<const MCSectionMachO&>(it->SectionData->getSection());
unsigned Type = if (Section.getType() != MCSectionMachO::S_NON_LAZY_SYMBOL_POINTERS)
Section.getTypeAndAttributes() & MCSectionMachO::SECTION_TYPE;
if (Type != MCSectionMachO::S_NON_LAZY_SYMBOL_POINTERS)
continue; continue;
Asm.getOrCreateSymbolData(*it->Symbol); Asm.getOrCreateSymbolData(*it->Symbol);
@ -630,10 +627,8 @@ public:
const MCSectionMachO &Section = const MCSectionMachO &Section =
static_cast<const MCSectionMachO&>(it->SectionData->getSection()); static_cast<const MCSectionMachO&>(it->SectionData->getSection());
unsigned Type = if (Section.getType() != MCSectionMachO::S_LAZY_SYMBOL_POINTERS &&
Section.getTypeAndAttributes() & MCSectionMachO::SECTION_TYPE; Section.getType() != MCSectionMachO::S_SYMBOL_STUBS)
if (Type != MCSectionMachO::S_LAZY_SYMBOL_POINTERS &&
Type != MCSectionMachO::S_SYMBOL_STUBS)
continue; continue;
// Set the symbol type to undefined lazy, but only on construction. // Set the symbol type to undefined lazy, but only on construction.
@ -911,9 +906,7 @@ public:
// special handling. // special handling.
const MCSectionMachO &Section = const MCSectionMachO &Section =
static_cast<const MCSectionMachO&>(it->SectionData->getSection()); static_cast<const MCSectionMachO&>(it->SectionData->getSection());
unsigned Type = if (Section.getType() == MCSectionMachO::S_NON_LAZY_SYMBOL_POINTERS) {
Section.getTypeAndAttributes() & MCSectionMachO::SECTION_TYPE;
if (Type == MCSectionMachO::S_NON_LAZY_SYMBOL_POINTERS) {
// If this symbol is defined and internal, mark it as such. // If this symbol is defined and internal, mark it as such.
if (it->Symbol->isDefined() && if (it->Symbol->isDefined() &&
!Asm.getSymbolData(*it->Symbol).isExternal()) { !Asm.getSymbolData(*it->Symbol).isExternal()) {