This commit is contained in:
commit
cb6fa16909
23
.gitattributes
vendored
Normal file
23
.gitattributes
vendored
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
## Default LFS
|
||||||
|
*.7z filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.bsp filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.bz2 filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.gem filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.gz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.jar filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.lz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.lzma filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.obscpio filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.oxt filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.pdf filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.png filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.rpm filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.tbz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.tbz2 filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.tgz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.ttf filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.txz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.whl filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.xz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.zip filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.zst filter=lfs diff=lfs merge=lfs -text
|
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
.osc
|
274
3_2_BRANCH.diff
Normal file
274
3_2_BRANCH.diff
Normal file
@ -0,0 +1,274 @@
|
|||||||
|
Index: glibc-2.5.supp
|
||||||
|
===================================================================
|
||||||
|
--- glibc-2.5.supp (.../tags/VALGRIND_3_2_1) (revision 0)
|
||||||
|
+++ glibc-2.5.supp (.../branches/VALGRIND_3_2_BRANCH) (revision 6240)
|
||||||
|
@@ -0,0 +1,200 @@
|
||||||
|
+
|
||||||
|
+##----------------------------------------------------------------------##
|
||||||
|
+
|
||||||
|
+# Errors to suppress by default with glibc 2.4.x
|
||||||
|
+
|
||||||
|
+# Format of this file is:
|
||||||
|
+# {
|
||||||
|
+# name_of_suppression
|
||||||
|
+# tool_name:supp_kind
|
||||||
|
+# (optional extra info for some suppression types)
|
||||||
|
+# caller0 name, or /name/of/so/file.so
|
||||||
|
+# caller1 name, or ditto
|
||||||
|
+# (optionally: caller2 name)
|
||||||
|
+# (optionally: caller3 name)
|
||||||
|
+# }
|
||||||
|
+#
|
||||||
|
+# For Memcheck, the supp_kinds are:
|
||||||
|
+#
|
||||||
|
+# Param Value1 Value2 Value4 Value8 Value16
|
||||||
|
+# Free Addr1 Addr2 Addr4 Addr8 Addr16
|
||||||
|
+# Cond (previously known as Value0)
|
||||||
|
+#
|
||||||
|
+# and the optional extra info is:
|
||||||
|
+# if Param: name of system call param
|
||||||
|
+# if Free: name of free-ing fn)
|
||||||
|
+
|
||||||
|
+{
|
||||||
|
+ dl-hack1
|
||||||
|
+ Memcheck:Cond
|
||||||
|
+ fun:_dl_start
|
||||||
|
+ fun:_start
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+{
|
||||||
|
+ dl-hack2
|
||||||
|
+ Memcheck:Cond
|
||||||
|
+ obj:/lib*/ld-2.5*.so
|
||||||
|
+ obj:/lib*/ld-2.5*.so
|
||||||
|
+ obj:/lib*/ld-2.5*.so
|
||||||
|
+ obj:/lib*/ld-2.5*.so
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+{
|
||||||
|
+ dl-hack3
|
||||||
|
+ Memcheck:Cond
|
||||||
|
+ obj:/lib*/ld-2.5*so*
|
||||||
|
+ obj:/lib*/ld-2.5*so*
|
||||||
|
+ obj:/lib*/ld-2.5*so*
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+##----------------------------------------------------------------------##
|
||||||
|
+{
|
||||||
|
+ glibc-2.5.x-on-SUSE-10.2-(PPC)-1
|
||||||
|
+ Memcheck:Cond
|
||||||
|
+ fun:_dl_start_final
|
||||||
|
+ fun:_dl_start
|
||||||
|
+ fun:_start
|
||||||
|
+}
|
||||||
|
+{
|
||||||
|
+ glibc-2.5.x-on-SUSE-10.2-(PPC)-2a
|
||||||
|
+ Memcheck:Cond
|
||||||
|
+ fun:index
|
||||||
|
+ obj:*ld-2.5.*.so
|
||||||
|
+}
|
||||||
|
+{
|
||||||
|
+ glibc-2.5.x-on-SuSE-10.2-(PPC)-2b
|
||||||
|
+ Memcheck:Addr4
|
||||||
|
+ fun:index
|
||||||
|
+ fun:expand_dynamic_string_token
|
||||||
|
+}
|
||||||
|
+{
|
||||||
|
+ glibc-2.5.5-on-SuSE-10.2-(PPC)-2c
|
||||||
|
+ Memcheck:Addr4
|
||||||
|
+ fun:index
|
||||||
|
+ obj:*ld-2.5.*.so
|
||||||
|
+}
|
||||||
|
+{
|
||||||
|
+ glibc-2.3.5-on-SuSE-10.1-(PPC)-3
|
||||||
|
+ Memcheck:Addr4
|
||||||
|
+ fun:*wordcopy_fwd_dest_aligned*
|
||||||
|
+ fun:mem*cpy
|
||||||
|
+ obj:*lib*2.5.*.so
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+##----------------------------------------------------------------------##
|
||||||
|
+## Various structure padding things on SUSE 10.2
|
||||||
|
+##
|
||||||
|
+{
|
||||||
|
+ X11-64bit-padding-1a
|
||||||
|
+ Memcheck:Param
|
||||||
|
+ write(buf)
|
||||||
|
+ fun:__write_nocancel
|
||||||
|
+ obj:/usr/lib*/libX11.so*
|
||||||
|
+ obj:/usr/lib*/libX11.so*
|
||||||
|
+ fun:X*
|
||||||
|
+}
|
||||||
|
+{
|
||||||
|
+ X11-64bit-padding-1b
|
||||||
|
+ Memcheck:Param
|
||||||
|
+ write(buf)
|
||||||
|
+ fun:__write_nocancel
|
||||||
|
+ obj:/usr/lib*/libX11.so*
|
||||||
|
+ obj:/usr/lib*/libX11.so*
|
||||||
|
+ fun:_X*
|
||||||
|
+}
|
||||||
|
+{
|
||||||
|
+ X11-64bit-padding-1c
|
||||||
|
+ Memcheck:Param
|
||||||
|
+ write(buf)
|
||||||
|
+ fun:__write_nocancel
|
||||||
|
+ obj:/usr/lib*/libX11.so*
|
||||||
|
+ obj:/usr/lib*/libX11.so*
|
||||||
|
+ obj:/usr/lib*/libX11.so*
|
||||||
|
+}
|
||||||
|
+{
|
||||||
|
+ X11-64bit-padding-1d
|
||||||
|
+ Memcheck:Param
|
||||||
|
+ write(buf)
|
||||||
|
+ fun:__write_nocancel
|
||||||
|
+ obj:/usr/lib*/libICE.so*
|
||||||
|
+ obj:/usr/lib*/libICE.so*
|
||||||
|
+ obj:/usr/lib*/libICE.so*
|
||||||
|
+}
|
||||||
|
+{
|
||||||
|
+ X11-64bit-padding-2a
|
||||||
|
+ Memcheck:Param
|
||||||
|
+ writev(vector[...])
|
||||||
|
+ fun:do_writev
|
||||||
|
+ obj:/usr/lib*/libX11.so*
|
||||||
|
+ obj:/usr/lib*/libX11.so*
|
||||||
|
+ obj:/usr/lib*/libX11.so*
|
||||||
|
+}
|
||||||
|
+{
|
||||||
|
+ X11-64bit-padding-2b
|
||||||
|
+ Memcheck:Param
|
||||||
|
+ writev(vector[...])
|
||||||
|
+ fun:do_writev
|
||||||
|
+ fun:writev
|
||||||
|
+ obj:/usr/lib*/libX11.so*
|
||||||
|
+ obj:/usr/lib*/libX11.so*
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+{
|
||||||
|
+ glibc24-64bit-padding-1a
|
||||||
|
+ Memcheck:Param
|
||||||
|
+ socketcall.sendto(msg)
|
||||||
|
+ fun:send
|
||||||
|
+ fun:get_mapping
|
||||||
|
+ fun:__nscd_get_map_ref
|
||||||
|
+ fun:nscd*
|
||||||
|
+}
|
||||||
|
+{
|
||||||
|
+ glibc24-64bit-padding-1b
|
||||||
|
+ Memcheck:Param
|
||||||
|
+ socketcall.sendto(msg)
|
||||||
|
+ fun:__sendto_nocancel
|
||||||
|
+ obj:/*libc-2.5.so
|
||||||
|
+ obj:/*libc-2.5.so
|
||||||
|
+ obj:/*libc-2.5.so
|
||||||
|
+}
|
||||||
|
+{
|
||||||
|
+ glibc24-64bit-padding-1c
|
||||||
|
+ Memcheck:Param
|
||||||
|
+ socketcall.send(msg)
|
||||||
|
+ fun:send
|
||||||
|
+ fun:__nscd_get_map_ref
|
||||||
|
+ fun:nscd_get*_r
|
||||||
|
+ fun:*nscd*
|
||||||
|
+ obj:/*libc-2.5.so
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+{
|
||||||
|
+ X11-64bit-padding-3a
|
||||||
|
+ Memcheck:Param
|
||||||
|
+ write(buf)
|
||||||
|
+ obj:/*libpthread-2.4.so*
|
||||||
|
+ obj:/usr/lib*/libX11.so*
|
||||||
|
+ obj:/usr/lib*/libX11.so*
|
||||||
|
+ obj:/usr/lib*/libX11.so*
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+{
|
||||||
|
+ X11-64bit-padding-4a
|
||||||
|
+ Memcheck:Param
|
||||||
|
+ socketcall.sendto(msg)
|
||||||
|
+ fun:send
|
||||||
|
+ obj:/*libc-2.5.so
|
||||||
|
+ obj:/*libc-2.5.so
|
||||||
|
+ obj:/*libc-2.5.so
|
||||||
|
+}
|
||||||
|
+{
|
||||||
|
+ X11-64bit-padding-4b
|
||||||
|
+ Memcheck:Param
|
||||||
|
+ socketcall.send(msg)
|
||||||
|
+ fun:send
|
||||||
|
+ obj:/*libc-2.5.so
|
||||||
|
+ obj:/*libc-2.5.so
|
||||||
|
+ obj:/*libc-2.5.so
|
||||||
|
+}
|
||||||
|
Index: configure.in
|
||||||
|
===================================================================
|
||||||
|
--- configure.in (.../tags/VALGRIND_3_2_1) (revision 6240)
|
||||||
|
+++ configure.in (.../branches/VALGRIND_3_2_BRANCH) (revision 6240)
|
||||||
|
@@ -8,7 +8,7 @@
|
||||||
|
##------------------------------------------------------------##
|
||||||
|
|
||||||
|
# Process this file with autoconf to produce a configure script.
|
||||||
|
-AC_INIT(Valgrind, 3.2.1, valgrind-users@lists.sourceforge.net)
|
||||||
|
+AC_INIT(Valgrind, 3.2.2.SVN, valgrind-users@lists.sourceforge.net)
|
||||||
|
AC_CONFIG_SRCDIR(coregrind/m_main.c)
|
||||||
|
AM_CONFIG_HEADER(config.h)
|
||||||
|
AM_INIT_AUTOMAKE
|
||||||
|
@@ -349,6 +349,16 @@ AC_EGREP_CPP([GLIBC_24], [
|
||||||
|
],
|
||||||
|
glibc="2.4")
|
||||||
|
|
||||||
|
+AC_EGREP_CPP([GLIBC_25], [
|
||||||
|
+#include <features.h>
|
||||||
|
+#ifdef __GNU_LIBRARY__
|
||||||
|
+ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ == 5)
|
||||||
|
+ GLIBC_25
|
||||||
|
+ #endif
|
||||||
|
+#endif
|
||||||
|
+],
|
||||||
|
+glibc="2.5")
|
||||||
|
+
|
||||||
|
AC_MSG_CHECKING([the glibc version])
|
||||||
|
|
||||||
|
case "${glibc}" in
|
||||||
|
@@ -370,9 +380,15 @@ case "${glibc}" in
|
||||||
|
DEFAULT_SUPP="glibc-2.4.supp ${DEFAULT_SUPP}"
|
||||||
|
;;
|
||||||
|
|
||||||
|
+ 2.5)
|
||||||
|
+ AC_MSG_RESULT(2.5 family)
|
||||||
|
+ AC_DEFINE([GLIBC_2_5], 1, [Define to 1 if you're using glibc 2.5.x])
|
||||||
|
+ DEFAULT_SUPP="glibc-2.5.supp ${DEFAULT_SUPP}"
|
||||||
|
+ ;;
|
||||||
|
+
|
||||||
|
*)
|
||||||
|
AC_MSG_RESULT(unsupported version)
|
||||||
|
- AC_MSG_ERROR([Valgrind requires glibc version 2.2, 2.3 or 2.4])
|
||||||
|
+ AC_MSG_ERROR([Valgrind requires glibc version 2.2 - 2.5])
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
Index: Makefile.am
|
||||||
|
===================================================================
|
||||||
|
--- Makefile.am (.../tags/VALGRIND_3_2_1) (revision 6240)
|
||||||
|
+++ Makefile.am (.../branches/VALGRIND_3_2_BRANCH) (revision 6240)
|
||||||
|
@@ -17,7 +17,7 @@ SUBDIRS = include coregrind . tests perf
|
||||||
|
DIST_SUBDIRS = $(SUBDIRS)
|
||||||
|
|
||||||
|
SUPP_FILES = \
|
||||||
|
- glibc-2.2.supp glibc-2.3.supp glibc-2.4.supp \
|
||||||
|
+ glibc-2.2.supp glibc-2.3.supp glibc-2.4.supp glibc-2.5.supp \
|
||||||
|
xfree-3.supp xfree-4.supp
|
||||||
|
|
||||||
|
dist_val_DATA = $(SUPP_FILES) default.supp
|
||||||
|
|
||||||
|
Property changes on: .
|
||||||
|
___________________________________________________________________
|
||||||
|
Name: svn:externals
|
||||||
|
- VEX svn://svn.valgrind.org/vex/tags/VEX_3_2_1
|
||||||
|
|
||||||
|
+ VEX svn://svn.valgrind.org/vex/branches/VEX_3_2_BRANCH
|
||||||
|
|
||||||
|
|
20
drd-fixes.diff
Normal file
20
drd-fixes.diff
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
--- drd/drd_main.c
|
||||||
|
+++ drd/drd_main.c
|
||||||
|
@@ -110,7 +110,7 @@
|
||||||
|
addr, size, VG_(get_running_tid)());
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
- sg = thread_get_segment(VG_(running_tid));
|
||||||
|
+ sg = thread_get_segment(VG_(get_running_tid)());
|
||||||
|
bm_access_range(sg->bm, addr, size, eLoad);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -124,7 +124,7 @@
|
||||||
|
addr, size, VG_(get_running_tid)());
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
- sg = thread_get_segment(VG_(running_tid));
|
||||||
|
+ sg = thread_get_segment(VG_(get_running_tid)());
|
||||||
|
bm_access_range(sg->bm, addr, size, eStore);
|
||||||
|
}
|
||||||
|
|
4515
omega_RC_01.patch
Normal file
4515
omega_RC_01.patch
Normal file
File diff suppressed because it is too large
Load Diff
3
valgrind-3.2.1.tar.bz2
Normal file
3
valgrind-3.2.1.tar.bz2
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:7f9a15d7be16ca03a0912191e8d55a486bf69690e11bb76ccece3eaff3730a33
|
||||||
|
size 4052885
|
3
valgrind-6012-drd-2006-08-26.tar.bz2
Normal file
3
valgrind-6012-drd-2006-08-26.tar.bz2
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:c0bded47390734e31b082ddb570349db46ea205e9a89bca6cccfe437319a6084
|
||||||
|
size 19454
|
867
valgrind-6012.patch
Normal file
867
valgrind-6012.patch
Normal file
@ -0,0 +1,867 @@
|
|||||||
|
Index: helgrind/hg_main.c
|
||||||
|
===================================================================
|
||||||
|
--- helgrind/hg_main.c (revision 6012)
|
||||||
|
+++ helgrind/hg_main.c (working copy)
|
||||||
|
@@ -2857,17 +2857,17 @@
|
||||||
|
/* Do nothing */
|
||||||
|
}
|
||||||
|
|
||||||
|
-static void hg_pre_mutex_lock(ThreadId tid, void* void_mutex)
|
||||||
|
+static void hg_pre_mutex_lock(ThreadId tid, Addr client_mutex)
|
||||||
|
{
|
||||||
|
- Mutex *mutex = get_mutex((Addr)void_mutex);
|
||||||
|
+ Mutex *mutex = get_mutex(client_mutex);
|
||||||
|
|
||||||
|
test_mutex_state(mutex, MxLocked, tid);
|
||||||
|
}
|
||||||
|
|
||||||
|
-static void hg_post_mutex_lock(ThreadId tid, void* void_mutex)
|
||||||
|
+static void hg_post_mutex_lock(ThreadId tid, Addr client_mutex)
|
||||||
|
{
|
||||||
|
static const Bool debug = False;
|
||||||
|
- Mutex *mutex = get_mutex((Addr)void_mutex);
|
||||||
|
+ Mutex *mutex = get_mutex(client_mutex);
|
||||||
|
const LockSet* ls;
|
||||||
|
|
||||||
|
set_mutex_state(mutex, MxLocked, tid);
|
||||||
|
@@ -2898,11 +2898,11 @@
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
-static void hg_post_mutex_unlock(ThreadId tid, void* void_mutex)
|
||||||
|
+static void hg_post_mutex_unlock(ThreadId tid, Addr client_mutex)
|
||||||
|
{
|
||||||
|
static const Bool debug = False;
|
||||||
|
Int i = 0;
|
||||||
|
- Mutex *mutex = get_mutex((Addr)void_mutex);
|
||||||
|
+ Mutex *mutex = get_mutex(client_mutex);
|
||||||
|
const LockSet *ls;
|
||||||
|
|
||||||
|
test_mutex_state(mutex, MxUnlocked, tid);
|
||||||
|
@@ -3259,14 +3259,14 @@
|
||||||
|
static void bus_lock(void)
|
||||||
|
{
|
||||||
|
ThreadId tid = VG_(get_running_tid)();
|
||||||
|
- hg_pre_mutex_lock(tid, &__BUS_HARDWARE_LOCK__);
|
||||||
|
- hg_post_mutex_lock(tid, &__BUS_HARDWARE_LOCK__);
|
||||||
|
+ hg_pre_mutex_lock(tid, (Addr)&__BUS_HARDWARE_LOCK__);
|
||||||
|
+ hg_post_mutex_lock(tid, (Addr)&__BUS_HARDWARE_LOCK__);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void bus_unlock(void)
|
||||||
|
{
|
||||||
|
ThreadId tid = VG_(get_running_tid)();
|
||||||
|
- hg_post_mutex_unlock(tid, &__BUS_HARDWARE_LOCK__);
|
||||||
|
+ hg_post_mutex_unlock(tid, (Addr)&__BUS_HARDWARE_LOCK__);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------*/
|
||||||
|
Index: include/pub_tool_tooliface.h
|
||||||
|
===================================================================
|
||||||
|
--- include/pub_tool_tooliface.h (revision 6012)
|
||||||
|
+++ include/pub_tool_tooliface.h (working copy)
|
||||||
|
@@ -411,20 +411,32 @@
|
||||||
|
void VG_(track_post_thread_join) (void(*f)(ThreadId joiner, ThreadId joinee));
|
||||||
|
|
||||||
|
/* Mutex events (not exhaustive)
|
||||||
|
- "void *mutex" is really a pthread_mutex *
|
||||||
|
+ "Addr mutex" is really a pthread_mutex_t *
|
||||||
|
+*/
|
||||||
|
|
||||||
|
- Called before a thread can block while waiting for a mutex (called
|
||||||
|
+void VG_(track_post_mutex_init)(void(*f)(ThreadId tid, Addr mutex, SizeT size));
|
||||||
|
+void VG_(track_pre_mutex_destroy)(void(*f)(ThreadId tid, Addr mutex, SizeT size));
|
||||||
|
+
|
||||||
|
+/* Called before a thread can block while waiting for a mutex (called
|
||||||
|
regardless of whether the thread will block or not). */
|
||||||
|
-void VG_(track_pre_mutex_lock)(void(*f)(ThreadId tid, void* mutex));
|
||||||
|
+void VG_(track_pre_mutex_lock)(void(*f)(ThreadId tid, Addr mutex));
|
||||||
|
|
||||||
|
/* Called once the thread actually holds the mutex (always paired with
|
||||||
|
pre_mutex_lock). */
|
||||||
|
-void VG_(track_post_mutex_lock)(void(*f)(ThreadId tid, void* mutex));
|
||||||
|
+void VG_(track_post_mutex_lock)(void(*f)(ThreadId tid, Addr mutex));
|
||||||
|
|
||||||
|
-/* Called after a thread has released a mutex (no need for a corresponding
|
||||||
|
- pre_mutex_unlock, because unlocking can't block). */
|
||||||
|
-void VG_(track_post_mutex_unlock)(void(*f)(ThreadId tid, void* mutex));
|
||||||
|
+/* Called before a thread releases a mutex. */
|
||||||
|
+void VG_(track_pre_mutex_unlock)(void(*f)(ThreadId tid, Addr mutex));
|
||||||
|
|
||||||
|
+/* Called after a thread has released a mutex. */
|
||||||
|
+void VG_(track_post_mutex_unlock)(void(*f)(ThreadId tid, Addr mutex));
|
||||||
|
+
|
||||||
|
+void VG_(track_post_cond_init)(void(*f)(ThreadId tid, Addr cond, SizeT size));
|
||||||
|
+void VG_(track_pre_cond_destroy)(void(*f)(ThreadId tid, Addr cond, SizeT size));
|
||||||
|
+void VG_(track_pre_cond_wait)(void(*f)(ThreadId tid, Addr cond, Addr mutex));
|
||||||
|
+void VG_(track_post_cond_wait)(void(*f)(ThreadId tid, Addr cond, Addr mutex));
|
||||||
|
+
|
||||||
|
+
|
||||||
|
/* Signal events (not exhaustive)
|
||||||
|
|
||||||
|
... pre_send_signal, post_send_signal ...
|
||||||
|
@@ -437,6 +449,7 @@
|
||||||
|
handler longjmps, this won't be called. */
|
||||||
|
void VG_(track_post_deliver_signal)(void(*f)(ThreadId tid, Int sigNo));
|
||||||
|
|
||||||
|
+
|
||||||
|
/* Others... condition variables...
|
||||||
|
...
|
||||||
|
*/
|
||||||
|
Index: include/pub_tool_threadstate.h
|
||||||
|
===================================================================
|
||||||
|
--- include/pub_tool_threadstate.h (revision 6012)
|
||||||
|
+++ include/pub_tool_threadstate.h (working copy)
|
||||||
|
@@ -46,6 +46,10 @@
|
||||||
|
/* Get the TID of the thread which currently has the CPU. */
|
||||||
|
extern ThreadId VG_(get_running_tid) ( void );
|
||||||
|
|
||||||
|
+Int VG_(get_tid_lwp)(ThreadId const tid);
|
||||||
|
+ThreadId VG_(get_thread_id)(PosixThreadId const posixthreadid);
|
||||||
|
+PosixThreadId VG_(get_pthread_id)(ThreadId const tid);
|
||||||
|
+
|
||||||
|
#endif // __PUB_TOOL_THREADSTATE_H
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------*/
|
||||||
|
Index: include/pub_tool_libcprint.h
|
||||||
|
===================================================================
|
||||||
|
--- include/pub_tool_libcprint.h (revision 6012)
|
||||||
|
+++ include/pub_tool_libcprint.h (working copy)
|
||||||
|
@@ -39,15 +39,27 @@
|
||||||
|
* --log-fd/--log-file/--log-socket argument, which defaults to 2 (stderr).
|
||||||
|
* Hence no need for VG_(fprintf)().
|
||||||
|
*/
|
||||||
|
-extern UInt VG_(printf) ( const HChar *format, ... );
|
||||||
|
+extern UInt VG_(printf) ( const HChar *format, ... )
|
||||||
|
+#if defined(__GNUC__) && defined(CHECK_FORMAT_STRINGS)
|
||||||
|
+ __attribute__((format(printf, 1, 2)))
|
||||||
|
+#endif
|
||||||
|
+ ;
|
||||||
|
extern UInt VG_(vprintf) ( const HChar *format, va_list vargs );
|
||||||
|
/* too noisy ... __attribute__ ((format (printf, 1, 2))) ; */
|
||||||
|
|
||||||
|
-extern UInt VG_(sprintf) ( Char* buf, const HChar* format, ... );
|
||||||
|
+extern UInt VG_(sprintf) ( Char* buf, const HChar* format, ... )
|
||||||
|
+#if defined(__GNUC__) && defined(CHECK_FORMAT_STRINGS)
|
||||||
|
+ __attribute__((format(printf, 2, 3)))
|
||||||
|
+#endif
|
||||||
|
+ ;
|
||||||
|
extern UInt VG_(vsprintf) ( Char* buf, const HChar* format, va_list vargs );
|
||||||
|
|
||||||
|
extern UInt VG_(snprintf) ( Char* buf, Int size,
|
||||||
|
- const HChar *format, ... );
|
||||||
|
+ const HChar *format, ... )
|
||||||
|
+#if defined(__GNUC__) && defined(CHECK_FORMAT_STRINGS)
|
||||||
|
+ __attribute__((format(printf, 3, 4)))
|
||||||
|
+#endif
|
||||||
|
+ ;
|
||||||
|
extern UInt VG_(vsnprintf)( Char* buf, Int size,
|
||||||
|
const HChar *format, va_list vargs );
|
||||||
|
|
||||||
|
@@ -74,7 +86,11 @@
|
||||||
|
VgMsgKind;
|
||||||
|
|
||||||
|
/* Send a single-part message. Appends a newline. */
|
||||||
|
-extern UInt VG_(message) ( VgMsgKind kind, const HChar* format, ... );
|
||||||
|
+extern UInt VG_(message) ( VgMsgKind kind, const HChar* format, ... )
|
||||||
|
+#if defined(__GNUC__) && defined(CHECK_FORMAT_STRINGS)
|
||||||
|
+ __attribute__((format(printf, 2, 3)))
|
||||||
|
+#endif
|
||||||
|
+ ;
|
||||||
|
extern UInt VG_(vmessage) ( VgMsgKind kind, const HChar* format, va_list vargs );
|
||||||
|
|
||||||
|
#endif // __PUB_TOOL_LIBCPRINT_H
|
||||||
|
Index: include/pub_tool_debuginfo.h
|
||||||
|
===================================================================
|
||||||
|
--- include/pub_tool_debuginfo.h (revision 6012)
|
||||||
|
+++ include/pub_tool_debuginfo.h (working copy)
|
||||||
|
@@ -135,6 +135,9 @@
|
||||||
|
|
||||||
|
extern VgSectKind VG_(seginfo_sect_kind)(Addr);
|
||||||
|
|
||||||
|
+extern Char* VG_(seginfo_sect_kind_name)(Addr a, Char* buf, UInt n_buf);
|
||||||
|
+
|
||||||
|
+
|
||||||
|
#endif // __PUB_TOOL_DEBUGINFO_H
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------*/
|
||||||
|
Index: include/valgrind.h
|
||||||
|
===================================================================
|
||||||
|
--- include/valgrind.h (revision 6012)
|
||||||
|
+++ include/valgrind.h (working copy)
|
||||||
|
@@ -2298,6 +2298,48 @@
|
||||||
|
VG_USERREQ__STACK_REGISTER = 0x1501,
|
||||||
|
VG_USERREQ__STACK_DEREGISTER = 0x1502,
|
||||||
|
VG_USERREQ__STACK_CHANGE = 0x1503,
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+ /* To tell the core the POSIX thread ID */
|
||||||
|
+ VG_USERREQ__SET_PTHREAD_SELF = 0x3000,
|
||||||
|
+ /* args: pthread_t (thread ID of running thread) */
|
||||||
|
+
|
||||||
|
+ /* To notify the core of pthread_thread_join calls */
|
||||||
|
+ VG_USERREQ__POST_PTHREAD_JOIN = 0x3010,
|
||||||
|
+ /* args: pthread_t (joinee) */
|
||||||
|
+
|
||||||
|
+ /* To notify the core of a pthread_mutex_init call */
|
||||||
|
+ VG_USERREQ__POST_MUTEX_INIT = 0x3020,
|
||||||
|
+ /* args: Addr, SizeT */
|
||||||
|
+ /* To notify the core of a pthread_mutex_destroy call */
|
||||||
|
+ VG_USERREQ__PRE_MUTEX_DESTROY = 0x3021,
|
||||||
|
+ /* args: Addr, SizeT */
|
||||||
|
+ /* To notify the core of pthread_mutex_lock calls */
|
||||||
|
+ VG_USERREQ__PRE_PTHREAD_MUTEX_LOCK = 0x3022,
|
||||||
|
+ /* args: pthread_mutex_t* */
|
||||||
|
+ VG_USERREQ__POST_PTHREAD_MUTEX_LOCK = 0x3023,
|
||||||
|
+ /* args: pthread_mutex_t* */
|
||||||
|
+ /* To notify the core of pthread_mutex_unlock calls */
|
||||||
|
+ VG_USERREQ__PRE_PTHREAD_MUTEX_UNLOCK = 0x3024,
|
||||||
|
+ /* args: pthread_mutex_t* */
|
||||||
|
+ /* To notify the core of pthread_mutex_unlock calls */
|
||||||
|
+ VG_USERREQ__POST_PTHREAD_MUTEX_UNLOCK = 0x3025,
|
||||||
|
+ /* args: pthread_mutex_t* */
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+ /* To notify the core of a pthread_cond_init call */
|
||||||
|
+ VG_USERREQ__POST_PTHREAD_COND_INIT = 0x3028,
|
||||||
|
+ /* args: Addr, SizeT */
|
||||||
|
+ /* To notify the core of a pthread_cond_destroy call */
|
||||||
|
+ VG_USERREQ__PRE_PTHREAD_COND_DESTROY = 0x3029,
|
||||||
|
+ /* args: Addr, SizeT */
|
||||||
|
+ /* To notify the core of a pthread_cond_wait call */
|
||||||
|
+ VG_USERREQ__PRE_PTHREAD_COND_WAIT = 0x302a,
|
||||||
|
+ /* args: Addr cond, Addr mutex */
|
||||||
|
+ /* To notify the core of a pthread_cond_wait call */
|
||||||
|
+ VG_USERREQ__POST_PTHREAD_COND_WAIT = 0x302b,
|
||||||
|
+ /* args: Addr cond, Addr mutex */
|
||||||
|
+
|
||||||
|
} Vg_ClientRequest;
|
||||||
|
|
||||||
|
#if !defined(__GNUC__)
|
||||||
|
Index: include/pub_tool_basics.h
|
||||||
|
===================================================================
|
||||||
|
--- include/pub_tool_basics.h (revision 6012)
|
||||||
|
+++ include/pub_tool_basics.h (working copy)
|
||||||
|
@@ -97,6 +97,16 @@
|
||||||
|
/* ThreadIds are simply indices into the VG_(threads)[] array. */
|
||||||
|
typedef UInt ThreadId;
|
||||||
|
|
||||||
|
+/* A PosixThreadId uniquely identifies a POSIX thread in the client. This
|
||||||
|
+ datatype must be able to represent any client pthread_t value. The only
|
||||||
|
+ operations performed on this datatype are copying and comparison (==).
|
||||||
|
+ Note: the POSIX standard specifies that POSIX thread IDs may be implemented
|
||||||
|
+ as a struct, and that these must be compared by calling pthread_equal().
|
||||||
|
+ Representing POSIX thread IDs by an integer, and comparing these IDs via
|
||||||
|
+ "==" is a shortcut that works (at least) on Linux.
|
||||||
|
+ */
|
||||||
|
+typedef UWord PosixThreadId;
|
||||||
|
+
|
||||||
|
/* An abstraction of syscall return values.
|
||||||
|
When .isError == False, val holds the return value.
|
||||||
|
When .isError == True, val holds the error code.
|
||||||
|
Index: configure.in
|
||||||
|
===================================================================
|
||||||
|
--- configure.in (revision 6012)
|
||||||
|
+++ configure.in (working copy)
|
||||||
|
@@ -738,6 +738,9 @@
|
||||||
|
none/tests/ppc64/Makefile
|
||||||
|
none/tests/x86/Makefile
|
||||||
|
none/docs/Makefile
|
||||||
|
+ drd/Makefile
|
||||||
|
+ drd/docs/Makefile
|
||||||
|
+ drd/tests/Makefile
|
||||||
|
)
|
||||||
|
|
||||||
|
cat<<EOF
|
||||||
|
Index: Makefile.am
|
||||||
|
===================================================================
|
||||||
|
--- Makefile.am (revision 6012)
|
||||||
|
+++ Makefile.am (working copy)
|
||||||
|
@@ -8,6 +8,7 @@
|
||||||
|
callgrind \
|
||||||
|
massif \
|
||||||
|
lackey \
|
||||||
|
+ drd \
|
||||||
|
none
|
||||||
|
|
||||||
|
# Temporary: we want to compile Helgrind, but not regtest it.
|
||||||
|
Index: coregrind/vg_preloaded.c
|
||||||
|
===================================================================
|
||||||
|
--- coregrind/vg_preloaded.c (revision 6012)
|
||||||
|
+++ coregrind/vg_preloaded.c (working copy)
|
||||||
|
@@ -71,8 +71,6 @@
|
||||||
|
/*--- end ---*/
|
||||||
|
/*--------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
-#if 0
|
||||||
|
-
|
||||||
|
#define PTH_FUNC(ret_ty, f, args...) \
|
||||||
|
ret_ty VG_WRAP_FUNCTION_ZZ(libpthreadZdsoZd0,f)(args); \
|
||||||
|
ret_ty VG_WRAP_FUNCTION_ZZ(libpthreadZdsoZd0,f)(args)
|
||||||
|
@@ -80,34 +78,157 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <pthread.h>
|
||||||
|
|
||||||
|
+typedef struct
|
||||||
|
+{
|
||||||
|
+ void* (*start)(void*);
|
||||||
|
+ void* arg;
|
||||||
|
+#if 0
|
||||||
|
+ pthread_mutex_t mutex;
|
||||||
|
+ pthread_cond_t cond;
|
||||||
|
+#else
|
||||||
|
+ int wrapper_started;
|
||||||
|
+#endif
|
||||||
|
+} VgPosixThreadArgs;
|
||||||
|
+
|
||||||
|
+static void* vg_thread_wrapper(void* arg)
|
||||||
|
+{
|
||||||
|
+ VgPosixThreadArgs* const arg_ptr = (VgPosixThreadArgs*)arg;
|
||||||
|
+ VgPosixThreadArgs const arg_copy = *arg_ptr;
|
||||||
|
+ int res;
|
||||||
|
+
|
||||||
|
+#if 0
|
||||||
|
+ pthread_mutex_lock(arg_ptr->mutex);
|
||||||
|
+ pthread_cond_signal(arg_ptr->cond);
|
||||||
|
+ pthread_mutex_unlock(arg_ptr->mutex);
|
||||||
|
+#else
|
||||||
|
+ arg_ptr->wrapper_started = 1;
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
+ VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__SET_PTHREAD_SELF,
|
||||||
|
+ pthread_self(), 0, 0, 0, 0);
|
||||||
|
+ return (arg_copy.start)(arg_copy.arg);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
// pthread_create
|
||||||
|
PTH_FUNC(int, pthreadZucreateZAZa, // pthread_create@*
|
||||||
|
pthread_t *thread, const pthread_attr_t *attr,
|
||||||
|
void *(*start) (void *), void *arg)
|
||||||
|
{
|
||||||
|
- int ret;
|
||||||
|
- void* fn;
|
||||||
|
- VALGRIND_GET_NRADDR(fn);
|
||||||
|
- fprintf(stderr, "<< pthread_create wrapper"); fflush(stderr);
|
||||||
|
+ int res;
|
||||||
|
+ int ret;
|
||||||
|
+ OrigFn fn;
|
||||||
|
+ VgPosixThreadArgs vgargs;
|
||||||
|
+ VALGRIND_GET_ORIG_FN(fn);
|
||||||
|
+ // Make sure that Valgrind knows about the main thread's POSIX thread ID.
|
||||||
|
+ // To do: move this statement to another place such that it is only called
|
||||||
|
+ // once during startup, instead of during every pthread_create() call.
|
||||||
|
+ VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__SET_PTHREAD_SELF,
|
||||||
|
+ pthread_self(), 0, 0, 0, 0);
|
||||||
|
+ vgargs.start = start;
|
||||||
|
+ vgargs.arg = arg;
|
||||||
|
+ vgargs.wrapper_started = 0;
|
||||||
|
+#if 0
|
||||||
|
+ pthread_mutex_init(&vgargs.mutex, 0);
|
||||||
|
+ pthread_cond_init(&vgargs.cond, 0);
|
||||||
|
+ pthread_mutex_lock(&vgargs.mutex);
|
||||||
|
+#endif
|
||||||
|
+ CALL_FN_W_WWWW(ret, fn, thread, attr, vg_thread_wrapper, &vgargs);
|
||||||
|
+#if 0
|
||||||
|
+ pthread_cond_wait(&vgargs.cond, &vgargs.mutex);
|
||||||
|
+ pthread_mutex_unlock(&vgargs.mutex);
|
||||||
|
+ pthread_cond_destroy(&vgargs.cond);
|
||||||
|
+ pthread_mutex_destroy(&vgargs.mutex);
|
||||||
|
+#else
|
||||||
|
+ // Yes, you see it correctly, busy waiting ... The problem is that
|
||||||
|
+ // POSIX threads functions cannot be called here -- the functions defined
|
||||||
|
+ // in this file (vg_preloaded.c) would be called instead of those in
|
||||||
|
+ // libpthread.so.
|
||||||
|
+ while (! vgargs.wrapper_started)
|
||||||
|
+ ;
|
||||||
|
+#endif
|
||||||
|
+ return ret;
|
||||||
|
+}
|
||||||
|
|
||||||
|
- CALL_FN_W_WWWW(ret, fn, thread,attr,start,arg);
|
||||||
|
+// pthread_join
|
||||||
|
+PTH_FUNC(int, pthreadZujoin, // pthread_join
|
||||||
|
+ pthread_t thread, void **thread_return)
|
||||||
|
+{
|
||||||
|
+ int ret;
|
||||||
|
+ int res;
|
||||||
|
+ OrigFn fn;
|
||||||
|
|
||||||
|
- fprintf(stderr, " -> %d >>\n", ret);
|
||||||
|
+ VALGRIND_GET_ORIG_FN(fn);
|
||||||
|
+ CALL_FN_W_WW(ret, fn, thread, thread_return);
|
||||||
|
+ if (ret == 0)
|
||||||
|
+ {
|
||||||
|
+ VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__POST_PTHREAD_JOIN,
|
||||||
|
+ thread, 0, 0, 0, 0);
|
||||||
|
+ }
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
+// pthread_mutex_init
|
||||||
|
+PTH_FUNC(int, pthreadZumutexZuinit,
|
||||||
|
+ pthread_mutex_t *mutex,
|
||||||
|
+ pthread_mutexattr_t const* attr)
|
||||||
|
+{
|
||||||
|
+ int ret;
|
||||||
|
+ int res;
|
||||||
|
+ OrigFn fn;
|
||||||
|
+ VALGRIND_GET_ORIG_FN(fn);
|
||||||
|
+ CALL_FN_W_WW(ret, fn, mutex, attr);
|
||||||
|
+ VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__POST_MUTEX_INIT,
|
||||||
|
+ mutex, sizeof(*mutex), 0, 0, 0);
|
||||||
|
+ return ret;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+// pthread_mutex_destroy
|
||||||
|
+PTH_FUNC(int, pthreadZumutexZudestroy,
|
||||||
|
+ pthread_mutex_t *mutex)
|
||||||
|
+{
|
||||||
|
+ int ret;
|
||||||
|
+ int res;
|
||||||
|
+ OrigFn fn;
|
||||||
|
+ VALGRIND_GET_ORIG_FN(fn);
|
||||||
|
+ VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__PRE_MUTEX_DESTROY,
|
||||||
|
+ mutex, sizeof(*mutex), 0, 0, 0);
|
||||||
|
+ CALL_FN_W_W(ret, fn, mutex);
|
||||||
|
+ return ret;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
// pthread_mutex_lock
|
||||||
|
PTH_FUNC(int, pthreadZumutexZulock, // pthread_mutex_lock
|
||||||
|
pthread_mutex_t *mutex)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
- void* fn;
|
||||||
|
+ int res;
|
||||||
|
+ OrigFn fn;
|
||||||
|
VALGRIND_GET_ORIG_FN(fn);
|
||||||
|
- fprintf(stderr, "<< pthread_mxlock %p", mutex); fflush(stderr);
|
||||||
|
+ VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__PRE_PTHREAD_MUTEX_LOCK,
|
||||||
|
+ mutex, 0, 0, 0, 0);
|
||||||
|
+ CALL_FN_W_W(ret, fn, mutex);
|
||||||
|
+ if (ret == 0)
|
||||||
|
+ VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__POST_PTHREAD_MUTEX_LOCK,
|
||||||
|
+ mutex, 0, 0, 0, 0);
|
||||||
|
+ return ret;
|
||||||
|
+}
|
||||||
|
|
||||||
|
+// pthread_mutex_trylock
|
||||||
|
+PTH_FUNC(int, pthreadZumutexZutrylock, // pthread_mutex_trylock
|
||||||
|
+ pthread_mutex_t *mutex)
|
||||||
|
+{
|
||||||
|
+ int ret;
|
||||||
|
+ int res;
|
||||||
|
+ OrigFn fn;
|
||||||
|
+ VALGRIND_GET_ORIG_FN(fn);
|
||||||
|
+ VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__PRE_PTHREAD_MUTEX_LOCK,
|
||||||
|
+ mutex, 0, 0, 0, 0);
|
||||||
|
CALL_FN_W_W(ret, fn, mutex);
|
||||||
|
-
|
||||||
|
- fprintf(stderr, " -> %d >>\n", ret);
|
||||||
|
+ if (ret == 0)
|
||||||
|
+ {
|
||||||
|
+ VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__POST_PTHREAD_MUTEX_LOCK,
|
||||||
|
+ mutex, 0, 0, 0, 0);
|
||||||
|
+ }
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -116,15 +237,44 @@
|
||||||
|
pthread_mutex_t *mutex)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
- void* fn;
|
||||||
|
+ int res;
|
||||||
|
+ OrigFn fn;
|
||||||
|
VALGRIND_GET_ORIG_FN(fn);
|
||||||
|
-
|
||||||
|
- fprintf(stderr, "<< pthread_mxunlk %p", mutex); fflush(stderr);
|
||||||
|
-
|
||||||
|
+ VALGRIND_DO_CLIENT_REQUEST(res, -1,
|
||||||
|
+ VG_USERREQ__PRE_PTHREAD_MUTEX_UNLOCK,
|
||||||
|
+ mutex, 0, 0, 0, 0);
|
||||||
|
CALL_FN_W_W(ret, fn, mutex);
|
||||||
|
+ if (ret == 0)
|
||||||
|
+ {
|
||||||
|
+ VALGRIND_DO_CLIENT_REQUEST(res, -1,
|
||||||
|
+ VG_USERREQ__POST_PTHREAD_MUTEX_UNLOCK,
|
||||||
|
+ mutex, 0, 0, 0, 0);
|
||||||
|
+ }
|
||||||
|
+ return ret;
|
||||||
|
+}
|
||||||
|
|
||||||
|
- fprintf(stderr, " -> %d >>\n", ret);
|
||||||
|
+// pthread_cond_wait
|
||||||
|
+PTH_FUNC(int, pthreadZucontZuwait, // pthread_cond_wait
|
||||||
|
+ pthread_cond_t *cond,
|
||||||
|
+ pthread_mutex_t *mutex)
|
||||||
|
+{
|
||||||
|
+ int ret;
|
||||||
|
+ int res;
|
||||||
|
+ OrigFn fn;
|
||||||
|
+ VALGRIND_GET_ORIG_FN(fn);
|
||||||
|
+ VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__PRE_PTHREAD_COND_WAIT,
|
||||||
|
+ cond, mutex, 0, 0, 0);
|
||||||
|
+ CALL_FN_W_WW(ret, fn, cond, mutex);
|
||||||
|
+ if (ret == 0)
|
||||||
|
+ {
|
||||||
|
+ VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__POST_PTHREAD_COND_WAIT,
|
||||||
|
+ cond, mutex, 0, 0, 0);
|
||||||
|
+ }
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
-#endif
|
||||||
|
+/*
|
||||||
|
+ * Local variables:
|
||||||
|
+ * c-basic-offset: 3
|
||||||
|
+ * End:
|
||||||
|
+ */
|
||||||
|
Index: coregrind/m_syswrap/syswrap-linux.c
|
||||||
|
===================================================================
|
||||||
|
--- coregrind/m_syswrap/syswrap-linux.c (revision 6012)
|
||||||
|
+++ coregrind/m_syswrap/syswrap-linux.c (working copy)
|
||||||
|
@@ -164,7 +164,7 @@
|
||||||
|
assembler. */
|
||||||
|
#if defined(VGP_x86_linux)
|
||||||
|
asm volatile (
|
||||||
|
- "movl %1, %0\n" /* set tst->status = VgTs_Empty */
|
||||||
|
+ // "movl %1, %0\n" /* set tst->status = VgTs_Empty */
|
||||||
|
"movl %2, %%eax\n" /* set %eax = __NR_exit */
|
||||||
|
"movl %3, %%ebx\n" /* set %ebx = tst->os_state.exitcode */
|
||||||
|
"int $0x80\n" /* exit(tst->os_state.exitcode) */
|
||||||
|
@@ -172,7 +172,7 @@
|
||||||
|
: "n" (VgTs_Empty), "n" (__NR_exit), "m" (tst->os_state.exitcode));
|
||||||
|
#elif defined(VGP_amd64_linux)
|
||||||
|
asm volatile (
|
||||||
|
- "movl %1, %0\n" /* set tst->status = VgTs_Empty */
|
||||||
|
+ // "movl %1, %0\n" /* set tst->status = VgTs_Empty */
|
||||||
|
"movq %2, %%rax\n" /* set %rax = __NR_exit */
|
||||||
|
"movq %3, %%rdi\n" /* set %rdi = tst->os_state.exitcode */
|
||||||
|
"syscall\n" /* exit(tst->os_state.exitcode) */
|
||||||
|
@@ -181,7 +181,7 @@
|
||||||
|
#elif defined(VGP_ppc32_linux) || defined(VGP_ppc64_linux)
|
||||||
|
{ UInt vgts_empty = (UInt)VgTs_Empty;
|
||||||
|
asm volatile (
|
||||||
|
- "stw %1,%0\n\t" /* set tst->status = VgTs_Empty */
|
||||||
|
+ // "stw %1,%0\n\t" /* set tst->status = VgTs_Empty */
|
||||||
|
"li 0,%2\n\t" /* set r0 = __NR_exit */
|
||||||
|
"lwz 3,%3\n\t" /* set r3 = tst->os_state.exitcode */
|
||||||
|
"sc\n\t" /* exit(tst->os_state.exitcode) */
|
||||||
|
Index: coregrind/m_tooliface.c
|
||||||
|
===================================================================
|
||||||
|
--- coregrind/m_tooliface.c (revision 6012)
|
||||||
|
+++ coregrind/m_tooliface.c (working copy)
|
||||||
|
@@ -326,13 +326,21 @@
|
||||||
|
DEF(track_post_thread_create, ThreadId, ThreadId)
|
||||||
|
DEF(track_post_thread_join, ThreadId, ThreadId)
|
||||||
|
|
||||||
|
-DEF(track_pre_mutex_lock, ThreadId, void*)
|
||||||
|
-DEF(track_post_mutex_lock, ThreadId, void*)
|
||||||
|
-DEF(track_post_mutex_unlock, ThreadId, void*)
|
||||||
|
+DEF(track_post_mutex_init, ThreadId, Addr, SizeT)
|
||||||
|
+DEF(track_pre_mutex_destroy, ThreadId, Addr, SizeT)
|
||||||
|
+DEF(track_pre_mutex_lock, ThreadId, Addr)
|
||||||
|
+DEF(track_post_mutex_lock, ThreadId, Addr)
|
||||||
|
+DEF(track_pre_mutex_unlock, ThreadId, Addr)
|
||||||
|
+DEF(track_post_mutex_unlock, ThreadId, Addr)
|
||||||
|
|
||||||
|
DEF(track_pre_deliver_signal, ThreadId, Int sigNo, Bool)
|
||||||
|
DEF(track_post_deliver_signal, ThreadId, Int sigNo)
|
||||||
|
|
||||||
|
+DEF(track_post_cond_init, ThreadId, Addr, SizeT);
|
||||||
|
+DEF(track_pre_cond_destroy, ThreadId, Addr, SizeT);
|
||||||
|
+DEF(track_pre_cond_wait, ThreadId, Addr, Addr);
|
||||||
|
+DEF(track_post_cond_wait, ThreadId, Addr, Addr);
|
||||||
|
+
|
||||||
|
/*--------------------------------------------------------------------*/
|
||||||
|
/*--- end ---*/
|
||||||
|
/*--------------------------------------------------------------------*/
|
||||||
|
Index: coregrind/pub_core_tooliface.h
|
||||||
|
===================================================================
|
||||||
|
--- coregrind/pub_core_tooliface.h (revision 6012)
|
||||||
|
+++ coregrind/pub_core_tooliface.h (working copy)
|
||||||
|
@@ -205,10 +205,18 @@
|
||||||
|
void (*track_post_thread_create)(ThreadId, ThreadId);
|
||||||
|
void (*track_post_thread_join) (ThreadId, ThreadId);
|
||||||
|
|
||||||
|
- void (*track_pre_mutex_lock) (ThreadId, void*);
|
||||||
|
- void (*track_post_mutex_lock) (ThreadId, void*);
|
||||||
|
- void (*track_post_mutex_unlock)(ThreadId, void*);
|
||||||
|
+ void (*track_post_mutex_init) (ThreadId, Addr, SizeT);
|
||||||
|
+ void (*track_pre_mutex_destroy)(ThreadId, Addr, SizeT);
|
||||||
|
+ void (*track_pre_mutex_lock) (ThreadId, Addr);
|
||||||
|
+ void (*track_post_mutex_lock) (ThreadId, Addr);
|
||||||
|
+ void (*track_pre_mutex_unlock) (ThreadId, Addr);
|
||||||
|
+ void (*track_post_mutex_unlock)(ThreadId, Addr);
|
||||||
|
|
||||||
|
+ void (*track_post_cond_init) (ThreadId, Addr, SizeT);
|
||||||
|
+ void (*track_pre_cond_destroy) (ThreadId, Addr, SizeT);
|
||||||
|
+ void (*track_pre_cond_wait) (ThreadId, Addr, Addr);
|
||||||
|
+ void (*track_post_cond_wait) (ThreadId, Addr, Addr);
|
||||||
|
+
|
||||||
|
void (*track_pre_deliver_signal) (ThreadId, Int sigNo, Bool);
|
||||||
|
void (*track_post_deliver_signal)(ThreadId, Int sigNo);
|
||||||
|
|
||||||
|
Index: coregrind/m_debuginfo/debuginfo.c
|
||||||
|
===================================================================
|
||||||
|
--- coregrind/m_debuginfo/debuginfo.c (revision 6012)
|
||||||
|
+++ coregrind/m_debuginfo/debuginfo.c (working copy)
|
||||||
|
@@ -912,6 +912,35 @@
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
+Char* VG_(seginfo_sect_kind_name)(Addr a, Char* buf, UInt n_buf)
|
||||||
|
+{
|
||||||
|
+ switch (VG_(seginfo_sect_kind)(a))
|
||||||
|
+ {
|
||||||
|
+ case Vg_SectUnknown:
|
||||||
|
+ VG_(snprintf)(buf, n_buf, "Unknown");
|
||||||
|
+ break;
|
||||||
|
+ case Vg_SectText:
|
||||||
|
+ VG_(snprintf)(buf, n_buf, "Text");
|
||||||
|
+ break;
|
||||||
|
+ case Vg_SectData:
|
||||||
|
+ VG_(snprintf)(buf, n_buf, "Data");
|
||||||
|
+ break;
|
||||||
|
+ case Vg_SectBSS:
|
||||||
|
+ VG_(snprintf)(buf, n_buf, "BSS");
|
||||||
|
+ break;
|
||||||
|
+ case Vg_SectGOT:
|
||||||
|
+ VG_(snprintf)(buf, n_buf, "GOT");
|
||||||
|
+ break;
|
||||||
|
+ case Vg_SectPLT:
|
||||||
|
+ VG_(snprintf)(buf, n_buf, "PLT");
|
||||||
|
+ break;
|
||||||
|
+ default:
|
||||||
|
+ VG_(snprintf)(buf, n_buf, "???");
|
||||||
|
+ vg_assert(0);
|
||||||
|
+ }
|
||||||
|
+ return buf;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
Int VG_(seginfo_syms_howmany) ( const SegInfo *si )
|
||||||
|
{
|
||||||
|
return si->symtab_used;
|
||||||
|
Index: coregrind/m_threadmodel.c
|
||||||
|
===================================================================
|
||||||
|
--- coregrind/m_threadmodel.c (revision 6012)
|
||||||
|
+++ coregrind/m_threadmodel.c (working copy)
|
||||||
|
@@ -807,7 +807,7 @@
|
||||||
|
if (mx->state == MX_Locked && mx->owner == tid) /* deadlock */
|
||||||
|
mutex_report(tid, mutexp, MXE_Deadlock, "trylocking");
|
||||||
|
|
||||||
|
- VG_TRACK( pre_mutex_lock, tid, (void *)mutexp );
|
||||||
|
+ VG_TRACK( pre_mutex_lock, tid, mutexp );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Give up waiting for a mutex. Fails if:
|
||||||
|
@@ -834,7 +834,7 @@
|
||||||
|
|
||||||
|
switch(mx->state) {
|
||||||
|
case MX_Unlocking: /* ownership transfer or relock */
|
||||||
|
- VG_TRACK( post_mutex_unlock, mx->owner, (void *)mutexp );
|
||||||
|
+ VG_TRACK( post_mutex_unlock, mx->owner, mutexp );
|
||||||
|
if (mx->owner != tid)
|
||||||
|
thread_unblock_mutex(tid, mx, "acquiring mutex");
|
||||||
|
break;
|
||||||
|
@@ -846,7 +846,7 @@
|
||||||
|
case MX_Locked:
|
||||||
|
if (debug_mutex)
|
||||||
|
VG_(printf)("mutex=%p mx->state=%s\n", mutexp, pp_mutexstate(mx));
|
||||||
|
- VG_TRACK( post_mutex_unlock, mx->owner, (void *)mutexp );
|
||||||
|
+ VG_TRACK( post_mutex_unlock, mx->owner, mutexp );
|
||||||
|
mutex_report(tid, mutexp, MXE_Locked, "acquiring");
|
||||||
|
thread_unblock_mutex(tid, mx, "acquiring mutex");
|
||||||
|
break;
|
||||||
|
@@ -859,7 +859,7 @@
|
||||||
|
mx->owner = tid;
|
||||||
|
mutex_setstate(tid, mx, MX_Locked);
|
||||||
|
|
||||||
|
- VG_TRACK( post_mutex_lock, tid, (void *)mutexp );
|
||||||
|
+ VG_TRACK( post_mutex_lock, tid, mutexp );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Try unlocking a lock. This will move it into a state where it can
|
||||||
|
@@ -968,7 +968,7 @@
|
||||||
|
|
||||||
|
case MX_Unlocking:
|
||||||
|
/* OK - we need to complete the unlock */
|
||||||
|
- VG_TRACK( post_mutex_unlock, tid, (void *)mutexp );
|
||||||
|
+ VG_TRACK( post_mutex_unlock, tid, mutexp );
|
||||||
|
mutex_setstate(tid, mx, MX_Free);
|
||||||
|
break;
|
||||||
|
|
||||||
|
Index: coregrind/m_scheduler/scheduler.c
|
||||||
|
===================================================================
|
||||||
|
--- coregrind/m_scheduler/scheduler.c (revision 6012)
|
||||||
|
+++ coregrind/m_scheduler/scheduler.c (working copy)
|
||||||
|
@@ -364,7 +364,10 @@
|
||||||
|
VG_(sigemptyset)(&VG_(threads)[tid].sig_mask);
|
||||||
|
VG_(sigemptyset)(&VG_(threads)[tid].tmp_sig_mask);
|
||||||
|
|
||||||
|
- os_state_clear(&VG_(threads)[tid]);
|
||||||
|
+ // Do NOT clear the OS state record here -- this data is still accessed
|
||||||
|
+ // after the thread exited from within vg_preloaded.c (pthread_join()
|
||||||
|
+ // wrapper).
|
||||||
|
+ // os_state_clear(&VG_(threads)[tid]);
|
||||||
|
|
||||||
|
/* start with no altstack */
|
||||||
|
VG_(threads)[tid].altstack.ss_sp = (void *)0xdeadbeef;
|
||||||
|
@@ -1215,6 +1218,72 @@
|
||||||
|
SET_CLREQ_RETVAL( tid, 0 ); /* return value is meaningless */
|
||||||
|
break; }
|
||||||
|
|
||||||
|
+ case VG_USERREQ__SET_PTHREAD_SELF: {
|
||||||
|
+ VG_(set_pthread_id)(VG_(get_running_tid)(), (PosixThreadId)(arg[1]));
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ case VG_USERREQ__POST_PTHREAD_JOIN: {
|
||||||
|
+ ThreadId const joinee = VG_(get_thread_id)(arg[1]);
|
||||||
|
+ // VG_(printf)("joinee = %d -> %d\n", arg[1], joinee);
|
||||||
|
+ vg_assert(joinee);
|
||||||
|
+ VG_TRACK(post_thread_join,
|
||||||
|
+ VG_(get_running_tid)(),
|
||||||
|
+ joinee);
|
||||||
|
+ if (joinee)
|
||||||
|
+ {
|
||||||
|
+ ThreadState *tst;
|
||||||
|
+ tst = VG_(get_ThreadState)(joinee);
|
||||||
|
+ vg_assert(tst);
|
||||||
|
+ vg_assert(tst->status == VgTs_Zombie);
|
||||||
|
+ tst->status = VgTs_Empty;
|
||||||
|
+ }
|
||||||
|
+ break; }
|
||||||
|
+
|
||||||
|
+ case VG_USERREQ__POST_MUTEX_INIT:
|
||||||
|
+ VG_TRACK(post_mutex_init, VG_(get_running_tid)(), arg[1], arg[2]);
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
+ case VG_USERREQ__PRE_MUTEX_DESTROY:
|
||||||
|
+ VG_TRACK(pre_mutex_destroy, VG_(get_running_tid)(), arg[1], arg[2]);
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
+ case VG_USERREQ__PRE_PTHREAD_MUTEX_LOCK:
|
||||||
|
+ VG_TRACK(pre_mutex_lock, VG_(get_running_tid)(), arg[1]);
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
+ case VG_USERREQ__POST_PTHREAD_MUTEX_LOCK:
|
||||||
|
+ VG_TRACK(post_mutex_lock, VG_(get_running_tid)(), arg[1]);
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
+ case VG_USERREQ__PRE_PTHREAD_MUTEX_UNLOCK:
|
||||||
|
+ VG_TRACK(pre_mutex_unlock, VG_(get_running_tid)(), arg[1]);
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
+ case VG_USERREQ__POST_PTHREAD_MUTEX_UNLOCK:
|
||||||
|
+ VG_TRACK(post_mutex_unlock, VG_(get_running_tid)(), arg[1]);
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
+ case VG_USERREQ__POST_PTHREAD_COND_INIT:
|
||||||
|
+ VG_TRACK(post_cond_init,
|
||||||
|
+ VG_(get_running_tid)(), arg[1], arg[2]);
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
+ case VG_USERREQ__PRE_PTHREAD_COND_DESTROY:
|
||||||
|
+ VG_TRACK(pre_cond_destroy,
|
||||||
|
+ VG_(get_running_tid)(), arg[1], arg[2]);
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
+ case VG_USERREQ__PRE_PTHREAD_COND_WAIT:
|
||||||
|
+ VG_TRACK(pre_cond_wait,
|
||||||
|
+ VG_(get_running_tid)(), arg[1], arg[2]);
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
+ case VG_USERREQ__POST_PTHREAD_COND_WAIT:
|
||||||
|
+ VG_TRACK(post_cond_wait,
|
||||||
|
+ VG_(get_running_tid)(), arg[1], arg[2]);
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
case VG_USERREQ__GET_MALLOCFUNCS: {
|
||||||
|
struct vg_mallocfunc_info *info = (struct vg_mallocfunc_info *)arg[1];
|
||||||
|
|
||||||
|
@@ -1380,3 +1449,10 @@
|
||||||
|
/*--------------------------------------------------------------------*/
|
||||||
|
/*--- end ---*/
|
||||||
|
/*--------------------------------------------------------------------*/
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+/*
|
||||||
|
+ * Local variables:
|
||||||
|
+ * c-basic-offset: 3
|
||||||
|
+ * End:
|
||||||
|
+ */
|
||||||
|
Index: coregrind/m_threadstate.c
|
||||||
|
===================================================================
|
||||||
|
--- coregrind/m_threadstate.c (revision 6012)
|
||||||
|
+++ coregrind/m_threadstate.c (working copy)
|
||||||
|
@@ -123,6 +123,41 @@
|
||||||
|
return VG_INVALID_THREADID;
|
||||||
|
}
|
||||||
|
|
||||||
|
+Int VG_(get_tid_lwp)(ThreadId const tid)
|
||||||
|
+{
|
||||||
|
+ vg_assert(1 <= tid && tid < VG_N_THREADS
|
||||||
|
+ && VG_(threads)[tid].status != VgTs_Empty);
|
||||||
|
+ return VG_(threads)[tid].os_state.lwpid;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+ThreadId VG_(get_thread_id)(PosixThreadId const posixthreadid)
|
||||||
|
+{
|
||||||
|
+ ThreadId tid;
|
||||||
|
+ for(tid = 1; tid < VG_N_THREADS; tid++)
|
||||||
|
+ {
|
||||||
|
+ if (VG_(threads)[tid].status != VgTs_Empty
|
||||||
|
+ && VG_(threads)[tid].os_state.posixthreadid == posixthreadid)
|
||||||
|
+ {
|
||||||
|
+ return tid;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ return VG_INVALID_THREADID;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+PosixThreadId VG_(get_pthread_id)(ThreadId const tid)
|
||||||
|
+{
|
||||||
|
+ vg_assert(1 <= tid && tid < VG_N_THREADS
|
||||||
|
+ && VG_(threads)[tid].status != VgTs_Empty);
|
||||||
|
+ return VG_(threads)[tid].os_state.posixthreadid;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+void VG_(set_pthread_id)(ThreadId const tid, PosixThreadId const posixthreadid)
|
||||||
|
+{
|
||||||
|
+ vg_assert(1 <= tid && tid < VG_N_THREADS
|
||||||
|
+ && VG_(threads)[tid].status != VgTs_Empty);
|
||||||
|
+ VG_(threads)[tid].os_state.posixthreadid = posixthreadid;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
/*--------------------------------------------------------------------*/
|
||||||
|
/*--- end ---*/
|
||||||
|
/*--------------------------------------------------------------------*/
|
||||||
|
Index: coregrind/pub_core_threadstate.h
|
||||||
|
===================================================================
|
||||||
|
--- coregrind/pub_core_threadstate.h (revision 6012)
|
||||||
|
+++ coregrind/pub_core_threadstate.h (working copy)
|
||||||
|
@@ -112,6 +112,7 @@
|
||||||
|
struct {
|
||||||
|
/* who we are */
|
||||||
|
Int lwpid; // PID of kernel task
|
||||||
|
+ PosixThreadId posixthreadid; // pthread_t, in case of a POSIX thread.
|
||||||
|
Int threadgroup; // thread group id
|
||||||
|
|
||||||
|
ThreadId parent; // parent tid (if any)
|
||||||
|
@@ -242,6 +243,14 @@
|
||||||
|
ThreadId */
|
||||||
|
extern ThreadId VG_(get_lwp_tid)(Int lwpid);
|
||||||
|
|
||||||
|
+ThreadId VG_(get_thread_id)(PosixThreadId const posixthreadid);
|
||||||
|
+
|
||||||
|
+PosixThreadId VG_(get_pthread_id)(ThreadId const tid);
|
||||||
|
+
|
||||||
|
+void VG_(set_pthread_id)(ThreadId const tid,
|
||||||
|
+ PosixThreadId const posixthreadid);
|
||||||
|
+
|
||||||
|
+
|
||||||
|
#endif // __PUB_CORE_THREADSTATE_H
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------*/
|
154
valgrind.changes
Normal file
154
valgrind.changes
Normal file
@ -0,0 +1,154 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Oct 17 11:09:11 CEST 2006 - dmueller@suse.de
|
||||||
|
|
||||||
|
- disable omega plugin for ppc/ppc64
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Oct 16 19:34:44 CEST 2006 - dmueller@suse.de
|
||||||
|
|
||||||
|
- update to 3.2 BRANCH:
|
||||||
|
* support glibc 2.5
|
||||||
|
* update suppressions
|
||||||
|
- add omega plugin
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Sat Sep 16 01:28:38 CEST 2006 - dmueller@suse.de
|
||||||
|
|
||||||
|
- update to 3.2.1:
|
||||||
|
* suppresion updates
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Sep 15 14:09:05 CEST 2006 - dmueller@suse.de
|
||||||
|
|
||||||
|
- update to 3.2.1rc1:
|
||||||
|
* about 36 bugfixes
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Sep 13 17:26:19 CEST 2006 - stbinner@suse.de
|
||||||
|
|
||||||
|
- fix build with < Factory
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Aug 28 13:37:11 CEST 2006 - dmueller@suse.de
|
||||||
|
|
||||||
|
- fix suppressions
|
||||||
|
- update drd plugin
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Aug 24 14:52:38 CEST 2006 - dmueller@suse.de
|
||||||
|
|
||||||
|
- add experimental drd plugin
|
||||||
|
- fix build on x86_64
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Aug 2 14:47:08 CEST 2006 - dmueller@suse.de
|
||||||
|
|
||||||
|
- also fix multibyte NOP parsing for x86_64
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Aug 1 03:18:28 CEST 2006 - dmueller@suse.de
|
||||||
|
|
||||||
|
- add patch to handle multibyte NOPs as generated by
|
||||||
|
recent binutils
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Jun 7 11:26:29 CEST 2006 - dmueller@suse.de
|
||||||
|
|
||||||
|
- update to 3.2.0 final
|
||||||
|
* only marginal changes since rc1
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue May 30 16:23:03 CEST 2006 - dmueller@suse.de
|
||||||
|
|
||||||
|
- update to 3.2.0 rc1:
|
||||||
|
* ppc64 support
|
||||||
|
* callgrind now integrated part
|
||||||
|
* massive performance improvements
|
||||||
|
* lots of emulation fixlets
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Mar 16 10:30:52 CET 2006 - dmueller@suse.de
|
||||||
|
|
||||||
|
- update to 3.1.1 (FATE #300493)
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Mar 6 16:31:21 CET 2006 - dmueller@suse.de
|
||||||
|
|
||||||
|
- various updates from branch to fix PPC32 support
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Feb 6 19:49:33 CET 2006 - dmueller@suse.de
|
||||||
|
|
||||||
|
- Fix GDB support
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Feb 6 10:19:24 CET 2006 - dmueller@suse.de
|
||||||
|
|
||||||
|
- Reduce BuildRequires
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Jan 25 21:42:29 CET 2006 - mls@suse.de
|
||||||
|
|
||||||
|
- converted neededforbuild to BuildRequires
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Jan 4 15:43:14 CET 2006 - dmueller@suse.de
|
||||||
|
|
||||||
|
- update to 3.1 branch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Dec 9 19:08:38 CET 2005 - dmueller@suse.de
|
||||||
|
|
||||||
|
- fix strict-aliasing issue
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Nov 28 11:13:31 CET 2005 - dmueller@suse.de
|
||||||
|
|
||||||
|
- 3.1.0 final update
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Nov 21 10:53:55 CET 2005 - dmueller@suse.de
|
||||||
|
|
||||||
|
- 3.1.0 RC1 update
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Nov 10 02:05:13 CET 2005 - dmueller@suse.de
|
||||||
|
|
||||||
|
- update to 3.1 SVN
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Nov 8 18:29:27 CET 2005 - dmueller@suse.de
|
||||||
|
|
||||||
|
- add hack to make valgrind work with apps that require executable stack
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Sep 15 12:26:01 CEST 2005 - dmueller@suse.de
|
||||||
|
|
||||||
|
- update 3.0.1 final
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Aug 25 01:52:35 CEST 2005 - dmueller@suse.de
|
||||||
|
|
||||||
|
- make massif work again
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Sun Aug 21 03:36:37 CEST 2005 - dmueller@suse.de
|
||||||
|
|
||||||
|
- fix trace-children=yes failure
|
||||||
|
- add default suppressions for SL 10
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Aug 15 02:42:20 CEST 2005 - dmueller@suse.de
|
||||||
|
|
||||||
|
- regenerate VEX offset headers, otherwise it just hangs
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Aug 12 12:54:17 CEST 2005 - dmueller@suse.de
|
||||||
|
|
||||||
|
- update to 3.0 branch to make it work on non-SSE platforms (#104181)
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Aug 5 15:14:00 CEST 2005 - dmueller@suse.de
|
||||||
|
|
||||||
|
- initial package of 3.0
|
||||||
|
|
181
valgrind.spec
Normal file
181
valgrind.spec
Normal file
@ -0,0 +1,181 @@
|
|||||||
|
#
|
||||||
|
# spec file for package valgrind (Version 3.2.1)
|
||||||
|
#
|
||||||
|
# Copyright (c) 2006 SUSE LINUX Products GmbH, Nuernberg, Germany.
|
||||||
|
# This file and all modifications and additions to the pristine
|
||||||
|
# package are under the same license as the package itself.
|
||||||
|
#
|
||||||
|
# Please submit bugfixes or comments via http://bugs.opensuse.org/
|
||||||
|
#
|
||||||
|
|
||||||
|
# norootforbuild
|
||||||
|
|
||||||
|
Name: valgrind
|
||||||
|
BuildRequires: gcc-c++ glibc-devel-32bit xorg-x11-devel
|
||||||
|
%ifarch x86_64
|
||||||
|
%if %suse_version > 1010
|
||||||
|
BuildRequires: gcc41-32bit
|
||||||
|
%endif
|
||||||
|
%if %suse_version < 1010
|
||||||
|
BuildRequires: gcc-32bit glibc-32bit
|
||||||
|
%endif
|
||||||
|
%endif
|
||||||
|
URL: http://valgrind.org/
|
||||||
|
License: Other License(s), see package
|
||||||
|
Group: Development/Tools/Debuggers
|
||||||
|
Summary: Memory Management Debugger
|
||||||
|
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||||
|
Version: 3.2.1
|
||||||
|
Release: 10
|
||||||
|
Source0: %{name}-%{version}.tar.bz2
|
||||||
|
# svn di svn://svn.valgrind.org/valgrind/tags/VALGRIND_3_2_1 svn://svn.valgrind.org/valgrind/branches/VALGRIND_3_2_BRANCH > 3_2_BRANCH.diff
|
||||||
|
# svn di svn://svn.valgrind.org/vex/tags/VEX_3_2_1 svn://svn.valgrind.org/vex/branches/VEX_3_2_BRANCH > VEX_3_2_BRANCH.diff
|
||||||
|
Patch0: 3_2_BRANCH.diff
|
||||||
|
#Patch1: VEX_3_1_BRANCH.diff
|
||||||
|
Source1: valgrind-6012-drd-2006-08-26.tar.bz2
|
||||||
|
Patch3: valgrind-6012.patch
|
||||||
|
Patch4: drd-fixes.diff
|
||||||
|
Patch5: omega_RC_01.patch
|
||||||
|
Provides: callgrind
|
||||||
|
Obsoletes: callgrind
|
||||||
|
ExclusiveArch: %ix86 x86_64 ppc ppc64
|
||||||
|
|
||||||
|
%description
|
||||||
|
Valgrind checks all memory operations in an application, like read,
|
||||||
|
write, malloc, new, free, and delete. Valgrind can find uses of
|
||||||
|
uninitialized memory, access to already freed memory, overflows,
|
||||||
|
illegal stack operations, memory leaks, and any illegal
|
||||||
|
new/malloc/free/delete commands. Another program in the package is
|
||||||
|
"cachegrind," a profiler based on the valgrind engine.
|
||||||
|
|
||||||
|
To use valgrind you should compile your application with "-g -O0"
|
||||||
|
compiler options. Afterwards you can use it with:
|
||||||
|
|
||||||
|
valgrind --tool=memcheck --sloppy-malloc=yes --leak-check=yes
|
||||||
|
--db-attach=yes my_application, for example.
|
||||||
|
|
||||||
|
More valgrind options can be listed via "valgrind --help". There is
|
||||||
|
also complete documentation in the /usr/share/doc/packages/valgrind/
|
||||||
|
directory. A debugged application runs slower and needs much more
|
||||||
|
memory, but is usually still usable. Valgrind is still in development,
|
||||||
|
but it has been successfully used to optimize several KDE applications.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Authors:
|
||||||
|
--------
|
||||||
|
Julian Seward <jseward@acm.org>
|
||||||
|
Cerion Armour-Brown
|
||||||
|
Jeremy Fitzhardinge
|
||||||
|
Tom Hughes
|
||||||
|
Nicholas Nethercote
|
||||||
|
Paul Mackerras
|
||||||
|
Dirk Mueller
|
||||||
|
Robert Walsh
|
||||||
|
|
||||||
|
%prep
|
||||||
|
%setup -q -n %{name}-%{version}
|
||||||
|
%patch
|
||||||
|
cd VEX
|
||||||
|
#%patch1
|
||||||
|
cd ..
|
||||||
|
tar xf %SOURCE1
|
||||||
|
#%patch3
|
||||||
|
%patch4
|
||||||
|
%ifarch %ix86 x86_64
|
||||||
|
%patch5
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%build
|
||||||
|
export CFLAGS="$RPM_OPT_FLAGS"
|
||||||
|
export CXXFLAGS="$RPM_OPT_FLAGS"
|
||||||
|
autoreconf -fi
|
||||||
|
export GDB=/usr/bin/gdb
|
||||||
|
%configure
|
||||||
|
make %{?jobs:-j%jobs}
|
||||||
|
|
||||||
|
%install
|
||||||
|
make DESTDIR=$RPM_BUILD_ROOT install
|
||||||
|
mkdir -p $RPM_BUILD_ROOT/usr/share/doc/packages
|
||||||
|
mv $RPM_BUILD_ROOT/usr/share/doc/valgrind $RPM_BUILD_ROOT/usr/share/doc/packages
|
||||||
|
|
||||||
|
%files
|
||||||
|
%defattr(-,root,root)
|
||||||
|
%doc README* NEWS ACKNOWLEDGEMENTS AUTHORS COPYING
|
||||||
|
/usr/bin/*
|
||||||
|
/usr/include/valgrind
|
||||||
|
/usr/%_lib/pkgconfig/valgrind.pc
|
||||||
|
%_libdir/valgrind
|
||||||
|
%doc %_mandir/*/*
|
||||||
|
|
||||||
|
%changelog -n valgrind
|
||||||
|
* Tue Oct 17 2006 - dmueller@suse.de
|
||||||
|
- disable omega plugin for ppc/ppc64
|
||||||
|
* Mon Oct 16 2006 - dmueller@suse.de
|
||||||
|
- update to 3.2 BRANCH:
|
||||||
|
* support glibc 2.5
|
||||||
|
* update suppressions
|
||||||
|
- add omega plugin
|
||||||
|
* Sat Sep 16 2006 - dmueller@suse.de
|
||||||
|
- update to 3.2.1:
|
||||||
|
* suppresion updates
|
||||||
|
* Fri Sep 15 2006 - dmueller@suse.de
|
||||||
|
- update to 3.2.1rc1:
|
||||||
|
* about 36 bugfixes
|
||||||
|
* Wed Sep 13 2006 - stbinner@suse.de
|
||||||
|
- fix build with < Factory
|
||||||
|
* Mon Aug 28 2006 - dmueller@suse.de
|
||||||
|
- fix suppressions
|
||||||
|
- update drd plugin
|
||||||
|
* Thu Aug 24 2006 - dmueller@suse.de
|
||||||
|
- add experimental drd plugin
|
||||||
|
- fix build on x86_64
|
||||||
|
* Wed Aug 02 2006 - dmueller@suse.de
|
||||||
|
- also fix multibyte NOP parsing for x86_64
|
||||||
|
* Tue Aug 01 2006 - dmueller@suse.de
|
||||||
|
- add patch to handle multibyte NOPs as generated by
|
||||||
|
recent binutils
|
||||||
|
* Wed Jun 07 2006 - dmueller@suse.de
|
||||||
|
- update to 3.2.0 final
|
||||||
|
* only marginal changes since rc1
|
||||||
|
* Tue May 30 2006 - dmueller@suse.de
|
||||||
|
- update to 3.2.0 rc1:
|
||||||
|
* ppc64 support
|
||||||
|
* callgrind now integrated part
|
||||||
|
* massive performance improvements
|
||||||
|
* lots of emulation fixlets
|
||||||
|
* Thu Mar 16 2006 - dmueller@suse.de
|
||||||
|
- update to 3.1.1 (FATE #300493)
|
||||||
|
* Mon Mar 06 2006 - dmueller@suse.de
|
||||||
|
- various updates from branch to fix PPC32 support
|
||||||
|
* Mon Feb 06 2006 - dmueller@suse.de
|
||||||
|
- Fix GDB support
|
||||||
|
* Mon Feb 06 2006 - dmueller@suse.de
|
||||||
|
- Reduce BuildRequires
|
||||||
|
* Wed Jan 25 2006 - mls@suse.de
|
||||||
|
- converted neededforbuild to BuildRequires
|
||||||
|
* Wed Jan 04 2006 - dmueller@suse.de
|
||||||
|
- update to 3.1 branch
|
||||||
|
* Fri Dec 09 2005 - dmueller@suse.de
|
||||||
|
- fix strict-aliasing issue
|
||||||
|
* Mon Nov 28 2005 - dmueller@suse.de
|
||||||
|
- 3.1.0 final update
|
||||||
|
* Mon Nov 21 2005 - dmueller@suse.de
|
||||||
|
- 3.1.0 RC1 update
|
||||||
|
* Thu Nov 10 2005 - dmueller@suse.de
|
||||||
|
- update to 3.1 SVN
|
||||||
|
* Tue Nov 08 2005 - dmueller@suse.de
|
||||||
|
- add hack to make valgrind work with apps that require executable stack
|
||||||
|
* Thu Sep 15 2005 - dmueller@suse.de
|
||||||
|
- update 3.0.1 final
|
||||||
|
* Thu Aug 25 2005 - dmueller@suse.de
|
||||||
|
- make massif work again
|
||||||
|
* Sun Aug 21 2005 - dmueller@suse.de
|
||||||
|
- fix trace-children=yes failure
|
||||||
|
- add default suppressions for SL 10
|
||||||
|
* Mon Aug 15 2005 - dmueller@suse.de
|
||||||
|
- regenerate VEX offset headers, otherwise it just hangs
|
||||||
|
* Fri Aug 12 2005 - dmueller@suse.de
|
||||||
|
- update to 3.0 branch to make it work on non-SSE platforms (#104181)
|
||||||
|
* Fri Aug 05 2005 - dmueller@suse.de
|
||||||
|
- initial package of 3.0
|
Loading…
Reference in New Issue
Block a user