[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-bugs-dist
Subject:    [valgrind] [Bug 338703] New: helgrind on arm-linux gets false positives in dynamic loader
From:       Mark Wielaard <mjw () redhat ! com>
Date:       2014-08-31 22:13:51
Message-ID: bug-338703-17878 () http ! bugs ! kde ! org/
[Download RAW message or body]

https://bugs.kde.org/show_bug.cgi?id=338703

            Bug ID: 338703
           Summary: helgrind on arm-linux gets false positives in dynamic
                    loader
           Product: valgrind
           Version: unspecified
          Platform: Other
                OS: Linux
            Status: UNCONFIRMED
          Severity: normal
          Priority: NOR
         Component: helgrind
          Assignee: jseward@acm.org
          Reporter: mjw@redhat.com

There are a couple of issues with helgrind on arm-linux with glibc:

- Thread creation stack traces cannot unwind through clone (cfi ends right
after syscall)
- ld.so has a special name that isn't recognized as special
(ld-linux-armhf.so.3)
- Races are found when manipulating GOT sections.

The following patch fixes the above issues for me (fedora 20 glibc-2.18):

Index: helgrind/hg_errors.c
===================================================================
--- helgrind/hg_errors.c    (revision 14398)
+++ helgrind/hg_errors.c    (working copy)
@@ -475,6 +475,8 @@
      if (sect == Vg_SectGOTPLT) return;
      /* SectPLT is required on ppc32/64-linux */
      if (sect == Vg_SectPLT) return;
+     /* SectGOT is required on arm-linux */
+     if (sect == Vg_SectGOT) return;
    }
 #  endif

Index: helgrind/hg_main.c
===================================================================
--- helgrind/hg_main.c    (revision 14398)
+++ helgrind/hg_main.c    (working copy)
@@ -1579,7 +1579,7 @@
       { Word first_ip_delta = 0;
 #       if defined(VGP_amd64_linux) || defined(VGP_x86_linux)
         first_ip_delta = -3;
-#       elif defined(VGP_arm64_linux)
+#       elif defined(VGP_arm64_linux) || defined(VGP_arm_linux)
         first_ip_delta = -1;
 #       endif
         thr_c->created_at = VG_(record_ExeContext)(parent, first_ip_delta);
@@ -4480,6 +4480,7 @@
    if (VG_STREQ(soname, VG_U_LD64_SO_2))            return True;
    if (VG_STREQ(soname, VG_U_LD_SO_1))              return True;
    if (VG_STREQ(soname, VG_U_LD_LINUX_AARCH64_SO_1)) return True;
+   if (VG_STREQ(soname, VG_U_LD_LINUX_ARMHF_SO_3))  return True;
 #  elif defined(VGO_darwin)
    if (VG_STREQ(soname, VG_U_DYLD)) return True;
 #  else
Index: include/pub_tool_redir.h
===================================================================
--- include/pub_tool_redir.h    (revision 14398)
+++ include/pub_tool_redir.h    (working copy)
@@ -302,6 +302,7 @@
 #define  VG_U_LD_SO_1               "ld.so.1"

 #define  VG_U_LD_LINUX_AARCH64_SO_1 "ld-linux-aarch64.so.1"
+#define  VG_U_LD_LINUX_ARMHF_SO_3   "ld-linux-armhf.so.3"

 #endif



Reproducible: Always

-- 
You are receiving this mail because:
You are watching all bug changes.
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic