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

Shankar Easwaran shankare at codeaurora.org
Thu Mar 5 12:41:30 PST 2015


Sorry, I missed your ping.

There was a FIXME comment that I addressed as part of the commit. 
Previously I had to disable because of the RoundTripPasses.

Shankar Easwaran

On 3/5/2015 2:29 PM, Rui Ueyama wrote:
> 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
>>>>
>>>


-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by the Linux Foundation




More information about the llvm-commits mailing list