]> sourceware.org Git - valgrind.git/commitdiff
Revert "Bug 390871 - ELF debug info reader confused with multiple .rodata* sections"
authorPaul Floyd <pjfloyd@wanadoo.fr>
Sun, 8 Oct 2023 07:43:15 +0000 (09:43 +0200)
committerPaul Floyd <pjfloyd@wanadoo.fr>
Sun, 8 Oct 2023 07:43:15 +0000 (09:43 +0200)
This reverts commit 5472a7a54000692f9f58e9b551d36b8c68c44873.

NEWS
coregrind/m_debuginfo/readelf.c

diff --git a/NEWS b/NEWS
index ad302827044a9c779ceba88c899f6a0fce890812..9a05f5486d3c84e7e00ae33358d02c47f73f209e 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -55,7 +55,6 @@ bugzilla (https://bugs.kde.org/enter_bug.cgi?product=valgrind) rather
 than mailing the developers (or mailing lists) directly -- bugs that
 are not entered into bugzilla tend to get forgotten about or ignored.
 
-390871  ELF debug info reader confused with multiple .rodata* sections
 426751  Valgrind reports "still reachable" memory using musl (alpine running inside docker)
 432801  Valgrind 3.16.1 reports a jump based on uninitialized memory somehow related to clang and signals
 433857  Add validation to C++17 aligned new/delete alignment size
index fb64ed9769d28e7f64762c8a34ebab8e353bc21f..9bb60f42ad558a9cad12cafde30958bb8fe59d4c 100644 (file)
@@ -2334,7 +2334,7 @@ Bool ML_(read_elf_object) ( struct _DebugInfo* di )
          leave the relevant pointer at NULL. */
       RangeAndBias* inrx = NULL;
       RangeAndBias* inrw1 = NULL;
-      /* Depending on the link editor there may be two RW PT_LOAD headers
+      /* Depending on the link editro there may be two RW PT_LOAD headers
        * If so this will point to the seond one */
       RangeAndBias* inrw2 = NULL;
       /* used to switch between inrw1 and inrw2 */
@@ -2478,42 +2478,35 @@ Bool ML_(read_elf_object) ( struct _DebugInfo* di )
       }
 
       /* Accept .rodata where mapped as rx or rw (data), even if zero-sized */
-      /* Also accept .rodata.<subr_name>, and aggregate adjacent after alignment. */
-      if (0 == VG_(strncmp)(name, ".rodata", 7)) {
-         if ((inrx||inrw1) && !di->rodata_present) { /* first .rodata* */
+      if (0 == VG_(strcmp)(name, ".rodata")) {
+         if (!di->rodata_present) {
             di->rodata_svma = svma;
             di->rodata_avma = svma;
             di->rodata_size = size;
             di->rodata_debug_svma = svma;
-         } else if ((inrx||inrw1) && di->rodata_present) { /* not first .rodata* */
-            Addr tmp = VG_ROUNDUP(di->rodata_size + di->rodata_svma, alyn);
-            if (svma == tmp) { /* adjacent to previous .rodata* */
-               di->rodata_size = size + tmp - di->rodata_svma;
+            if (inrx) {
+               di->rodata_avma += inrx->bias;
+               di->rodata_bias = inrx->bias;
+               di->rodata_debug_bias = inrx->bias;
+            } else if (inrw1) {
+               di->rodata_avma += inrw1->bias;
+               di->rodata_bias = inrw1->bias;
+               di->rodata_debug_bias = inrw1->bias;
             } else {
-               BAD(".rodata"); /* is OK, but we cannot handle multiple .rodata* */
+               BAD(".rodata");
             }
+            di->rodata_present = True;
+            TRACE_SYMTAB("acquiring .rodata svma = %#lx .. %#lx\n",
+                         di->rodata_svma,
+                         di->rodata_svma + di->rodata_size - 1);
+            TRACE_SYMTAB("acquiring .rodata avma = %#lx .. %#lx\n",
+                         di->rodata_avma,
+                         di->rodata_avma + di->rodata_size - 1);
+            TRACE_SYMTAB("acquiring .rodata bias = %#lx\n",
+                         (UWord)di->rodata_bias);
+         } else {
+            BAD(".rodata");
          }
-         if (inrx) {
-            di->rodata_avma += inrx->bias;
-            di->rodata_bias = inrx->bias;
-            di->rodata_debug_bias = inrx->bias;
-         } else if (inrw1) {
-            di->rodata_avma += inrw1->bias;
-            di->rodata_bias = inrw1->bias;
-            di->rodata_debug_bias = inrw1->bias;
-         }
-         else {
-            BAD(".rodata");  /* should not happen? */
-         }
-         di->rodata_present = True;
-         TRACE_SYMTAB("acquiring .rodata svma = %#lx .. %#lx\n",
-                      di->rodata_svma,
-                      di->rodata_svma + di->rodata_size - 1);
-         TRACE_SYMTAB("acquiring .rodata avma = %#lx .. %#lx\n",
-                      di->rodata_avma,
-                      di->rodata_avma + di->rodata_size - 1);
-         TRACE_SYMTAB("acquiring .rodata bias = %#lx\n",
-                      (UWord)di->rodata_bias);
       }
 
       if (0 == VG_(strcmp)(name, ".dynbss")) {
This page took 0.040031 seconds and 5 git commands to generate.