Valgrind: r16439 - in /branches/VALGRIND_3_13_BRANCH: ./ NEWS coregrind/m_xtree.c

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Valgrind: r16439 - in /branches/VALGRIND_3_13_BRANCH: ./ NEWS coregrind/m_xtree.c

svn-2
Author: sewardj
Date: Fri Jun  9 14:27:34 2017
New Revision: 16439

Log:
Merge from trunk, r16435:
  Fix 380200 - xtree generated callgrind files [..]

Modified:
    branches/VALGRIND_3_13_BRANCH/   (props changed)
    branches/VALGRIND_3_13_BRANCH/NEWS   (contents, props changed)
    branches/VALGRIND_3_13_BRANCH/coregrind/m_xtree.c

Modified: branches/VALGRIND_3_13_BRANCH/NEWS
==============================================================================
--- branches/VALGRIND_3_13_BRANCH/NEWS (original)
+++ branches/VALGRIND_3_13_BRANCH/NEWS Fri Jun  9 14:27:34 2017
@@ -247,6 +247,7 @@
 379895  clock_gettime does not execute POST syscall wrapper
 379925  PPC64, mtffs does not set the FPCC and C bits in the FPSCR correctly
 379966  WARNING: unhandled amd64-linux syscall: 313 (finit_module)
+380200  xtree generated callgrind files refer to files without directory name
 
 (3.13.0.RC1:  2 June 2017, vex r3386, valgrind r16434)
 

Modified: branches/VALGRIND_3_13_BRANCH/coregrind/m_xtree.c
==============================================================================
--- branches/VALGRIND_3_13_BRANCH/coregrind/m_xtree.c (original)
+++ branches/VALGRIND_3_13_BRANCH/coregrind/m_xtree.c Fri Jun  9 14:27:34 2017
@@ -433,6 +433,10 @@
    VgFile* fp = xt_open(outfilename);
    DedupPoolAlloc* fnname_ddpa;
    DedupPoolAlloc* filename_ddpa;
+   HChar* filename_buf = NULL;
+   UInt filename_buf_size = 0;
+   const HChar* filename_dir;
+   const HChar* filename_name;
 
    if (fp == NULL)
       return;
@@ -489,23 +493,43 @@
 
       const HChar* img = img_value(VG_(indexXA)(xt->data, xecu));
     
-      // CALLED_FLF gets the Filename/Line number/Function name for ips[n]
+      // CALLED_FLF gets the Dir+Filename/Line number/Function name for ips[n]
+      // in the variables called_filename/called_linenum/called_fnname.
+      // The booleans called_filename_new/called_fnname_new are set to True
+      // the first time the called_filename/called_fnname are encountered.
+      // The called_filename_nr/called_fnname_nr are numbers identifying
+      // the strings  called_filename/called_fnname.
 #define CALLED_FLF(n)                                                   \
       if ((n) < 0                                                       \
           || !VG_(get_filename_linenum)(ips[(n)],                       \
-                                        &called_filename,               \
-                                        NULL,                           \
+                                        &filename_name,                 \
+                                        &filename_dir,                  \
                                         &called_linenum)) {             \
-         called_filename = "UnknownFile???";                            \
+         filename_name = "UnknownFile???";                              \
          called_linenum = 0;                                            \
       }                                                                 \
       if ((n) < 0                                                       \
           || !VG_(get_fnname)(ips[(n)], &called_fnname)) {              \
          called_fnname = "UnknownFn???";                                \
       }                                                                 \
+      {                                                                 \
+         UInt needed_size = VG_(strlen)(filename_dir) + 1               \
+            + VG_(strlen)(filename_name) + 1;                           \
+         if (filename_buf_size < needed_size) {                         \
+            filename_buf_size = needed_size;                            \
+            filename_buf = VG_(realloc)(xt->cc, filename_buf,           \
+                                        filename_buf_size);             \
+         }                                                              \
+      }                                                                 \
+      VG_(strcpy)(filename_buf, filename_dir);                          \
+      if (filename_buf[0] != '\0') {                                    \
+         VG_(strcat)(filename_buf, "/");                                \
+      }                                                                 \
+      VG_(strcat)(filename_buf, filename_name);                         \
       called_filename_nr = VG_(allocStrDedupPA)(filename_ddpa,          \
-                                                called_filename,        \
+                                                filename_buf,           \
                                                 &called_filename_new);  \
+      called_filename = filename_buf;                                   \
       called_fnname_nr = VG_(allocStrDedupPA)(fnname_ddpa,              \
                                               called_fnname,            \
                                               &called_fnname_new);
@@ -579,6 +603,7 @@
    VG_(fclose)(fp);
    VG_(deleteDedupPA)(fnname_ddpa);
    VG_(deleteDedupPA)(filename_ddpa);
+   VG_(free)(filename_buf);
 }
 
 


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Valgrind-developers mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/valgrind-developers