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

Shankar Easwaran shankare at codeaurora.org
Thu Mar 5 12:54:04 PST 2015


-  // FIXME: We really need the file path here in the SectionKey, when that
-  // is available, replace the sectionKey that has outputSectionName to the
-  // inputSectionName.

Shankar Easwaran

On 3/5/2015 2:51 PM, Rui Ueyama wrote:
> What did you address? The commit message says that there's no functionality
> change by this commit.
>
> On Thu, Mar 5, 2015 at 12:41 PM, Shankar Easwaran <shankare at codeaurora.org>
> wrote:
>
>> 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
>>
>>


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




More information about the llvm-commits mailing list