[lld] r230138 - [ELF][Writer] Use Path to create AtomSection.

Rui Ueyama ruiu at google.com
Wed Feb 25 15:30:04 PST 2015


Ping?

On Sun, Feb 22, 2015 at 7:36 PM, Rui Ueyama <ruiu at google.com> wrote:

> On Sat, Feb 21, 2015 at 7:49 AM, Shankar Easwaran <shankare at codeaurora.org
> > wrote:
>
>> Author: shankare
>> Date: Sat Feb 21 09:49:34 2015
>> New Revision: 230138
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=230138&view=rev
>> Log:
>> [ELF][Writer] Use Path to create AtomSection.
>>
>> Now since the correct file path for atoms is available and not clobbered,
>> commit r222309 which was reverted previously can be added back.
>>
>> No change in functionality.
>>
>
> Why do we need this new code if it doesn't change anything?
>
>
>>
>> Modified:
>>     lld/trunk/lib/ReaderWriter/ELF/DefaultLayout.h
>>     lld/trunk/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h
>>
>> Modified: lld/trunk/lib/ReaderWriter/ELF/DefaultLayout.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/DefaultLayout.h?rev=230138&r1=230137&r2=230138&view=diff
>>
>> ==============================================================================
>> --- lld/trunk/lib/ReaderWriter/ELF/DefaultLayout.h (original)
>> +++ lld/trunk/lib/ReaderWriter/ELF/DefaultLayout.h Sat Feb 21 09:49:34
>> 2015
>> @@ -91,24 +91,26 @@ public:
>>    // The sections are created using
>>    // SectionName, contentPermissions
>>    struct SectionKey {
>> -    SectionKey(StringRef name, DefinedAtom::ContentPermissions perm)
>> -        : _name(name), _perm(perm) {
>> -    }
>> +    SectionKey(StringRef name, DefinedAtom::ContentPermissions perm,
>> +               StringRef path)
>> +        : _name(name), _perm(perm), _path(path) {}
>>
>>      // Data members
>>      StringRef _name;
>>      DefinedAtom::ContentPermissions _perm;
>> +    StringRef _path;
>>    };
>>
>>    struct SectionKeyHash {
>>      int64_t operator()(const SectionKey &k) const {
>> -      return llvm::hash_combine(k._name, k._perm);
>> +      return llvm::hash_combine(k._name, k._perm, k._path);
>>      }
>>    };
>>
>>    struct SectionKeyEq {
>>      bool operator()(const SectionKey &lhs, const SectionKey &rhs) const {
>> -      return ((lhs._name == rhs._name) && (lhs._perm == rhs._perm));
>> +      return ((lhs._name == rhs._name) && (lhs._perm == rhs._perm) &&
>> +              (lhs._path == rhs._path));
>>      }
>>    };
>>
>> @@ -181,9 +183,10 @@ public:
>>    virtual StringRef getOutputSectionName(StringRef inputSectionName)
>> const;
>>
>>    /// \brief Gets or creates a section.
>> -  AtomSection<ELFT> *getSection(
>> -      StringRef name, int32_t contentType,
>> -      DefinedAtom::ContentPermissions contentPermissions);
>> +  AtomSection<ELFT> *
>> +  getSection(StringRef name, int32_t contentType,
>> +             DefinedAtom::ContentPermissions contentPermissions,
>> +             StringRef path);
>>
>>    /// \brief Gets the segment for a output section
>>    virtual Layout::SegmentType getSegmentType(Section<ELFT> *section)
>> const;
>> @@ -530,22 +533,19 @@ AtomSection<ELFT> *DefaultLayout<ELFT>::
>>  }
>>
>>  template <class ELFT>
>> -AtomSection<ELFT> *DefaultLayout<ELFT>::getSection(
>> -    StringRef sectionName, int32_t contentType,
>> -    DefinedAtom::ContentPermissions permissions) {
>> -  // FIXME: We really need the file path here in the SectionKey, when
>> that
>> -  // is available, replace the sectionKey that has outputSectionName to
>> the
>> -  // inputSectionName.
>> -  StringRef outputSectionName = getOutputSectionName(sectionName);
>> -  const SectionKey sectionKey(outputSectionName, permissions);
>> +AtomSection<ELFT> *
>> +DefaultLayout<ELFT>::getSection(StringRef sectionName, int32_t
>> contentType,
>> +                                DefinedAtom::ContentPermissions
>> permissions,
>> +                                StringRef path) {
>> +  const SectionKey sectionKey(sectionName, permissions, path);
>> +  SectionOrder sectionOrder =
>> +      getSectionOrder(sectionName, contentType, permissions);
>>    auto sec = _sectionMap.find(sectionKey);
>>    if (sec != _sectionMap.end())
>>      return sec->second;
>> -  SectionOrder sectionOrder =
>> -      getSectionOrder(sectionName, contentType, permissions);
>>    AtomSection<ELFT> *newSec =
>>        createSection(sectionName, contentType, permissions, sectionOrder);
>> -  newSec->setOutputSectionName(outputSectionName);
>> +  newSec->setOutputSectionName(getOutputSectionName(sectionName));
>>    newSec->setOrder(sectionOrder);
>>    _sections.push_back(newSec);
>>    _sectionMap.insert(std::make_pair(sectionKey, newSec));
>> @@ -565,8 +565,8 @@ ErrorOr<const lld::AtomLayout &> Default
>>      const DefinedAtom::ContentType contentType =
>> definedAtom->contentType();
>>
>>      StringRef sectionName = getInputSectionName(definedAtom);
>> -    AtomSection<ELFT> *section =
>> -        getSection(sectionName, contentType, permissions);
>> +    AtomSection<ELFT> *section = getSection(
>> +        sectionName, contentType, permissions,
>> definedAtom->file().path());
>>
>>      // Add runtime relocations to the .rela section.
>>      for (const auto &reloc : *definedAtom) {
>>
>> Modified: lld/trunk/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h?rev=230138&r1=230137&r2=230138&view=diff
>>
>> ==============================================================================
>> --- lld/trunk/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h (original)
>> +++ lld/trunk/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h Sat Feb 21
>> 09:49:34 2015
>> @@ -67,6 +67,17 @@ public:
>>      return *_gpDispAtom;
>>    }
>>
>> +  /// \brief Return the section order for a input section
>> +  virtual Layout::SectionOrder getSectionOrder(StringRef name,
>> +                                               int32_t contentType,
>> +                                               int32_t
>> contentPermissions) {
>> +    if ((contentType == DefinedAtom::typeStub) &&
>> (name.startswith(".text")))
>> +      return DefaultLayout<ELFType>::ORDER_TEXT;
>> +
>> +    return DefaultLayout<ELFType>::getSectionOrder(name, contentType,
>> +                                                   contentPermissions);
>> +  }
>> +
>>  private:
>>    llvm::BumpPtrAllocator _alloc;
>>    MipsGOTSection<ELFType> *_gotSection;
>>
>>
>> _______________________________________________
>> 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/20150225/68fc71c9/attachment.html>


More information about the llvm-commits mailing list