[llvm] r179051 - Template the MachO types over the word size.

Jim Grosbach grosbach at apple.com
Tue Apr 16 12:53:04 PDT 2013


Ping.

I reiterate that I have serious problems with this patch. Having not heard any explanation for why it’s an improvement, I want it reverted. Sooner rather than later, please.

-Jim

On Apr 11, 2013, at 6:02 PM, Chandler Carruth <chandlerc at google.com> wrote:

> On Thu, Apr 11, 2013 at 5:46 PM, Eric Christopher <echristo at gmail.com> wrote:
> Hrm. It's a little more compact and nicer to use other than the
> true/false, etc.
> 
> Really?
> 
> This change seems really bizarre to me as its not even doing any of the myriad of things you might do to make this actually more compact and sharing code between the two constructs, much less using the bool template parameter to parameterize generic code that can then be shared between the two. It may be that there is future work that will use this more heavily, but I think that more cleanup is needed even before that, and I'd like to understand the final state anyways.
>  
> Might be nicer to have a typedef to help readability?
> 
> Yes, and this too. If not this, maybe use an enum with helpful names?
>  
> 
> -eric
> 
> On Mon, Apr 8, 2013 at 2:58 PM, Jim Grosbach <grosbach at apple.com> wrote:
> > Why do this? The resultant code is less readable to me, replacing an
> > explicit “64” in the type name with a “true” that I have to go look at the
> > template definition to find the meaning of.
> >
> > -Jim
> >
> > On Apr 8, 2013, at 1:45 PM, Rafael Espindola <rafael.espindola at gmail.com>
> > wrote:
> >
> > Author: rafael
> > Date: Mon Apr  8 15:45:01 2013
> > New Revision: 179051
> >
> > URL: http://llvm.org/viewvc/llvm-project?rev=179051&view=rev
> > Log:
> > Template the MachO types over the word size.
> >
> > Modified:
> >    llvm/trunk/include/llvm/Object/MachO.h
> >    llvm/trunk/lib/Object/MachOObjectFile.cpp
> >    llvm/trunk/tools/llvm-readobj/MachODumper.cpp
> >
> > Modified: llvm/trunk/include/llvm/Object/MachO.h
> > URL:
> > http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/MachO.h?rev=179051&r1=179050&r2=179051&view=diff
> > ==============================================================================
> > --- llvm/trunk/include/llvm/Object/MachO.h (original)
> > +++ llvm/trunk/include/llvm/Object/MachO.h Mon Apr  8 15:45:01 2013
> > @@ -27,7 +27,11 @@ namespace llvm {
> > namespace object {
> >
> > namespace MachOFormat {
> > -  struct Section {
> > +  template<bool is64Bits>
> > +  struct Section;
> > +
> > +  template<>
> > +  struct Section<false> {
> >     char Name[16];
> >     char SegmentName[16];
> >     support::ulittle32_t Address;
> > @@ -41,7 +45,8 @@ namespace MachOFormat {
> >     support::ulittle32_t Reserved2;
> >   };
> >
> > -  struct Section64 {
> > +  template<>
> > +  struct Section<true> {
> >     char Name[16];
> >     char SegmentName[16];
> >     support::ulittle64_t Address;
> > @@ -61,7 +66,11 @@ namespace MachOFormat {
> >     support::ulittle32_t Word1;
> >   };
> >
> > -  struct SymbolTableEntry {
> > +  template<bool is64Bits>
> > +  struct SymbolTableEntry;
> > +
> > +  template<>
> > +  struct SymbolTableEntry<false> {
> >     support::ulittle32_t StringIndex;
> >     uint8_t Type;
> >     uint8_t SectionIndex;
> > @@ -69,7 +78,8 @@ namespace MachOFormat {
> >     support::ulittle32_t Value;
> >   };
> >
> > -  struct Symbol64TableEntry {
> > +  template<>
> > +  struct SymbolTableEntry<true> {
> >     support::ulittle32_t StringIndex;
> >     uint8_t Type;
> >     uint8_t SectionIndex;
> > @@ -91,7 +101,11 @@ namespace MachOFormat {
> >     support::ulittle32_t StringTableSize;
> >   };
> >
> > -  struct SegmentLoadCommand {
> > +  template<bool is64Bits>
> > +  struct SegmentLoadCommand;
> > +
> > +  template<>
> > +  struct SegmentLoadCommand<false> {
> >     support::ulittle32_t Type;
> >     support::ulittle32_t Size;
> >     char Name[16];
> > @@ -105,7 +119,8 @@ namespace MachOFormat {
> >     support::ulittle32_t Flags;
> >   };
> >
> > -  struct Segment64LoadCommand {
> > +  template<>
> > +  struct SegmentLoadCommand<true> {
> >     support::ulittle32_t Type;
> >     support::ulittle32_t Size;
> >     char Name[16];
> > @@ -165,11 +180,11 @@ public:
> >   ArrayRef<char> getSectionRawName(DataRefImpl Sec) const;
> >   ArrayRef<char>getSectionRawFinalSegmentName(DataRefImpl Sec) const;
> >
> > -  const MachOFormat::Section64 *getSection64(DataRefImpl DRI) const;
> > -  const MachOFormat::Section *getSection(DataRefImpl DRI) const;
> > -  const MachOFormat::Symbol64TableEntry *
> > +  const MachOFormat::Section<true> *getSection64(DataRefImpl DRI) const;
> > +  const MachOFormat::Section<false> *getSection(DataRefImpl DRI) const;
> > +  const MachOFormat::SymbolTableEntry<true> *
> >     getSymbol64TableEntry(DataRefImpl DRI) const;
> > -  const MachOFormat::SymbolTableEntry *
> > +  const MachOFormat::SymbolTableEntry<false> *
> >     getSymbolTableEntry(DataRefImpl DRI) const;
> >   bool is64Bit() const;
> >   const MachOFormat::LoadCommand *getLoadCommandInfo(unsigned Index) const;
> > @@ -242,11 +257,11 @@ private:
> >
> >   void moveToNextSection(DataRefImpl &DRI) const;
> >
> > -  const MachOFormat::SymbolTableEntry *
> > +  const MachOFormat::SymbolTableEntry<false> *
> >   getSymbolTableEntry(DataRefImpl DRI,
> >                      const MachOFormat::SymtabLoadCommand *SymtabLoadCmd)
> > const;
> >
> > -  const MachOFormat::Symbol64TableEntry *
> > +  const MachOFormat::SymbolTableEntry<true> *
> >   getSymbol64TableEntry(DataRefImpl DRI,
> >                      const MachOFormat::SymtabLoadCommand *SymtabLoadCmd)
> > const;
> >
> >
> > Modified: llvm/trunk/lib/Object/MachOObjectFile.cpp
> > URL:
> > http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/MachOObjectFile.cpp?rev=179051&r1=179050&r2=179051&view=diff
> > ==============================================================================
> > --- llvm/trunk/lib/Object/MachOObjectFile.cpp (original)
> > +++ llvm/trunk/lib/Object/MachOObjectFile.cpp Mon Apr  8 15:45:01 2013
> > @@ -116,7 +116,7 @@ void MachOObjectFile::moveToNextSymbol(D
> >   }
> > }
> >
> > -const MachOFormat::SymbolTableEntry *
> > +const MachOFormat::SymbolTableEntry<false> *
> > MachOObjectFile::getSymbolTableEntry(DataRefImpl DRI) const {
> >   const MachOFormat::LoadCommand *Command = getLoadCommandInfo(DRI.d.a);
> >   const MachOFormat::SymtabLoadCommand *SymtabLoadCmd =
> > @@ -125,18 +125,20 @@ MachOObjectFile::getSymbolTableEntry(Dat
> >   return getSymbolTableEntry(DRI, SymtabLoadCmd);
> > }
> >
> > -const MachOFormat::SymbolTableEntry *
> > +const MachOFormat::SymbolTableEntry<false> *
> > MachOObjectFile::getSymbolTableEntry(DataRefImpl DRI,
> >                     const MachOFormat::SymtabLoadCommand *SymtabLoadCmd)
> > const {
> >   uint64_t SymbolTableOffset = SymtabLoadCmd->SymbolTableOffset;
> >   unsigned Index = DRI.d.b;
> >   uint64_t Offset = (SymbolTableOffset +
> > -                     Index * sizeof(macho::SymbolTableEntry));
> > -  StringRef Data = getData(Offset, sizeof(MachOFormat::SymbolTableEntry));
> > -  return reinterpret_cast<const
> > MachOFormat::SymbolTableEntry*>(Data.data());
> > +                     Index * sizeof(MachOFormat::SymbolTableEntry<false>));
> > +  StringRef Data =
> > +    getData(Offset, sizeof(MachOFormat::SymbolTableEntry<false>));
> > +  return
> > +    reinterpret_cast<const
> > MachOFormat::SymbolTableEntry<false>*>(Data.data());
> > }
> >
> > -const MachOFormat::Symbol64TableEntry*
> > +const MachOFormat::SymbolTableEntry<true>*
> > MachOObjectFile::getSymbol64TableEntry(DataRefImpl DRI) const {
> >   const MachOFormat::LoadCommand *Command = getLoadCommandInfo(DRI.d.a);
> >   const MachOFormat::SymtabLoadCommand *SymtabLoadCmd =
> > @@ -145,15 +147,16 @@ MachOObjectFile::getSymbol64TableEntry(D
> >   return getSymbol64TableEntry(DRI, SymtabLoadCmd);
> > }
> >
> > -const MachOFormat::Symbol64TableEntry*
> > +const MachOFormat::SymbolTableEntry<true>*
> > MachOObjectFile::getSymbol64TableEntry(DataRefImpl DRI,
> >                     const MachOFormat::SymtabLoadCommand *SymtabLoadCmd)
> > const {
> >   uint64_t SymbolTableOffset = SymtabLoadCmd->SymbolTableOffset;
> >   unsigned Index = DRI.d.b;
> >   uint64_t Offset = (SymbolTableOffset +
> > -                     Index * sizeof(macho::Symbol64TableEntry));
> > -  StringRef Data = getData(Offset,
> > sizeof(MachOFormat::Symbol64TableEntry));
> > -  return reinterpret_cast<const
> > MachOFormat::Symbol64TableEntry*>(Data.data());
> > +                     Index * sizeof(MachOFormat::SymbolTableEntry<true>));
> > +  StringRef Data = getData(Offset,
> > sizeof(MachOFormat::SymbolTableEntry<true>));
> > +  return
> > +    reinterpret_cast<const
> > MachOFormat::SymbolTableEntry<true>*>(Data.data());
> > }
> >
> > error_code MachOObjectFile::getSymbolNext(DataRefImpl DRI,
> > @@ -175,11 +178,11 @@ error_code MachOObjectFile::getSymbolNam
> >
> >   uint32_t StringIndex;
> >   if (is64Bit()) {
> > -    const MachOFormat::Symbol64TableEntry *Entry =
> > +    const MachOFormat::SymbolTableEntry<true> *Entry =
> >       getSymbol64TableEntry(DRI, SymtabLoadCmd);
> >     StringIndex = Entry->StringIndex;
> >   } else {
> > -    const MachOFormat::SymbolTableEntry *Entry =
> > +    const MachOFormat::SymbolTableEntry<false> *Entry =
> >       getSymbolTableEntry(DRI, SymtabLoadCmd);
> >     StringIndex = Entry->StringIndex;
> >   }
> > @@ -193,18 +196,20 @@ error_code MachOObjectFile::getSymbolNam
> > error_code MachOObjectFile::getSymbolFileOffset(DataRefImpl DRI,
> >                                                 uint64_t &Result) const {
> >   if (is64Bit()) {
> > -    const MachOFormat::Symbol64TableEntry *Entry =
> > getSymbol64TableEntry(DRI);
> > +    const MachOFormat::SymbolTableEntry<true> *Entry =
> > +      getSymbol64TableEntry(DRI);
> >     Result = Entry->Value;
> >     if (Entry->SectionIndex) {
> > -      const MachOFormat::Section64 *Section =
> > +      const MachOFormat::Section<true> *Section =
> >         getSection64(Sections[Entry->SectionIndex-1]);
> >       Result += Section->Offset - Section->Address;
> >     }
> >   } else {
> > -    const MachOFormat::SymbolTableEntry *Entry = getSymbolTableEntry(DRI);
> > +    const MachOFormat::SymbolTableEntry<false> *Entry =
> > +      getSymbolTableEntry(DRI);
> >     Result = Entry->Value;
> >     if (Entry->SectionIndex) {
> > -      const MachOFormat::Section *Section =
> > +      const MachOFormat::Section<false> *Section =
> >         getSection(Sections[Entry->SectionIndex-1]);
> >       Result += Section->Offset - Section->Address;
> >     }
> > @@ -216,10 +221,12 @@ error_code MachOObjectFile::getSymbolFil
> > error_code MachOObjectFile::getSymbolAddress(DataRefImpl DRI,
> >                                              uint64_t &Result) const {
> >   if (is64Bit()) {
> > -    const MachOFormat::Symbol64TableEntry *Entry =
> > getSymbol64TableEntry(DRI);
> > +    const MachOFormat::SymbolTableEntry<true> *Entry =
> > +      getSymbol64TableEntry(DRI);
> >     Result = Entry->Value;
> >   } else {
> > -    const MachOFormat::SymbolTableEntry *Entry = getSymbolTableEntry(DRI);
> > +    const MachOFormat::SymbolTableEntry<false> *Entry =
> > +      getSymbolTableEntry(DRI);
> >     Result = Entry->Value;
> >   }
> >   return object_error::success;
> > @@ -232,7 +239,8 @@ error_code MachOObjectFile::getSymbolSiz
> >   uint64_t EndOffset = 0;
> >   uint8_t SectionIndex;
> >   if (is64Bit()) {
> > -    const MachOFormat::Symbol64TableEntry *Entry =
> > getSymbol64TableEntry(DRI);
> > +    const MachOFormat::SymbolTableEntry<true> *Entry =
> > +      getSymbol64TableEntry(DRI);
> >     BeginOffset = Entry->Value;
> >     SectionIndex = Entry->SectionIndex;
> >     if (!SectionIndex) {
> > @@ -259,7 +267,8 @@ error_code MachOObjectFile::getSymbolSiz
> >       DRI.d.b++;
> >     }
> >   } else {
> > -    const MachOFormat::SymbolTableEntry *Entry = getSymbolTableEntry(DRI);
> > +    const MachOFormat::SymbolTableEntry<false> *Entry =
> > +      getSymbolTableEntry(DRI);
> >     BeginOffset = Entry->Value;
> >     SectionIndex = Entry->SectionIndex;
> >     if (!SectionIndex) {
> > @@ -300,11 +309,13 @@ error_code MachOObjectFile::getSymbolNMT
> >                                                 char &Result) const {
> >   uint8_t Type, Flags;
> >   if (is64Bit()) {
> > -    const MachOFormat::Symbol64TableEntry *Entry =
> > getSymbol64TableEntry(DRI);
> > +    const MachOFormat::SymbolTableEntry<true> *Entry =
> > +      getSymbol64TableEntry(DRI);
> >     Type = Entry->Type;
> >     Flags = Entry->Flags;
> >   } else {
> > -    const MachOFormat::SymbolTableEntry *Entry = getSymbolTableEntry(DRI);
> > +    const MachOFormat::SymbolTableEntry<false> *Entry =
> > +      getSymbolTableEntry(DRI);
> >     Type = Entry->Type;
> >     Flags = Entry->Flags;
> >   }
> > @@ -334,11 +345,13 @@ error_code MachOObjectFile::getSymbolFla
> >   uint16_t MachOFlags;
> >   uint8_t MachOType;
> >   if (is64Bit()) {
> > -    const MachOFormat::Symbol64TableEntry *Entry =
> > getSymbol64TableEntry(DRI);
> > +    const MachOFormat::SymbolTableEntry<true> *Entry =
> > +      getSymbol64TableEntry(DRI);
> >     MachOFlags = Entry->Flags;
> >     MachOType = Entry->Type;
> >   } else {
> > -    const MachOFormat::SymbolTableEntry *Entry = getSymbolTableEntry(DRI);
> > +    const MachOFormat::SymbolTableEntry<false> *Entry =
> > +      getSymbolTableEntry(DRI);
> >     MachOFlags = Entry->Flags;
> >     MachOType = Entry->Type;
> >   }
> > @@ -371,10 +384,12 @@ error_code MachOObjectFile::getSymbolSec
> >                                              section_iterator &Res) const {
> >   uint8_t index;
> >   if (is64Bit()) {
> > -    const MachOFormat::Symbol64TableEntry *Entry =
> > getSymbol64TableEntry(Symb);
> > +    const MachOFormat::SymbolTableEntry<true> *Entry =
> > +      getSymbol64TableEntry(Symb);
> >     index = Entry->SectionIndex;
> >   } else {
> > -    const MachOFormat::SymbolTableEntry *Entry = getSymbolTableEntry(Symb);
> > +    const MachOFormat::SymbolTableEntry<false> *Entry =
> > +      getSymbolTableEntry(Symb);
> >     index = Entry->SectionIndex;
> >   }
> >
> > @@ -390,10 +405,12 @@ error_code MachOObjectFile::getSymbolTyp
> >                                           SymbolRef::Type &Res) const {
> >   uint8_t n_type;
> >   if (is64Bit()) {
> > -    const MachOFormat::Symbol64TableEntry *Entry =
> > getSymbol64TableEntry(Symb);
> > +    const MachOFormat::SymbolTableEntry<true> *Entry =
> > +      getSymbol64TableEntry(Symb);
> >     n_type = Entry->Type;
> >   } else {
> > -    const MachOFormat::SymbolTableEntry *Entry = getSymbolTableEntry(Symb);
> > +    const MachOFormat::SymbolTableEntry<false> *Entry =
> > +      getSymbolTableEntry(Symb);
> >     n_type = Entry->Type;
> >   }
> >   Res = SymbolRef::ST_Other;
> > @@ -465,14 +482,14 @@ void MachOObjectFile::moveToNextSection(
> >   while (DRI.d.a < LoadCommandCount) {
> >     const MachOFormat::LoadCommand *Command = getLoadCommandInfo(DRI.d.a);
> >     if (Command->Type == macho::LCT_Segment) {
> > -      const MachOFormat::SegmentLoadCommand *SegmentLoadCmd =
> > -        reinterpret_cast<const MachOFormat::SegmentLoadCommand*>(Command);
> > +      const MachOFormat::SegmentLoadCommand<false> *SegmentLoadCmd =
> > +       reinterpret_cast<const
> > MachOFormat::SegmentLoadCommand<false>*>(Command);
> >       if (DRI.d.b < SegmentLoadCmd->NumSections)
> >         return;
> >     } else if (Command->Type == macho::LCT_Segment64) {
> > -      const MachOFormat::Segment64LoadCommand *Segment64LoadCmd =
> > -        reinterpret_cast<const
> > MachOFormat::Segment64LoadCommand*>(Command);
> > -      if (DRI.d.b < Segment64LoadCmd->NumSections)
> > +      const MachOFormat::SegmentLoadCommand<true> *SegmentLoadCmd =
> > +        reinterpret_cast<const
> > MachOFormat::SegmentLoadCommand<true>*>(Command);
> > +      if (DRI.d.b < SegmentLoadCmd->NumSections)
> >         return;
> >     }
> >
> > @@ -489,13 +506,14 @@ error_code MachOObjectFile::getSectionNe
> >   return object_error::success;
> > }
> >
> > -const MachOFormat::Section *MachOObjectFile::getSection(DataRefImpl DRI)
> > const {
> > +const MachOFormat::Section<false> *
> > +MachOObjectFile::getSection(DataRefImpl DRI) const {
> >   assert(!is64Bit());
> >   const MachOFormat::LoadCommand *Command = getLoadCommandInfo(DRI.d.a);
> >   uintptr_t CommandAddr = reinterpret_cast<uintptr_t>(Command);
> >   uintptr_t SectionAddr = CommandAddr + sizeof(macho::SegmentLoadCommand) +
> > -    DRI.d.b * sizeof(MachOFormat::Section);
> > -  return reinterpret_cast<const MachOFormat::Section*>(SectionAddr);
> > +    DRI.d.b * sizeof(MachOFormat::Section<false>);
> > +  return reinterpret_cast<const MachOFormat::Section<false>*>(SectionAddr);
> > }
> >
> > std::size_t MachOObjectFile::getSectionIndex(DataRefImpl Sec) const {
> > @@ -505,14 +523,14 @@ std::size_t MachOObjectFile::getSectionI
> >   return std::distance(Sections.begin(), loc);
> > }
> >
> > -const MachOFormat::Section64 *
> > +const MachOFormat::Section<true> *
> > MachOObjectFile::getSection64(DataRefImpl DRI) const {
> >   assert(is64Bit());
> >   const MachOFormat::LoadCommand *Command = getLoadCommandInfo(DRI.d.a);
> >   uintptr_t CommandAddr = reinterpret_cast<uintptr_t>(Command);
> >   uintptr_t SectionAddr = CommandAddr + sizeof(macho::Segment64LoadCommand)
> > +
> > -    DRI.d.b * sizeof(MachOFormat::Section64);
> > -  return reinterpret_cast<const MachOFormat::Section64*>(SectionAddr);
> > +    DRI.d.b * sizeof(MachOFormat::Section<true>);
> > +  return reinterpret_cast<const MachOFormat::Section<true>*>(SectionAddr);
> > }
> >
> > static StringRef parseSegmentOrSectionName(const char *P) {
> > @@ -525,10 +543,10 @@ static StringRef parseSegmentOrSectionNa
> >
> > ArrayRef<char> MachOObjectFile::getSectionRawName(DataRefImpl DRI) const {
> >   if (is64Bit()) {
> > -    const MachOFormat::Section64 *sec = getSection64(DRI);
> > +    const MachOFormat::Section<true> *sec = getSection64(DRI);
> >     return ArrayRef<char>(sec->Name);
> >   } else {
> > -    const MachOFormat::Section *sec = getSection(DRI);
> > +    const MachOFormat::Section<false> *sec = getSection(DRI);
> >     return ArrayRef<char>(sec->Name);
> >   }
> > }
> > @@ -543,10 +561,10 @@ error_code MachOObjectFile::getSectionNa
> > ArrayRef<char>
> > MachOObjectFile::getSectionRawFinalSegmentName(DataRefImpl Sec) const {
> >   if (is64Bit()) {
> > -    const MachOFormat::Section64 *sec = getSection64(Sec);
> > +    const MachOFormat::Section<true> *sec = getSection64(Sec);
> >     return ArrayRef<char>(sec->SegmentName, 16);
> >   } else {
> > -    const MachOFormat::Section *sec = getSection(Sec);
> > +    const MachOFormat::Section<false> *sec = getSection(Sec);
> >     return ArrayRef<char>(sec->SegmentName);
> >   }
> > }
> > @@ -559,10 +577,10 @@ StringRef MachOObjectFile::getSectionFin
> > error_code MachOObjectFile::getSectionAddress(DataRefImpl DRI,
> >                                               uint64_t &Result) const {
> >   if (is64Bit()) {
> > -    const MachOFormat::Section64 *Sect = getSection64(DRI);
> > +    const MachOFormat::Section<true> *Sect = getSection64(DRI);
> >     Result = Sect->Address;
> >   } else {
> > -    const MachOFormat::Section *Sect = getSection(DRI);
> > +    const MachOFormat::Section<false> *Sect = getSection(DRI);
> >     Result = Sect->Address;
> >   }
> >   return object_error::success;
> > @@ -571,10 +589,10 @@ error_code MachOObjectFile::getSectionAd
> > error_code MachOObjectFile::getSectionSize(DataRefImpl DRI,
> >                                            uint64_t &Result) const {
> >   if (is64Bit()) {
> > -    const MachOFormat::Section64 *Sect = getSection64(DRI);
> > +    const MachOFormat::Section<true> *Sect = getSection64(DRI);
> >     Result = Sect->Size;
> >   } else {
> > -    const MachOFormat::Section *Sect = getSection(DRI);
> > +    const MachOFormat::Section<false> *Sect = getSection(DRI);
> >     Result = Sect->Size;
> >   }
> >   return object_error::success;
> > @@ -583,10 +601,10 @@ error_code MachOObjectFile::getSectionSi
> > error_code MachOObjectFile::getSectionContents(DataRefImpl DRI,
> >                                                StringRef &Result) const {
> >   if (is64Bit()) {
> > -    const MachOFormat::Section64 *Sect = getSection64(DRI);
> > +    const MachOFormat::Section<true> *Sect = getSection64(DRI);
> >     Result = getData(Sect->Offset, Sect->Size);
> >   } else {
> > -    const MachOFormat::Section *Sect = getSection(DRI);
> > +    const MachOFormat::Section<false> *Sect = getSection(DRI);
> >     Result = getData(Sect->Offset, Sect->Size);
> >   }
> >   return object_error::success;
> > @@ -595,10 +613,10 @@ error_code MachOObjectFile::getSectionCo
> > error_code MachOObjectFile::getSectionAlignment(DataRefImpl DRI,
> >                                                 uint64_t &Result) const {
> >   if (is64Bit()) {
> > -    const MachOFormat::Section64 *Sect = getSection64(DRI);
> > +    const MachOFormat::Section<true> *Sect = getSection64(DRI);
> >     Result = uint64_t(1) << Sect->Align;
> >   } else {
> > -    const MachOFormat::Section *Sect = getSection(DRI);
> > +    const MachOFormat::Section<false> *Sect = getSection(DRI);
> >     Result = uint64_t(1) << Sect->Align;
> >   }
> >   return object_error::success;
> > @@ -607,10 +625,10 @@ error_code MachOObjectFile::getSectionAl
> > error_code MachOObjectFile::isSectionText(DataRefImpl DRI,
> >                                           bool &Result) const {
> >   if (is64Bit()) {
> > -    const MachOFormat::Section64 *Sect = getSection64(DRI);
> > +    const MachOFormat::Section<true> *Sect = getSection64(DRI);
> >     Result = Sect->Flags & macho::SF_PureInstructions;
> >   } else {
> > -    const MachOFormat::Section *Sect = getSection(DRI);
> > +    const MachOFormat::Section<false> *Sect = getSection(DRI);
> >     Result = Sect->Flags & macho::SF_PureInstructions;
> >   }
> >   return object_error::success;
> > @@ -647,12 +665,12 @@ error_code MachOObjectFile::isSectionVir
> > error_code MachOObjectFile::isSectionZeroInit(DataRefImpl DRI,
> >                                               bool &Result) const {
> >   if (is64Bit()) {
> > -    const MachOFormat::Section64 *Sect = getSection64(DRI);
> > +    const MachOFormat::Section<true> *Sect = getSection64(DRI);
> >     unsigned SectionType = Sect->Flags & MachO::SectionFlagMaskSectionType;
> >     Result = (SectionType == MachO::SectionTypeZeroFill ||
> >               SectionType == MachO::SectionTypeZeroFillLarge);
> >   } else {
> > -    const MachOFormat::Section *Sect = getSection(DRI);
> > +    const MachOFormat::Section<false> *Sect = getSection(DRI);
> >     unsigned SectionType = Sect->Flags & MachO::SectionFlagMaskSectionType;
> >     Result = (SectionType == MachO::SectionTypeZeroFill ||
> >               SectionType == MachO::SectionTypeZeroFillLarge);
> > @@ -688,11 +706,13 @@ error_code MachOObjectFile::sectionConta
> >   SectEnd += SectBegin;
> >
> >   if (is64Bit()) {
> > -    const MachOFormat::Symbol64TableEntry *Entry =
> > getSymbol64TableEntry(Symb);
> > +    const MachOFormat::SymbolTableEntry<true> *Entry =
> > +      getSymbol64TableEntry(Symb);
> >     uint64_t SymAddr= Entry->Value;
> >     Result = (SymAddr >= SectBegin) && (SymAddr < SectEnd);
> >   } else {
> > -    const MachOFormat::SymbolTableEntry *Entry = getSymbolTableEntry(Symb);
> > +    const MachOFormat::SymbolTableEntry<false> *Entry =
> > +      getSymbolTableEntry(Symb);
> >     uint64_t SymAddr= Entry->Value;
> >     Result = (SymAddr >= SectBegin) && (SymAddr < SectEnd);
> >   }
> > @@ -705,13 +725,14 @@ relocation_iterator MachOObjectFile::get
> >   ret.d.b = getSectionIndex(Sec);
> >   return relocation_iterator(RelocationRef(ret, this));
> > }
> > +
> > relocation_iterator MachOObjectFile::getSectionRelEnd(DataRefImpl Sec) const
> > {
> >   uint32_t last_reloc;
> >   if (is64Bit()) {
> > -    const MachOFormat::Section64 *Sect = getSection64(Sec);
> > +    const MachOFormat::Section<true> *Sect = getSection64(Sec);
> >     last_reloc = Sect->NumRelocationTableEntries;
> >   } else {
> > -    const MachOFormat::Section *Sect = getSection(Sec);
> > +    const MachOFormat::Section<false> *Sect = getSection(Sec);
> >     last_reloc = Sect->NumRelocationTableEntries;
> >   }
> >   DataRefImpl ret;
> > @@ -738,10 +759,10 @@ const MachOFormat::RelocationEntry *
> > MachOObjectFile::getRelocation(DataRefImpl Rel) const {
> >   uint32_t relOffset;
> >   if (is64Bit()) {
> > -    const MachOFormat::Section64 *Sect = getSection64(Sections[Rel.d.b]);
> > +    const MachOFormat::Section<true> *Sect =
> > getSection64(Sections[Rel.d.b]);
> >     relOffset = Sect->RelocationTableOffset;
> >   } else {
> > -    const MachOFormat::Section *Sect = getSection(Sections[Rel.d.b]);
> > +    const MachOFormat::Section<false> *Sect =
> > getSection(Sections[Rel.d.b]);
> >     relOffset = Sect->RelocationTableOffset;
> >   }
> >   uint64_t Offset = relOffset + Rel.d.a *
> > sizeof(MachOFormat::RelocationEntry);
> > @@ -759,10 +780,10 @@ error_code MachOObjectFile::getRelocatio
> >                                                  uint64_t &Res) const {
> >   const uint8_t* sectAddress = 0;
> >   if (is64Bit()) {
> > -    const MachOFormat::Section64 *Sect = getSection64(Sections[Rel.d.b]);
> > +    const MachOFormat::Section<true> *Sect =
> > getSection64(Sections[Rel.d.b]);
> >     sectAddress += Sect->Address;
> >   } else {
> > -    const MachOFormat::Section *Sect = getSection(Sections[Rel.d.b]);
> > +    const MachOFormat::Section<false> *Sect =
> > getSection(Sections[Rel.d.b]);
> >     sectAddress += Sect->Address;
> >   }
> >   const MachOFormat::RelocationEntry *RE = getRelocation(Rel);
> > @@ -926,10 +947,10 @@ error_code MachOObjectFile::getRelocatio
> >   if (!isExtern) {
> >     const uint8_t* sectAddress = base();
> >     if (is64Bit()) {
> > -      const MachOFormat::Section64 *Sect = getSection64(Sections[Rel.d.b]);
> > +      const MachOFormat::Section<true> *Sect =
> > getSection64(Sections[Rel.d.b]);
> >       sectAddress += Sect->Offset;
> >     } else {
> > -      const MachOFormat::Section *Sect = getSection(Sections[Rel.d.b]);
> > +      const MachOFormat::Section<false> *Sect =
> > getSection(Sections[Rel.d.b]);
> >       sectAddress += Sect->Offset;
> >     }
> >     Res = reinterpret_cast<uintptr_t>(sectAddress);
> >
> > Modified: llvm/trunk/tools/llvm-readobj/MachODumper.cpp
> > URL:
> > http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-readobj/MachODumper.cpp?rev=179051&r1=179050&r2=179051&view=diff
> > ==============================================================================
> > --- llvm/trunk/tools/llvm-readobj/MachODumper.cpp (original)
> > +++ llvm/trunk/tools/llvm-readobj/MachODumper.cpp Mon Apr  8 15:45:01 2013
> > @@ -161,7 +161,7 @@ static void getSection(const MachOObject
> >                        DataRefImpl DRI,
> >                        MachOSection &Section) {
> >   if (Obj->is64Bit()) {
> > -    const MachOFormat::Section64 *Sect = Obj->getSection64(DRI);
> > +    const MachOFormat::Section<true> *Sect = Obj->getSection64(DRI);
> >
> >     Section.Address     = Sect->Address;
> >     Section.Size        = Sect->Size;
> > @@ -173,7 +173,7 @@ static void getSection(const MachOObject
> >     Section.Reserved1   = Sect->Reserved1;
> >     Section.Reserved2   = Sect->Reserved2;
> >   } else {
> > -    const MachOFormat::Section *Sect = Obj->getSection(DRI);
> > +    const MachOFormat::Section<false> *Sect = Obj->getSection(DRI);
> >
> >     Section.Address     = Sect->Address;
> >     Section.Size        = Sect->Size;
> > @@ -191,15 +191,16 @@ static void getSymbol(const MachOObjectF
> >                       DataRefImpl DRI,
> >                       MachOSymbol &Symbol) {
> >   if (Obj->is64Bit()) {
> > -    const MachOFormat::Symbol64TableEntry *Entry =
> > -      Obj->getSymbol64TableEntry( DRI);
> > +    const MachOFormat::SymbolTableEntry<true> *Entry =
> > +      Obj->getSymbol64TableEntry(DRI);
> >     Symbol.StringIndex  = Entry->StringIndex;
> >     Symbol.Type         = Entry->Type;
> >     Symbol.SectionIndex = Entry->SectionIndex;
> >     Symbol.Flags        = Entry->Flags;
> >     Symbol.Value        = Entry->Value;
> >   } else {
> > -    const MachOFormat::SymbolTableEntry *Entry =
> > Obj->getSymbolTableEntry(DRI);
> > +    const MachOFormat::SymbolTableEntry<false> *Entry =
> > +      Obj->getSymbolTableEntry(DRI);
> >     Symbol.StringIndex  = Entry->StringIndex;
> >     Symbol.Type         = Entry->Type;
> >     Symbol.SectionIndex = Entry->SectionIndex;
> >
> >
> > _______________________________________________
> > llvm-commits mailing list
> > llvm-commits at cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
> >
> >
> >
> > _______________________________________________
> > llvm-commits mailing list
> > llvm-commits at cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
> >
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
> 
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20130416/e70fb90d/attachment.html>


More information about the llvm-commits mailing list