[lld] r226632 - Fix --start-group/end-group.
Shankar Easwaran
shankare at codeaurora.org
Tue Jan 20 19:26:27 PST 2015
Does the test you changed, test the fix for start/end group ?
On 1/20/2015 7:26 PM, Rui Ueyama wrote:
> Author: ruiu
> Date: Tue Jan 20 19:26:43 2015
> New Revision: 226632
>
> URL: http://llvm.org/viewvc/llvm-project?rev=226632&view=rev
> Log:
> Fix --start-group/end-group.
>
> We used to manage the state whether we are in a group or not
> using a counter. The counter is incremented by one if we jump from
> end-group to start-group, and decremented by one if we don't.
> The counter was assumed to be either zero or one, but obviously it
> could be negative (if there's a group which is not repeated at all).
> This is a fix for that issue.
>
> Modified:
> lld/trunk/include/lld/Core/Resolver.h
> lld/trunk/lib/Core/Resolver.cpp
> lld/trunk/test/pecoff/Inputs/vars-main-x86.obj.yaml
>
> Modified: lld/trunk/include/lld/Core/Resolver.h
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/Core/Resolver.h?rev=226632&r1=226631&r2=226632&view=diff
> ==============================================================================
> --- lld/trunk/include/lld/Core/Resolver.h (original)
> +++ lld/trunk/include/lld/Core/Resolver.h Tue Jan 20 19:26:43 2015
> @@ -58,7 +58,7 @@ private:
> typedef std::function<void(StringRef, bool)> UndefCallback;
>
> bool undefinesAdded(int begin, int end);
> - File *getFile(int &index, int &groupLevel);
> + File *getFile(int &index, bool &inGroup);
>
> /// \brief Add section group/.gnu.linkonce if it does not exist previously.
> void maybeAddSectionGroupOrGnuLinkOnce(const DefinedAtom &atom);
>
> Modified: lld/trunk/lib/Core/Resolver.cpp
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Core/Resolver.cpp?rev=226632&r1=226631&r2=226632&view=diff
> ==============================================================================
> --- lld/trunk/lib/Core/Resolver.cpp (original)
> +++ lld/trunk/lib/Core/Resolver.cpp Tue Jan 20 19:26:43 2015
> @@ -254,7 +254,7 @@ bool Resolver::undefinesAdded(int begin,
> return false;
> }
>
> -File *Resolver::getFile(int &index, int &groupLevel) {
> +File *Resolver::getFile(int &index, bool &inGroup) {
> std::vector<std::unique_ptr<Node>> &inputs = _context.getNodes();
> if ((size_t)index >= inputs.size())
> return nullptr;
> @@ -265,12 +265,12 @@ File *Resolver::getFile(int &index, int
> int size = group->getSize();
> if (undefinesAdded(index - size, index)) {
> index -= size;
> - ++groupLevel;
> - return getFile(index, groupLevel);
> + inGroup = true;
> + return getFile(index, inGroup);
> }
> ++index;
> - --groupLevel;
> - return getFile(index, groupLevel);
> + inGroup = false;
> + return getFile(index, inGroup);
> }
> return cast<FileNode>(inputs[index++].get())->getFile();
> }
> @@ -290,10 +290,10 @@ void Resolver::makePreloadArchiveMap() {
> bool Resolver::resolveUndefines() {
> ScopedTask task(getDefaultDomain(), "resolveUndefines");
> int index = 0;
> - int groupLevel = 0;
> + bool inGroup = false;
> for (;;) {
> bool undefAdded = false;
> - File *file = getFile(index, groupLevel);
> + File *file = getFile(index, inGroup);
> if (!file)
> return true;
> if (std::error_code ec = file->parse()) {
> @@ -304,7 +304,7 @@ bool Resolver::resolveUndefines() {
> file->beforeLink();
> switch (file->kind()) {
> case File::kindObject:
> - if (groupLevel > 0)
> + if (inGroup)
> break;
> assert(!file->hasOrdinal());
> file->setOrdinal(_context.getNextOrdinalAndIncrement());
>
> Modified: lld/trunk/test/pecoff/Inputs/vars-main-x86.obj.yaml
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/vars-main-x86.obj.yaml?rev=226632&r1=226631&r2=226632&view=diff
> ==============================================================================
> --- lld/trunk/test/pecoff/Inputs/vars-main-x86.obj.yaml (original)
> +++ lld/trunk/test/pecoff/Inputs/vars-main-x86.obj.yaml Tue Jan 20 19:26:43 2015
> @@ -60,4 +60,10 @@ symbols:
> SimpleType: IMAGE_SYM_TYPE_NULL
> ComplexType: IMAGE_SYM_DTYPE_NULL
> StorageClass: IMAGE_SYM_CLASS_EXTERNAL
> + - Name: ___ImageBase
> + Value: 0
> + SectionNumber: 0
> + SimpleType: IMAGE_SYM_TYPE_NULL
> + ComplexType: IMAGE_SYM_DTYPE_NULL
> + StorageClass: IMAGE_SYM_CLASS_EXTERNAL
> ...
>
>
> _______________________________________________
> 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