Revert r259143, it broke check-lld on Windows (see PR26388).
authorNico Weber <nicolasweber@gmx.de>
Mon, 1 Feb 2016 20:03:53 +0000 (20:03 +0000)
committerNico Weber <nicolasweber@gmx.de>
Mon, 1 Feb 2016 20:03:53 +0000 (20:03 +0000)
llvm-svn: 259395

lld/ELF/Driver.cpp
lld/ELF/Driver.h
lld/ELF/DriverUtils.cpp
lld/ELF/Error.cpp
lld/ELF/Error.h
lld/ELF/LinkerScript.cpp
lld/test/ELF/driver.test [deleted file]

index 61727c4..fe0a3f5 100644 (file)
@@ -55,10 +55,8 @@ static std::pair<ELFKind, uint16_t> parseEmulation(StringRef S) {
   if (S == "aarch64linux")
     return {ELF64LEKind, EM_AARCH64};
   if (S == "i386pe" || S == "i386pep" || S == "thumb2pe")
-    error("Windows targets are not supported on the ELF frontend: " + S);
-  else
-    error("Unknown emulation: " + S);
-  return {ELFNoneKind, 0};
+    fatal("Windows targets are not supported on the ELF frontend: " + S);
+  fatal("Unknown emulation: " + S);
 }
 
 // Returns slices of MB by parsing MB as an archive file.
@@ -86,8 +84,7 @@ void LinkerDriver::addFile(StringRef Path) {
   if (Config->Verbose)
     llvm::outs() << Path << "\n";
   auto MBOrErr = MemoryBuffer::getFile(Path);
-  if (error(MBOrErr, "cannot open " + Path))
-    return;
+  fatal(MBOrErr, "cannot open " + Path);
   std::unique_ptr<MemoryBuffer> &MB = *MBOrErr;
   MemoryBufferRef MBRef = MB->getMemBufferRef();
   OwningMBs.push_back(std::move(MB)); // take MB ownership
@@ -112,15 +109,6 @@ void LinkerDriver::addFile(StringRef Path) {
   }
 }
 
