[llvm-commits] [compiler-rt] r157574 - /compiler-rt/trunk/lib/profile/GCDAProfiling.c

Bill Wendling isanbard at gmail.com
Mon May 28 03:09:01 PDT 2012


Author: void
Date: Mon May 28 05:09:01 2012
New Revision: 157574

URL: http://llvm.org/viewvc/llvm-project?rev=157574&view=rev
Log:
Add support for the GCOV_PREFIX_STRIP env variable which tries to strip off the first 'n' directories from the filename.

Modified:
    compiler-rt/trunk/lib/profile/GCDAProfiling.c

Modified: compiler-rt/trunk/lib/profile/GCDAProfiling.c
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/profile/GCDAProfiling.c?rev=157574&r1=157573&r2=157574&view=diff
==============================================================================
--- compiler-rt/trunk/lib/profile/GCDAProfiling.c (original)
+++ compiler-rt/trunk/lib/profile/GCDAProfiling.c Mon May 28 05:09:01 2012
@@ -67,20 +67,39 @@
 }
 
 static char *mangle_filename(const char *orig_filename) {
-  /* TODO: handle GCOV_PREFIX_STRIP */
   char *filename = 0;
   int prefix_len = 0;
+  int prefix_strip = 0;
+  int level = 0;
+  const char *fname = orig_filename, *ptr = NULL;
   const char *prefix = getenv("GCOV_PREFIX");
+  const char *tmp = getenv("GCOV_PREFIX_STRIP");
 
-  if (!prefix || prefix[0] != '/') /* Ignore non-absolute paths */
+  if (!prefix)
     return strdup(orig_filename);
 
+  if (tmp) {
+    prefix_strip = atoi(tmp);
+
+    /* Negative GCOV_PREFIX_STRIP values are ignored */
+    if (prefix_strip < 0)
+      prefix_strip = 0;
+  }
+
   prefix_len = strlen(prefix);
   filename = malloc(prefix_len + 1 + strlen(orig_filename) + 1);
   strcpy(filename, prefix);
+
   if (prefix[prefix_len - 1] != '/')
     strcat(filename, "/");
-  strcat(filename, orig_filename);
+
+  for (ptr = fname + 1; *ptr != '\0' && level < prefix_strip; ++ptr) {
+    if (*ptr != '/') continue;
+    fname = ptr;
+    ++level;
+  }
+
+  strcat(filename, fname);
 
   return filename;
 }





More information about the llvm-commits mailing list