Mark Wielaard 800b32
commit 67363912e9cdba83869a72ff8c4084e7a7e4ab85
Mark Wielaard 800b32
Author: Mark Wielaard <mark@klomp.org>
Mark Wielaard 800b32
Date:   Sun Feb 21 22:45:51 2021 +0100
Mark Wielaard 800b32
Mark Wielaard 800b32
    Fix typo in DWARF 5 line table readers
Mark Wielaard 800b32
    
Mark Wielaard 800b32
    This typo meant the directory entry was most often zero, which
Mark Wielaard 800b32
    happened to be sometimes correct anyway (since zero is the compdir).
Mark Wielaard 800b32
    So for simple testcases it looked correct. But it would be wrong for
Mark Wielaard 800b32
    compilation units not in the current compdir. Like files compiled with
Mark Wielaard 800b32
    a relative of absolute path.
Mark Wielaard 800b32
    
Mark Wielaard 800b32
    The same typo was in both readdwarf.c (read_dwarf2_lineblock) and
Mark Wielaard 800b32
    readdwarf3.c (read_filename_table). read_dwarf2_lineblock also had
Mark Wielaard 800b32
    an extra "dwarf" string in the debug-line output.
Mark Wielaard 800b32
    
Mark Wielaard 800b32
    https://bugzilla.redhat.com/show_bug.cgi?id=1927153
Mark Wielaard 800b32
Mark Wielaard 800b32
diff --git a/coregrind/m_debuginfo/readdwarf.c b/coregrind/m_debuginfo/readdwarf.c
Mark Wielaard 800b32
index 88d5d99f1..3996623ed 100644
Mark Wielaard 800b32
--- a/coregrind/m_debuginfo/readdwarf.c
Mark Wielaard 800b32
+++ b/coregrind/m_debuginfo/readdwarf.c
Mark Wielaard 800b32
@@ -683,7 +683,7 @@ void read_dwarf2_lineblock ( struct _DebugInfo* di,
Mark Wielaard 800b32
       directories_count = step_leb128U(&data);
Mark Wielaard 800b32
       /* Read the contents of the Directory table.  */
Mark Wielaard 800b32
       if (di->ddump_line)
Mark Wielaard 800b32
-         VG_(printf)(" dwarf The Directory Table%s\n",
Mark Wielaard 800b32
+         VG_(printf)(" The Directory Table%s\n",
Mark Wielaard 800b32
                      directories_count == 0 ? " is empty." : ":" );
Mark Wielaard 800b32
 
Mark Wielaard 800b32
       for (n = 0; n < directories_count; n++) {
Mark Wielaard 800b32
@@ -796,7 +796,7 @@ void read_dwarf2_lineblock ( struct _DebugInfo* di,
Mark Wielaard 800b32
             if (f == p_ndx)
Mark Wielaard 800b32
                name = get_line_str (di, ui, &data, form,
Mark Wielaard 800b32
                                     debugstr_img, debuglinestr_img);
Mark Wielaard 800b32
-            else if (n == d_ndx)
Mark Wielaard 800b32
+            else if (f == d_ndx)
Mark Wielaard 800b32
                diridx = get_line_ndx (di, &data, form);
Mark Wielaard 800b32
             else
Mark Wielaard 800b32
                data = skip_line_form (di, ui, data, form);
Mark Wielaard 800b32
diff --git a/coregrind/m_debuginfo/readdwarf3.c b/coregrind/m_debuginfo/readdwarf3.c
Mark Wielaard 800b32
index 82bc8f241..60fc40244 100644
Mark Wielaard 800b32
--- a/coregrind/m_debuginfo/readdwarf3.c
Mark Wielaard 800b32
+++ b/coregrind/m_debuginfo/readdwarf3.c
Mark Wielaard 800b32
@@ -2323,7 +2323,7 @@ void read_filename_table( /*MOD*/XArray* /* of UInt* */ fndn_ix_Table,
Mark Wielaard 800b32
             if (f == p_ndx)
Mark Wielaard 800b32
                str = get_line_str (cc->di, cc->is_dw64, &c, form,
Mark Wielaard 800b32
                                    debugstr_img, debuglinestr_img);
Mark Wielaard 800b32
-            else if (n == d_ndx)
Mark Wielaard 800b32
+            else if (f == d_ndx)
Mark Wielaard 800b32
                dir_xa_ix = get_line_ndx (cc->di, &c, form);
Mark Wielaard 800b32
             else
Mark Wielaard 800b32
                skip_line_form (cc->di, cc->is_dw64, &c, form);