[lld] r189847 - Finish -rpath implementation to actually create the DT_RPATH entries.

Rui Ueyama ruiu at google.com
Tue Sep 3 13:55:53 PDT 2013


On Tue, Sep 3, 2013 at 1:45 PM, Joerg Sonnenberger <joerg at bec.de> wrote:

> Author: joerg
> Date: Tue Sep  3 15:45:09 2013
> New Revision: 189847
>
> URL: http://llvm.org/viewvc/llvm-project?rev=189847&view=rev
> Log:
> Finish -rpath implementation to actually create the DT_RPATH entries.
>
> Modified:
>     lld/trunk/include/lld/ReaderWriter/ELFLinkingContext.h
>     lld/trunk/lib/Driver/GnuLdDriver.cpp
>     lld/trunk/lib/ReaderWriter/ELF/OutputELFWriter.h
>     lld/trunk/test/elf/dynamic.test
>
> Modified: lld/trunk/include/lld/ReaderWriter/ELFLinkingContext.h
> URL:
> http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/ReaderWriter/ELFLinkingContext.h?rev=189847&r1=189846&r2=189847&view=diff
>
> ==============================================================================
> --- lld/trunk/include/lld/ReaderWriter/ELFLinkingContext.h (original)
> +++ lld/trunk/include/lld/ReaderWriter/ELFLinkingContext.h Tue Sep  3
> 15:45:09 2013
> @@ -180,6 +180,14 @@ public:
>      _sysrootPath = path;
>    }
>
> +  void addRpath(StringRef path) {
> +   _rpathList.push_back(path);
> +  }
> +
> +  range<const StringRef *> getRpathList() const {
> +    return _rpathList;
> +  }
> +
>  private:
>    ELFLinkingContext() LLVM_DELETED_FUNCTION;
>
> @@ -213,6 +221,7 @@ protected:
>    StringRefVector _initFunctions;
>    StringRefVector _finiFunctions;
>    StringRef _sysrootPath;
> +  StringRefVector _rpathList;
>  };
>  } // end namespace lld
>
>
> Modified: lld/trunk/lib/Driver/GnuLdDriver.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Driver/GnuLdDriver.cpp?rev=189847&r1=189846&r2=189847&view=diff
>
> ==============================================================================
> --- lld/trunk/lib/Driver/GnuLdDriver.cpp (original)
> +++ lld/trunk/lib/Driver/GnuLdDriver.cpp Tue Sep  3 15:45:09 2013
> @@ -289,6 +289,14 @@ bool GnuLdDriver::parse(int argc, const
>        break;
>      }
>
> +    case OPT_rpath: {
> +      SmallVector<StringRef, 2> rpaths;
> +      StringRef(inputArg->getValue()).split(rpaths, ":");
> +      for (auto path : rpaths)
> +        ctx->addRpath(path);
> +      break;
> +    }
>

Well, you missed my comments as to splitting by ":" may not make much
sense? Or if it makes sense you should have replied so.

+
>      case OPT_sysroot:
>        ctx->setSysroot(inputArg->getValue());
>        break;
>
> Modified: lld/trunk/lib/ReaderWriter/ELF/OutputELFWriter.h
> URL:
> http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/OutputELFWriter.h?rev=189847&r1=189846&r2=189847&view=diff
>
> ==============================================================================
> --- lld/trunk/lib/ReaderWriter/ELF/OutputELFWriter.h (original)
> +++ lld/trunk/lib/ReaderWriter/ELF/OutputELFWriter.h Tue Sep  3 15:45:09
> 2013
> @@ -160,6 +160,15 @@ void OutputELFWriter<ELFT>::buildDynamic
>      dyn.d_un.d_val = _dynamicStringTable->addString(loadName.getKey());
>      _dynamicTable->addEntry(dyn);
>    }
> +  const auto &rpathList = _context.getRpathList();
> +  if (!rpathList.empty()) {
> +    auto rpath = new (_alloc) std::string(join(rpathList.begin(),
> +      rpathList.end(), ":"));
> +    Elf_Dyn dyn;
> +    dyn.d_tag = DT_RPATH;
> +    dyn.d_un.d_val = _dynamicStringTable->addString(*rpath);
> +    _dynamicTable->addEntry(dyn);
> +  }
>    // The dynamic symbol table need to be sorted earlier because the hash
>    // table needs to be built using the dynamic symbol table. It would be
>    // late to sort the symbols due to that in finalize. In the dynamic
> symbol
>
> Modified: lld/trunk/test/elf/dynamic.test
> URL:
> http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/dynamic.test?rev=189847&r1=189846&r2=189847&view=diff
>
> ==============================================================================
> --- lld/trunk/test/elf/dynamic.test (original)
> +++ lld/trunk/test/elf/dynamic.test Tue Sep  3 15:45:09 2013
> @@ -1,6 +1,7 @@
>  # Checks functionality of dynamic executables
>  RUN: lld -flavor gnu -target x86_64-linux %p/Inputs/use-shared.x86-64 \
> -RUN:   %p/Inputs/shared.so-x86-64 -o %t -e main --allow-shlib-undefined
> +RUN:   %p/Inputs/shared.so-x86-64 -o %t -e main --allow-shlib-undefined \
> +RUN:   -rpath /l1:/l2 -rpath /l3
>  RUN: lld -flavor gnu -target x86_64-linux %p/Inputs/use-shared.x86-64 \
>  RUN:   %p/Inputs/shared.so-x86-64 -emit-yaml -o %t2
> --allow-shlib-undefined \
>  RUN: --noinhibit-exec
> @@ -59,7 +60,7 @@ CHECK-NEXT:     Binding: Global
>  CHECK-NEXT:     Type: Function
>  CHECK:        }
>
> -CHECK: DynamicSection [ (14 entries)
> +CHECK: DynamicSection [ (15 entries)
>  CHECK:   Tag                Type                 Name/Value
>  CHECK:   0x0000000000000004 HASH
>  CHECK:   0x0000000000000005 STRTAB
> @@ -74,5 +75,6 @@ CHECK:   0x0000000000000003 PLTGOT
>  CHECK:   0x0000000000000014 PLTREL RELA
>  CHECK:   0x0000000000000017 JMPREL
>  CHECK:   0x0000000000000001 NEEDED SharedLibrary (shared.so-x86-64)
> +CHECK:   0x000000000000000F RPATH /l1:/l2:/l3
>  CHECK:   0x0000000000000000 NULL               0x0
>  CHECK: ]
>
>
> _______________________________________________
> 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/20130903/de96a98c/attachment.html>


More information about the llvm-commits mailing list