Try to use the CWD if the path to the GCDA output is not available (e.g., the
authorBill Wendling <isanbard@gmail.com>
Tue, 27 Mar 2012 21:17:04 +0000 (21:17 +0000)
committerBill Wendling <isanbard@gmail.com>
Tue, 27 Mar 2012 21:17:04 +0000 (21:17 +0000)
executable has been moved to another machine). If that's not available
(read-only or something), then exit gracefully.
<rdar://problem/11111686>

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@153538 91177308-0d34-0410-b5e6-96231b3b80d8

runtime/libprofile/GCDAProfiling.c

index 4ffb12b15ebfb5e4753221a54e8bcffa87b8fdcb..712dba08be4b22ed3920f56bf5de7a0ac062ec5c 100644 (file)
@@ -113,6 +113,20 @@ void llvm_gcda_start_file(const char *orig_filename) {
   recursive_mkdir(filename);
   output_file = fopen(filename, "wb");
 
+  if (!output_file) {
+    filename[0] = '\0';  /* The size of filename should be big enough. */
+    char *cptr = strrchr(orig_filename, '/');
+    strcat(filename, cptr ? cptr + 1 : orig_filename);
+    output_file = fopen(filename, "wb");
+
+    if (!output_file) {
+      fprintf(stderr, "LLVM profiling runtime: while opening '%s': ",
+              filename);
+      perror("");
+      exit(1);
+    }
+  }
+
   /* gcda file, version 404*, stamp LLVM. */
 #ifdef __APPLE__
   fwrite("adcg*204MVLL", 12, 1, output_file);