[PATCH] D49820: [ELF] Use search paths for --version-script=

Rui Ueyama via llvm-commits llvm-commits at lists.llvm.org
Wed Jul 25 14:58:19 PDT 2018


Looks like you forgot to apply the change that I proposed.

On Wed, Jul 25, 2018 at 2:53 PM Fangrui Song via Phabricator <
reviews at reviews.llvm.org> wrote:

> This revision was automatically updated to reflect the committed changes.
> Closed by commit rL337969: [ELF] Use search paths for --version-script=
> (authored by MaskRay, committed by ).
>
> Repository:
>   rL LLVM
>
> https://reviews.llvm.org/D49820
>
> Files:
>   lld/trunk/ELF/Driver.cpp
>   lld/trunk/ELF/Driver.h
>   lld/trunk/ELF/DriverUtils.cpp
>   lld/trunk/ELF/ScriptParser.cpp
>   lld/trunk/test/ELF/version-script-in-search-path.s
>
>
> Index: lld/trunk/ELF/DriverUtils.cpp
> ===================================================================
> --- lld/trunk/ELF/DriverUtils.cpp
> +++ lld/trunk/ELF/DriverUtils.cpp
> @@ -227,10 +227,10 @@
>    return None;
>  }
>
> -// If a linker script doesn't exist in the current directory, we also
> look for
> -// the script in the '-L' search paths. This matches the behaviour of
> both '-T'
> -// and linker script INPUT() directives in ld.bfd.
> -Optional<std::string> elf::searchLinkerScript(StringRef Name) {
> +// If a linker/version script doesn't exist in the current directory, we
> also
> +// look for the script in the '-L' search paths. This matches the
> behaviour of
> +// '-T', --version-script=, and linker script INPUT() command in ld.bfd.
> +Optional<std::string> elf::searchScript(StringRef Name) {
>    if (fs::exists(Name))
>      return Name.str();
>    return findFromSearchPaths(Name);
> Index: lld/trunk/ELF/Driver.cpp
> ===================================================================
> --- lld/trunk/ELF/Driver.cpp
> +++ lld/trunk/ELF/Driver.cpp
> @@ -939,8 +939,12 @@
>      Config->Undefined.push_back(Arg->getValue());
>
>    for (auto *Arg : Args.filtered(OPT_version_script))
> -    if (Optional<MemoryBufferRef> Buffer = readFile(Arg->getValue()))
> -      readVersionScript(*Buffer);
> +    if (Optional<std::string> Path = searchScript(Arg->getValue())) {
> +      if (Optional<MemoryBufferRef> Buffer = readFile(*Path))
> +        readVersionScript(*Buffer);
> +    } else {
> +      error(Twine("cannot find version script ") + Arg->getValue());
> +    }
>  }
>
>  // Some Config members do not directly correspond to any particular
> @@ -1022,7 +1026,7 @@
>        break;
>      }
>      case OPT_script:
> -      if (Optional<std::string> Path =
> searchLinkerScript(Arg->getValue())) {
> +      if (Optional<std::string> Path = searchScript(Arg->getValue())) {
>          if (Optional<MemoryBufferRef> MB = readFile(*Path))
>            readLinkerScript(*MB);
>          break;
> Index: lld/trunk/ELF/ScriptParser.cpp
> ===================================================================
> --- lld/trunk/ELF/ScriptParser.cpp
> +++ lld/trunk/ELF/ScriptParser.cpp
> @@ -344,7 +344,7 @@
>      return;
>    }
>
> -  if (Optional<std::string> Path = searchLinkerScript(Tok)) {
> +  if (Optional<std::string> Path = searchScript(Tok)) {
>      if (Optional<MemoryBufferRef> MB = readFile(*Path))
>        tokenize(*MB);
>      return;
> Index: lld/trunk/ELF/Driver.h
> ===================================================================
> --- lld/trunk/ELF/Driver.h
> +++ lld/trunk/ELF/Driver.h
> @@ -67,7 +67,7 @@
>  std::string createResponseFile(const llvm::opt::InputArgList &Args);
>
>  llvm::Optional<std::string> findFromSearchPaths(StringRef Path);
> -llvm::Optional<std::string> searchLinkerScript(StringRef Path);
> +llvm::Optional<std::string> searchScript(StringRef Path);
>  llvm::Optional<std::string> searchLibrary(StringRef Path);
>
>  } // namespace elf
> Index: lld/trunk/test/ELF/version-script-in-search-path.s
> ===================================================================
> --- lld/trunk/test/ELF/version-script-in-search-path.s
> +++ lld/trunk/test/ELF/version-script-in-search-path.s
> @@ -0,0 +1,10 @@
> +# REQUIRES: x86
> +# Check that we fall back to search paths if a version script was not
> found
> +# This behaviour matches ld.bfd.
> +
> +# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o
> +# RUN: mkdir -p %T/searchpath
> +# RUN: echo '{};' > %T/searchpath/t.script
> +# RUN: ld.lld -L%T/searchpath --version-script=t.script %t.o -o /dev/null
> +# RUN: not ld.lld --version-script=t.script %t.o 2>&1 | FileCheck
> -check-prefix ERROR %s
> +# ERROR: error: cannot find version script
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180725/31d08669/attachment.html>


More information about the llvm-commits mailing list