-// Add a given library by searching it from input search paths.
-void LinkerDriver::addLibrary(StringRef Name) {
-  std::string Path = searchLibrary(Name);
-  if (Path.empty())
-    error("Unable to find library -l" + Name);
-  else
-    addFile(Path);
-}
-
 // Some command line options or some combinations of them are not allowed.
 // This function checks for such errors.
 static void checkOptions(opt::InputArgList &Args) {
@@ -128,15 +116,15 @@ static void checkOptions(opt::InputArgList &Args) {
   // of executables or DSOs. We don't support that since the feature
   // does not seem to provide more value than the static archiver.
   if (Args.hasArg(OPT_relocatable))
-    error("-r option is not supported. Use 'ar' command instead.");
+    fatal("-r option is not supported. Use 'ar' command instead.");
 
   // The MIPS ABI as of 2016 does not support the GNU-style symbol lookup
   // table which is a relatively new feature.
   if (Config->EMachine == EM_MIPS && Config->GnuHash)
-    error("The .gnu.hash section is not compatible with the MIPS target.");
+    fatal("The .gnu.hash section is not compatible with the MIPS target.");
 
   if (Config->EMachine == EM_AMDGPU && !Config->Entry.empty())
-    error("-e option is not valid for AMDGPU.");
+    fatal("-e option is not valid for AMDGPU.");
 }
 
 static StringRef
@@ -160,8 +148,6 @@ void LinkerDriver::main(ArrayRef<const char *> ArgsArr) {
   readConfigs(Args);
   createFiles(Args);
   checkOptions(Args);
-  if (HasError)
-    return;
 
   switch (Config->EKind) {
   case ELF32LEKind:
@@ -177,7 +163,7 @@ void LinkerDriver::main(ArrayRef<const char *> ArgsArr) {
     link<ELF64BE>(Args);
     return;
   default:
-    error("-m or at least a .o file required");
+    fatal("-m or at least a .o file required");
   }
 }
 
@@ -233,7 +219,7 @@ void LinkerDriver::readConfigs(opt::InputArgList &Args) {
   if (auto *Arg = Args.getLastArg(OPT_O)) {
     StringRef Val = Arg->getValue();
     if (Val.getAsInteger(10, Config->Optimize))
-      error("Invalid optimization level");
+      fatal("Invalid optimization level");
   }
 
   if (auto *Arg = Args.getLastArg(OPT_hash_style)) {
@@ -244,7 +230,7 @@ void LinkerDriver::readConfigs(opt::InputArgList &Args) {
     } else if (S == "both") {
       Config->GnuHash = true;
     } else if (S != "sysv")
-      error("Unknown hash style: " + S);
+      fatal("Unknown hash style: " + S);
   }
 
   for (auto *Arg : Args.filtered(OPT_undefined))
@@ -255,7 +241,7 @@ void LinkerDriver::createFiles(opt::InputArgList &Args) {
   for (auto *Arg : Args) {
     switch (Arg->getOption().getID()) {
     case OPT_l:
-      addLibrary(Arg->getValue());
+      addFile(searchLibrary(Arg->getValue()));
       break;
     case OPT_INPUT:
     case OPT_script:
@@ -282,8 +268,8 @@ void LinkerDriver::createFiles(opt::InputArgList &Args) {
     }
   }
 
-  if (Files.empty() && !HasError)
-    error("no input files.");
+  if (Files.empty())
+    fatal("no input files.");
 }
 
 template <class ELFT> void LinkerDriver::link(opt::InputArgList &Args) {
index adcf457..95b6d96 100644 (file)
@@ -27,7 +27,6 @@ class LinkerDriver {
 public:
   void main(ArrayRef<const char *> Args);
   void addFile(StringRef Path);
-  void addLibrary(StringRef Name);
 
 private:
   void readConfigs(llvm::opt::InputArgList &Args);
index bbe5f9f..52e4633 100644 (file)
@@ -66,7 +66,7 @@ opt::InputArgList elf2::parseArgs(llvm::BumpPtrAllocator *A,
   // Parse options and then do error checking.
   opt::InputArgList Args = Table.ParseArgs(Vec, MissingIndex, MissingCount);
   if (MissingCount)
-    error(Twine("missing arg value for \"") + Args.getArgString(MissingIndex) +
+    fatal(Twine("missing arg value for \"") + Args.getArgString(MissingIndex) +
           "\", expected " + Twine(MissingCount) +
           (MissingCount == 1 ? " argument.\n" : " arguments"));
 
@@ -74,7 +74,8 @@ opt::InputArgList elf2::parseArgs(llvm::BumpPtrAllocator *A,
   for (auto *Arg : Unknowns)
     warning("warning: unknown argument: " + Arg->getSpelling());
   if (Unknowns.begin() != Unknowns.end())
-    error("unknown argument(s) found");
+    fatal("unknown argument(s) found");
+
   return Args;
 }
 
@@ -103,7 +104,7 @@ std::string elf2::searchLibrary(StringRef Path) {
     if (!S.empty())
       return S;
   }
-  return "";
+  fatal("Unable to find library -l" + Path);
 }
 
 // Makes a path by concatenating Dir and File.
index e3add1b..327bb26 100644 (file)
@@ -24,18 +24,14 @@ void error(const Twine &Msg) {
   HasError = true;
 }
 
-bool error(std::error_code EC, const Twine &Prefix) {
-  if (!EC)
-    return false;
-  error(Prefix + ": " + EC.message());
-  return true;
+void error(std::error_code EC, const Twine &Prefix) {
+  if (EC)
+    error(Prefix + ": " + EC.message());
 }
 
-bool error(std::error_code EC) {
-  if (!EC)
-    return false;
-  error(EC.message());
-  return true;
+void error(std::error_code EC) {
+  if (EC)
+    error(EC.message());
 }
 
 void fatal(const Twine &Msg) {
index 546e1d3..3b6aa69 100644 (file)
@@ -20,16 +20,13 @@ extern bool HasError;
 void warning(const Twine &Msg);
 
 void error(const Twine &Msg);
-bool error(std::error_code EC, const Twine &Prefix);
-bool error(std::error_code EC);
+void error(std::error_code EC, const Twine &Prefix);
+void error(std::error_code EC);
 
-template <typename T> bool error(const ErrorOr<T> &V, const Twine &Prefix) {
-  return error(V.getError(), Prefix);
-}
-
-template <typename T> bool error(const ErrorOr<T> &V) {
-  return error(V.getError());
+template <typename T> void error(const ErrorOr<T> &V, const Twine &Prefix) {
+  error(V.getError(), Prefix);
 }
+template <typename T> void error(const ErrorOr<T> &V) { error(V.getError()); }
 
 LLVM_ATTRIBUTE_NORETURN void fatal(const Twine &Msg);
 void fatal(std::error_code EC, const Twine &Prefix);
@@ -38,7 +35,6 @@ void fatal(std::error_code EC);
 template <typename T> void fatal(const ErrorOr<T> &V, const Twine &Prefix) {
   fatal(V.getError(), Prefix);
 }
-
 template <typename T> void fatal(const ErrorOr<T> &V) { fatal(V.getError()); }
 
 } // namespace elf2
index cbf422d..d9f98e9 100644 (file)
@@ -178,7 +178,7 @@ void LinkerScript::addFile(StringRef S) {
     else
       Driver->addFile(Saver.save(Config->Sysroot + "/" + S.substr(1)));
   } else if (S.startswith("-l")) {
-    Driver->addLibrary(S.substr(2));
+    Driver->addFile(searchLibrary(S.substr(2)));
   } else if (sys::fs::exists(S)) {
     Driver->addFile(S);
   } else {
diff --git a/lld/test/ELF/driver.test b/lld/test/ELF/driver.test
deleted file mode 100644 (file)
index 13f040e..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-# RUN: not ld.lld -unknown1 -unknown2 -m foo /no/such/file -lnosuchlib \
-# RUN:   2>&1 | FileCheck %s
-
-# CHECK: warning: unknown argument: -unknown1
-# CHECK: warning: unknown argument: -unknown2
-# CHECK: unknown argument(s) found
-# CHECK: Unknown emulation: foo
-# CHECK: cannot open /no/such/file
-# CHECK: Unable to find library -lnosuchlib