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

Rui Ueyama ruiu at google.com
Sun Feb 22 19:36:48 PST 2015


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/20150222/d179ea1c/attachment.html>


More information about the llvm-commits mailing list