]> sourceware.org Git - systemtap.git/commitdiff
PR10081: improve error message for verifying build-id
authorWenji Huang <wenji.huang@oracle.com>
Mon, 27 Apr 2009 10:12:36 +0000 (06:12 -0400)
committerWenji Huang <wenji.huang@oracle.com>
Mon, 27 Apr 2009 03:05:17 +0000 (23:05 -0400)
Output debuginfo file name and build-id if verification
failed.

* runtime/sym.c: Print more info if not matched.

runtime/sym.c

index 013edd0ca743075eef921dcbd703fada9cf9464c..63dad1af67811ad052651be3b393c3f6acb8f268 100644 (file)
@@ -271,34 +271,29 @@ static int _stp_module_check(void)
                        dwfl_module_build_id was not intended to return the end address. */
                    notes_addr -= m->build_id_len;
 
-                   if (notes_addr > base_addr) {
-                     for (j = 0; j < m->build_id_len; j++)      
-                        {
-                          unsigned char theory, practice;
-                          theory = m->build_id_bits [j];
-                          practice = ((unsigned char*) notes_addr) [j];
-                          /* XXX: consider using kread() instead of above. */
-                          if (theory != practice)
-                            {
-                              #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)
-                              _stp_error ("%s: inconsistent %s build-id byte #%d "
-                                          "(0x%x [actual] vs. 0x%x [debuginfo])\n",
-                                          THIS_MODULE->name, m->name, j,
-                                          practice, theory);
-                              return 1;
-                              #else
-                              /* This branch is a surrogate for
-                                 kernels affected by Fedora bug
-                                 #465873. */
-                              printk(KERN_WARNING
-                                     "%s: inconsistent %s build-id byte #%d "
-                                     "(0x%x [actual] vs. 0x%x [debuginfo])\n",
-                                     THIS_MODULE->name, m->name, j,
-                                     practice, theory);
-                              break; /* Note just the first mismatch. */
-                              #endif
-                            }
-                       } 
+                   if (notes_addr <= base_addr)  /* shouldn't happen */
+                        continue;
+                   if (memcmp(m->build_id_bits, (unsigned char*) notes_addr, m->build_id_len)) {
+                        const char *basename;
+
+                        basename = strrchr(m->path, '/');
+                        if (basename)
+                            basename++;
+                        else
+                            basename = m->path;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)
+                         _stp_error ("Build-id mismatch: \"%s\" %.*M"
+                                    " vs. \"%s\" %.*M\n",
+                                    m->name, m->build_id_len, notes_addr,
+                                    basename, m->build_id_len, m->build_id_bits);
+                         return 1;
+#else
+                         /* This branch is a surrogate for kernels
+                         * affected by Fedora bug #465873. */
+                         printk(KERN_WARNING
+                                "Build-id mismatch: \"%s\" vs. \"%s\"\n",
+                                m->name, basename);
+#endif
                    }
                } /* end checking */
        } /* end loop */
This page took 0.027917 seconds and 5 git commands to generate.