summaryrefslogtreecommitdiff
path: root/tools/link
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2001-12-08 20:31:32 +0000
committerChris Lattner <sabre@nondot.org>2001-12-08 20:31:32 +0000
commit952d365a3a446ebfbf14a8db27e26c5c2abec651 (patch)
treee5723e821c27b394a235ab8619e333d3d718e6bf /tools/link
parent036efec1ec1cd91a3fd1738c0dd177887a574954 (diff)
downloadllvm-952d365a3a446ebfbf14a8db27e26c5c2abec651.tar.gz
llvm-952d365a3a446ebfbf14a8db27e26c5c2abec651.tar.bz2
llvm-952d365a3a446ebfbf14a8db27e26c5c2abec651.tar.xz
Tell the user if a file is corrupt or not... not that the file cannot be
found. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@1433 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools/link')
-rw-r--r--tools/link/link.cpp23
1 files changed, 22 insertions, 1 deletions
diff --git a/tools/link/link.cpp b/tools/link/link.cpp
index 9bf766fcaa..83141c86e7 100644
--- a/tools/link/link.cpp
+++ b/tools/link/link.cpp
@@ -18,6 +18,8 @@
#include "Support/CommandLine.h"
#include <fstream>
#include <memory>
+#include <sys/types.h> // For FileExists
+#include <sys/stat.h>
cl::StringList InputFilenames("", "Load <arg> files, linking them together",
@@ -28,14 +30,26 @@ cl::Flag Verbose ("v", "Print information about actions taken");
cl::Flag DumpAsm ("d", "Print assembly as linked", cl::Hidden, false);
cl::StringList LibPaths ("L", "Specify a library search path", cl::ZeroOrMore);
+
+// FileExists - Return true if the specified string is an openable file...
+static inline bool FileExists(const string &FN) {
+ struct stat StatBuf;
+ return stat(FN.c_str(), &StatBuf) != -1;
+}
+
+// LoadFile - Read the specified bytecode file in and return it. This routine
+// searches the link path for the specified file to try to find it...
+//
static inline std::auto_ptr<Module> LoadFile(const string &FN) {
string Filename = FN;
string ErrorMessage;
unsigned NextLibPathIdx = 0;
+ bool FoundAFile = false;
while (1) {
if (Verbose) cerr << "Loading '" << Filename << "'\n";
+ if (FileExists(Filename)) FoundAFile = true;
Module *Result = ParseBytecodeFile(Filename, &ErrorMessage);
if (Result) return std::auto_ptr<Module>(Result); // Load successful!
@@ -49,10 +63,17 @@ static inline std::auto_ptr<Module> LoadFile(const string &FN) {
Filename = LibPaths[NextLibPathIdx++] + "/" + FN;
}
- cerr << "Could not locate bytecode file: '" << FN << "'\n";
+ if (FoundAFile)
+ cerr << "Bytecode file '" << FN << "' corrupt! "
+ << "Use 'link -v ...' for more info.\n";
+ else
+ cerr << "Could not locate bytecode file: '" << FN << "'\n";
return std::auto_ptr<Module>();
}
+
+
+
int main(int argc, char **argv) {
cl::ParseCommandLineOptions(argc, argv, " llvm linker\n",
cl::EnableSingleLetterArgValue |