Add followup patches to valgrind-3.11.0-wrapmalloc.patch.

This commit is contained in:
Mark Wielaard 2016-01-20 20:00:21 +01:00
parent a4c8036d0a
commit 599b2ca427

View File

@ -972,3 +972,205 @@ diff -ur valgrind-3.11.0.orig/memcheck/tests/Makefile.in valgrind-3.11.0/memchec
xml1-xml1.o: xml1.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xml1_CFLAGS) $(CFLAGS) -MT xml1-xml1.o -MD -MP -MF $(DEPDIR)/xml1-xml1.Tpo -c -o xml1-xml1.o `test -f 'xml1.c' || echo '$(srcdir)/'`xml1.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xml1-xml1.Tpo $(DEPDIR)/xml1-xml1.Po
commit d35c2c3197a0ae8398228d19578e1dfcb8401c5f
Author: iraisr <iraisr@a5019735-40e9-0310-863c-91ae7b9d1cf9>
Date: Wed Nov 18 04:13:12 2015 +0000
Expected stderr of test cases wrapmalloc and wrapmallocstatic are overconstrained.
Fixes BZ#355455.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15727 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/memcheck/tests/wrapmalloc.stderr.exp b/memcheck/tests/wrapmalloc.stderr.exp
index d937776..e69de29 100644
--- a/memcheck/tests/wrapmalloc.stderr.exp
+++ b/memcheck/tests/wrapmalloc.stderr.exp
@@ -1,10 +0,0 @@
-
-
-HEAP SUMMARY:
- in use at exit: 0 bytes in 0 blocks
- total heap usage: 1 allocs, 1 frees, 1,024 bytes allocated
-
-For a detailed leak analysis, rerun with: --leak-check=full
-
-For counts of detected and suppressed errors, rerun with: -v
-ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
diff --git a/memcheck/tests/wrapmalloc.vgtest b/memcheck/tests/wrapmalloc.vgtest
index a6dff4e..c22f241 100644
--- a/memcheck/tests/wrapmalloc.vgtest
+++ b/memcheck/tests/wrapmalloc.vgtest
@@ -1,2 +1,2 @@
prog: wrapmalloc
-
+vgopts: -q
diff --git a/memcheck/tests/wrapmallocstatic.stderr.exp b/memcheck/tests/wrapmallocstatic.stderr.exp
index d937776..e69de29 100644
--- a/memcheck/tests/wrapmallocstatic.stderr.exp
+++ b/memcheck/tests/wrapmallocstatic.stderr.exp
@@ -1,10 +0,0 @@
-
-
-HEAP SUMMARY:
- in use at exit: 0 bytes in 0 blocks
- total heap usage: 1 allocs, 1 frees, 1,024 bytes allocated
-
-For a detailed leak analysis, rerun with: --leak-check=full
-
-For counts of detected and suppressed errors, rerun with: -v
-ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
diff --git a/memcheck/tests/wrapmallocstatic.vgtest b/memcheck/tests/wrapmallocstatic.vgtest
index 7b3c068..f040756 100644
--- a/memcheck/tests/wrapmallocstatic.vgtest
+++ b/memcheck/tests/wrapmallocstatic.vgtest
@@ -1,2 +1,2 @@
prog: wrapmallocstatic
-
+vgopts: -q
commit 194731c49eb7d448503a5e8625dd39779c2c9f8b
Author: iraisr <iraisr@a5019735-40e9-0310-863c-91ae7b9d1cf9>
Date: Wed Nov 18 20:38:37 2015 +0000
When searching for global public symbols (like for the somalloc
synonym symbols), exclude the dynamic (runtime) linker as it is very
special.
Fixes BZ#355454
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15728 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/coregrind/m_redir.c b/coregrind/m_redir.c
index 3d3f70a..dcf1fb4 100644
--- a/coregrind/m_redir.c
+++ b/coregrind/m_redir.c
@@ -809,8 +809,19 @@ void generate_and_add_actives (
anyMark = False;
for (sp = specs; sp; sp = sp->next) {
sp->done = False;
- sp->mark = VG_(string_match)( sp->from_sopatt,
- VG_(DebugInfo_get_soname)(di) );
+ const HChar *soname = VG_(DebugInfo_get_soname)(di);
+
+ /* When searching for global public symbols (like for the somalloc
+ synonym symbols), exclude the dynamic (runtime) linker as it is very
+ special. See https://bugs.kde.org/show_bug.cgi?id=355454 */
+ if ((VG_(strcmp)(sp->from_sopatt, "*") == 0) &&
+ (sp->isGlobal == True) &&
+ VG_(is_soname_ld_so)(soname)) {
+ sp->mark = False;
+ continue;
+ }
+
+ sp->mark = VG_(string_match)( sp->from_sopatt, soname );
anyMark = anyMark || sp->mark;
}
@@ -1179,6 +1190,29 @@ Addr VG_(redir_do_lookup) ( Addr orig, Bool* isWrap )
return r->to_addr;
}
+/* Does the soname represent a dynamic (runtime) linker?
+ Considers various VG_U_LD* entries from pub_tool_redir.h. */
+Bool VG_(is_soname_ld_so) (const HChar *soname)
+{
+# if defined(VGO_linux)
+ if (VG_STREQ(soname, VG_U_LD_LINUX_SO_3)) return True;
+ if (VG_STREQ(soname, VG_U_LD_LINUX_SO_2)) return True;
+ if (VG_STREQ(soname, VG_U_LD_LINUX_X86_64_SO_2)) return True;
+ if (VG_STREQ(soname, VG_U_LD64_SO_1)) return True;
+ 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;
+# elif defined(VGO_solaris)
+ if (VG_STREQ(soname, VG_U_LD_SO_1)) return True;
+# else
+# error "Unsupported OS"
+# endif
+
+ return False;
+}
/*------------------------------------------------------------*/
/*--- INITIALISATION ---*/
diff --git a/docs/xml/manual-core.xml b/docs/xml/manual-core.xml
index c80aab0..758e2f4 100644
--- a/docs/xml/manual-core.xml
+++ b/docs/xml/manual-core.xml
@@ -2322,7 +2322,7 @@ need to use them.</para>
own versions. Such replacements are normally done only in shared
libraries whose soname matches a predefined soname pattern (e.g.
<varname>libc.so*</varname> on linux). By default, no
- replacement is done for a statically linked library or for
+ replacement is done for a statically linked binary or for
alternative libraries, except for the allocation functions
(malloc, free, calloc, memalign, realloc, operator new, operator
delete, etc.) Such allocation functions are intercepted by
@@ -2392,6 +2392,13 @@ need to use them.</para>
</para>
</listitem>
+ <listitem>
+ <para>Shared library of the dynamic (runtime) linker is excluded from
+ searching for global public symbols, such as those for the malloc
+ related functions (identified by <varname>somalloc</varname> synonym).
+ </para>
+ </listitem>
+
</itemizedlist>
</listitem>
</varlistentry>
diff --git a/helgrind/hg_main.c b/helgrind/hg_main.c
index ae6eec0..9aed05a 100644
--- a/helgrind/hg_main.c
+++ b/helgrind/hg_main.c
@@ -4589,7 +4589,6 @@ static Bool is_in_dynamic_linker_shared_object( Addr ga )
{
DebugInfo* dinfo;
const HChar* soname;
- if (0) return False;
dinfo = VG_(find_DebugInfo)( ga );
if (!dinfo) return False;
@@ -4598,23 +4597,7 @@ static Bool is_in_dynamic_linker_shared_object( Addr ga )
tl_assert(soname);
if (0) VG_(printf)("%s\n", soname);
-# if defined(VGO_linux)
- if (VG_STREQ(soname, VG_U_LD_LINUX_SO_3)) return True;
- if (VG_STREQ(soname, VG_U_LD_LINUX_SO_2)) return True;
- if (VG_STREQ(soname, VG_U_LD_LINUX_X86_64_SO_2)) return True;
- if (VG_STREQ(soname, VG_U_LD64_SO_1)) return True;
- 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;
-# elif defined(VGO_solaris)
- if (VG_STREQ(soname, VG_U_LD_SO_1)) return True;
-# else
-# error "Unsupported OS"
-# endif
- return False;
+ return VG_(is_soname_ld_so)(soname);
}
static
diff --git a/include/pub_tool_redir.h b/include/pub_tool_redir.h
index 21d186b..aa879d6 100644
--- a/include/pub_tool_redir.h
+++ b/include/pub_tool_redir.h
@@ -351,6 +351,8 @@
#define SO_SYN_MALLOC VG_SO_SYN(somalloc)
#define SO_SYN_MALLOC_NAME "VgSoSynsomalloc"
+Bool VG_(is_soname_ld_so) (const HChar *soname);
+
#endif // __PUB_TOOL_REDIR_H
/*--------------------------------------------------------------------*/