]> granicus.if.org Git - clang/commitdiff
Driver: Get executable path using llvm::sys::Path::GetMainExecutable.
authorDaniel Dunbar <daniel@zuster.org>
Wed, 18 Mar 2009 20:25:53 +0000 (20:25 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Wed, 18 Mar 2009 20:25:53 +0000 (20:25 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@67228 91177308-0d34-0410-b5e6-96231b3b80d8

tools/driver/driver.cpp

index fac44032518bf93ac2be916985c10b3e752764c0..865b57c5aba675e8972d6c2ee387c073ea5c8bf7 100644 (file)
@@ -60,15 +60,18 @@ void DriverDiagnosticPrinter::HandleDiagnostic(Diagnostic::Level Level,
   OS << '\n';
 }
 
+llvm::sys::Path GetExecutablePath(const char *Argv0) {
+  // This just needs to be some symbol in the binary; C++ doesn't
+  // allow taking the address of ::main however.
+  void *P = (void*) (intptr_t) GetExecutablePath;
+  return llvm::sys::Path::GetMainExecutable(Argv0, P);
+}
+
 int main(int argc, const char **argv) {
   llvm::sys::PrintStackTraceOnErrorSignal();
   llvm::PrettyStackTraceProgram X(argc, argv);
 
-  // FIXME: We should use GetMainExecutable here, probably, but we may
-  // want to handle symbolic links slightly differently. The problem
-  // is that the path derived from this will influence search paths.
-  llvm::sys::Path Path(argv[0]);
-
+  llvm::sys::Path Path = GetExecutablePath(argv[0]);
   llvm::OwningPtr<DiagnosticClient> 
     DiagClient(new DriverDiagnosticPrinter(Path.getBasename(), llvm::errs()));