]> sourceware.org Git - valgrind.git/commitdiff
debuginfo.c: Add more hooks for lazy loading debuginfo
authorAaron Merey <amerey@redhat.com>
Wed, 20 Sep 2023 17:00:02 +0000 (13:00 -0400)
committerAaron Merey <amerey@redhat.com>
Fri, 22 Sep 2023 20:02:59 +0000 (16:02 -0400)
Add calls to di_load_di in search_one_{symtab,loctab,cfitab} to ensure
that debuginfo is always loaded before searching these tables.

This fixes a bug introduced in commit 60f7e89ba32 that results in
callgrind failing to read source filenames from debuginfo.

Also add a test which checks that callgrind successfully finds a
filename from debuginfo.

Co-Authored-By: Philippe Waroquiers <philippe.waroquiers@skynet.be>
callgrind/tests/Makefile.am
callgrind/tests/find-source.post.exp [new file with mode: 0644]
callgrind/tests/find-source.stderr.exp [new file with mode: 0644]
callgrind/tests/find-source.vgtest [new file with mode: 0644]
coregrind/m_debuginfo/priv_storage.h
coregrind/m_debuginfo/storage.c

index d6b0937f469d5eba87ffb01b64e5bb9dad4784ff..9b686799080b366c5e37dff33fa9686cf2a2b426 100644 (file)
@@ -21,7 +21,8 @@ EXTRA_DIST = \
        notpower2-hwpref.vgtest notpower2-hwpref.stderr.exp \
        notpower2-use.vgtest notpower2-use.stderr.exp \
        threads.vgtest threads.stderr.exp \
-       threads-use.vgtest threads-use.stderr.exp
+       threads-use.vgtest threads-use.stderr.exp \
+       find-source.vgtest find-source.stderr.exp find-source.post.exp
 
 check_PROGRAMS = clreq simwork threads
 
diff --git a/callgrind/tests/find-source.post.exp b/callgrind/tests/find-source.post.exp
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/callgrind/tests/find-source.stderr.exp b/callgrind/tests/find-source.stderr.exp
new file mode 100644 (file)
index 0000000..d0b7820
--- /dev/null
@@ -0,0 +1,6 @@
+
+
+Events    : Ir
+Collected :
+
+I   refs:
diff --git a/callgrind/tests/find-source.vgtest b/callgrind/tests/find-source.vgtest
new file mode 100644 (file)
index 0000000..cf1db46
--- /dev/null
@@ -0,0 +1,6 @@
+# The 'prog' doesn't matter because we don't use its output. Instead we test
+# the post-processing of the cgout-test file.
+prog: ../../tests/true
+vgopts: --callgrind-out-file=callgrind.out
+post: grep -q 'tests/true\.c' callgrind.out
+cleanup: rm callgrind.out
index b959873ab8e44d67d9ccd5c18611ff2a41a2698d..912edd435a6aca0d3537c7025decf1fc3b9f10d9 100644 (file)
@@ -1162,16 +1162,16 @@ extern void ML_(finish_CFSI_arrays) ( struct _DebugInfo* di );
 
 /* Find a symbol-table index containing the specified pointer, or -1
    if not found.  Binary search.  */
-extern Word ML_(search_one_symtab) ( const DebugInfo* di, Addr ptr,
+extern Word ML_(search_one_symtab) ( DebugInfo* di, Addr ptr,
                                      Bool findText );
 
 /* Find a location-table index containing the specified pointer, or -1
    if not found.  Binary search.  */
-extern Word ML_(search_one_loctab) ( const DebugInfo* di, Addr ptr );
+extern Word ML_(search_one_loctab) ( DebugInfo* di, Addr ptr );
 
 /* Find a CFI-table index containing the specified pointer, or -1 if
    not found.  Binary search.  */
-extern Word ML_(search_one_cfitab) ( const DebugInfo* di, Addr ptr );
+extern Word ML_(search_one_cfitab) ( DebugInfo* di, Addr ptr );
 
 /* Find a FPO-table index containing the specified pointer, or -1
    if not found.  Binary search.  */
index 3ad114607b8b3d9818477b8734ff1f3ffbcd107b..80c4b77bb59f8976cc6181be0d63526c94920175 100644 (file)
@@ -2420,9 +2420,10 @@ void ML_(canonicaliseTables) ( struct _DebugInfo* di )
 /* Find a symbol-table index containing the specified pointer, or -1
    if not found.  Binary search.  */
 
-Word ML_(search_one_symtab) ( const DebugInfo* di, Addr ptr,
+Word ML_(search_one_symtab) ( DebugInfo* di, Addr ptr,
                               Bool findText )
 {
+   VG_(di_load_di)(di);
    Addr a_mid_lo, a_mid_hi;
    Word mid,
         lo = 0, 
@@ -2449,8 +2450,9 @@ Word ML_(search_one_symtab) ( const DebugInfo* di, Addr ptr,
 /* Find a location-table index containing the specified pointer, or -1
    if not found.  Binary search.  */
 
-Word ML_(search_one_loctab) ( const DebugInfo* di, Addr ptr )
+Word ML_(search_one_loctab) ( DebugInfo* di, Addr ptr )
 {
+   VG_(di_load_di)(di);
    Addr a_mid_lo, a_mid_hi;
    Word mid, 
         lo = 0, 
@@ -2473,8 +2475,9 @@ Word ML_(search_one_loctab) ( const DebugInfo* di, Addr ptr )
 /* Find a CFI-table index containing the specified pointer, or -1
    if not found.  Binary search.  */
 
-Word ML_(search_one_cfitab) ( const DebugInfo* di, Addr ptr )
+Word ML_(search_one_cfitab) ( DebugInfo* di, Addr ptr )
 {
+   VG_(di_load_di)(di);
    Word mid, 
         lo = 0, 
         hi = di->cfsi_used-1;
This page took 0.040413 seconds and 5 git commands to generate.