Make a copy of the vdso bytes to make valgrind a little quieter.
authorSoren Sandmann <sandmann@daimi.au.dk>
Fri, 2 Mar 2007 06:21:37 +0000 (06:21 +0000)
committerSøren Sandmann Pedersen <ssp@src.gnome.org>
Fri, 2 Mar 2007 06:21:37 +0000 (06:21 +0000)
2007-03-02  Soren Sandmann <sandmann@daimi.au.dk>

* process.c (process_get_vdso_bytes): Make a copy of the vdso
bytes to make valgrind a little quieter.

* binparser.c: Note to self: Save the file, *then* commit.

svn path=/trunk/; revision=357

ChangeLog
binparser.c
binparser.h
process.c

index 83ecfc3..e014545 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
 2007-03-02  Soren Sandmann <sandmann@daimi.au.dk>
 
+       * process.c (process_get_vdso_bytes): Make a copy of the vdso
+       bytes to make valgrind a little quieter.
+
+       * binparser.c: Note to self: Save the file, *then* commit.
+       
+2007-03-02  Soren Sandmann <sandmann@daimi.au.dk>
+
        Fix two leaks, both pointed out by Kjartan Maraas
        
        * binparser.c (bin_parser_free): Free the record list 
index 6b6c95a..0a24981 100644 (file)
@@ -75,6 +75,8 @@ bin_parser_free (BinParser *parser)
        
        g_free (record);
     }
+
+    g_list_free (parser->records);
     
     g_free (parser);
 }
index 4b0a853..ebedf40 100644 (file)
@@ -72,8 +72,7 @@ typedef enum
 struct BinField {
     const char         name[BIN_MAX_NAME];
     char               type;
-    char               n_bytes;        /* number of bytes if type
-                                        * is UNINTERPRETED */
+    char               n_bytes;        /* number of bytes in the type */
 };
 
 BinParser *   bin_parser_new        (const guchar *data,
index 63832c9..8ff8b7e 100644 (file)
--- a/process.c
+++ b/process.c
@@ -175,8 +175,19 @@ process_get_vdso_bytes (gsize *length)
 
            if (strcmp (map->filename, "[vdso]") == 0)
            {
-               bytes = (guint8 *)map->start;
                n_bytes = map->end - map->start;
+
+               /* Dup the memory here so that valgrind will only
+                * report one 1 byte invalid read instead of
+                * a ton when the elf parser scans the vdso
+                *
+                * The reason we get a spurious invalid read from
+                * valgrind is that we are getting the address directly
+                * from /proc/maps, and valgrind knows that its mmap()
+                * wrapper never returned that address. But since it
+                * is a legal mapping, it is legal to read it.
+                */
+               bytes = g_memdup ((guint8 *)map->start, n_bytes);
            }
        }