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

Rui Ueyama ruiu at google.com
Thu Mar 5 12:29:11 PST 2015


Ping. This added extra code but no additional functionality? I'll roll this
back if it is so.

On Wed, Feb 25, 2015 at 3:30 PM, Rui Ueyama <ruiu at google.com> wrote:

> 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/20150305/8d7d6ee5/attachment.html>


More information about the llvm-commits mailing list