|
From: Dirk M. <mu...@kd...> - 2004-01-02 23:15:33
|
CVS commit by mueller: remove the files as they're no longer regularly maintained. NEWS should be enough. CCMAIL: 698...@bu... R ChangeLog 1.15 R PATCHES_APPLIED 1.3 |
|
From: Tom H. <th...@cy...> - 2004-01-03 12:05:50
|
In message <200...@of...>
Dirk Mueller <mu...@kd...> wrote:
> CVS commit by mueller:
>
> remove the files as they're no longer regularly maintained. NEWS should
> be enough.
> CCMAIL: 698...@bu...
>
>
> R ChangeLog 1.15
> R PATCHES_APPLIED 1.3
Removing ChangeLog has caused the automake invocation in autogen.sh to
start complaining because automake considers ChangeLog a required file
when running in the GNU standards mode (which is the default).
Tom
--
Tom Hughes (th...@cy...)
Software Engineer, Cyberscience Corporation
http://www.cyberscience.com/
|
|
From: Dirk M. <mu...@kd...> - 2004-01-02 23:27:59
|
CVS commit by mueller: link bug reporting page instead CCMAIL: 698...@bu... M +2 -2 README_MISSING_SYSCALL_OR_IOCTL 1.5 --- valgrind/README_MISSING_SYSCALL_OR_IOCTL #1.4:1.5 @@ -144,5 +144,5 @@ more specific case to get the right behaviour. -As above, please do send me the resulting patch. - +As above, please create a bugreport and attach the patch as described +on http://valgrind.kde.org/bugs.html |
|
From: Nicholas N. <nj...@ca...> - 2004-01-03 10:57:53
|
CVS commit by nethercote:
Add possible workaround for FAQ 16, from Adam Spragg.
M +2 -1 FAQ.txt 1.19
--- valgrind/FAQ.txt #1.18:1.19
@@ -341,5 +341,6 @@
version 3.79.1 have this bug, see
www.mail-archive.com/bug...@gn.../msg01658.html. Try upgrading to a
- more recent version of 'make'.
+ more recent version of 'make'. Alternatively, we have heard that
+ unsetting the CFLAGS environment variable avoids the problem.
-----------------------------------------------------------------
|
|
From: Dirk M. <mu...@kd...> - 2004-01-03 12:48:02
|
CVS commit by mueller: stop whining. M +1 -1 Makefile.am 1.61 --- valgrind/Makefile.am #1.60:1.61 @@ -1,4 +1,4 @@ -AUTOMAKE_OPTIONS = 1.6 dist-bzip2 +AUTOMAKE_OPTIONS = foreign 1.6 dist-bzip2 ## include must be first for vg_skin.h |
|
From: Dirk M. <mu...@kd...> - 2004-01-03 14:26:37
|
CVS commit by mueller: remove test for malloc.h add tests for endian.h and sys/endian.h (FreeBSD like) M +1 -1 configure.in 1.103 --- valgrind/configure.in #1.102:1.103 @@ -323,5 +323,5 @@ # Checks for header files. AC_HEADER_STDC -AC_CHECK_HEADERS([fcntl.h malloc.h stdlib.h string.h sys/socket.h sys/statfs.h sys/time.h termios.h unistd.h utime.h]) +AC_CHECK_HEADERS([fcntl.h stdlib.h string.h sys/socket.h sys/statfs.h sys/time.h sys/endian.h endian.h termios.h unistd.h utime.h]) # Checks for typedefs, structures, and compiler characteristics. |
|
From: Dirk M. <mu...@kd...> - 2004-01-03 15:21:43
|
CVS commit by mueller:
infrastructure. Yes, it doesn't do much yet.
A coregrind/arch/.cvsignore 1.1
A coregrind/arch/Makefile.am 1.1
A coregrind/arch/x86-freebsd/.cvsignore 1.1
A coregrind/arch/x86-freebsd/Makefile.am 1.1
A coregrind/arch/x86-linux/.cvsignore 1.1
A coregrind/arch/x86-linux/Makefile.am 1.1
M +40 -28 configure.in 1.104
--- valgrind/configure.in #1.103:1.104
@@ -79,44 +79,53 @@
AC_MSG_CHECKING([for a supported OS])
+AC_SUBST(VG_PLATFORM)
case "${host_os}" in
- *linux*)
+ *linux*)
AC_MSG_RESULT([ok (${host_os})])
- ;;
+ VG_PLATFORM="x86-linux"
- *)
- AC_MSG_RESULT([no (${host_os})])
- AC_MSG_ERROR([Valgrind is Linux specific. Sorry])
- ;;
-esac
+ # Ok, this is linux. Check the kernel version
+ AC_MSG_CHECKING([for the kernel version])
+ kernel=`uname -r`
-# Ok, this is linux. Check the kernel version
-AC_MSG_CHECKING([for the kernel version])
+ case "${kernel}" in
+ 2.6.*)
+ AC_MSG_RESULT([2.6 family (${kernel})])
+ AC_DEFINE([KERNEL_2_6], 1, [Define to 1 if you're using Linux 2.6.x])
+ ;;
+
+ 2.4.*)
+ AC_MSG_RESULT([2.4 family (${kernel})])
+ AC_DEFINE([KERNEL_2_4], 1, [Define to 1 if you're using Linux 2.4.x])
+ ;;
+
+ 2.2.*)
+ AC_MSG_RESULT([2.2 family (${kernel})])
+ AC_DEFINE([KERNEL_2_2], 1, [Define to 1 if you're using Linux 2.2.x])
+ ;;
+
+ *)
+ AC_MSG_RESULT([unsupported (${kernel})])
+ AC_MSG_ERROR([Valgrind works on kernels 2.2, 2.4, 2.6])
+ ;;
+ esac
-kernel=`uname -r`
+ ;;
+
+ *freebsd*)
+ AC_MSG_RESULT([ok (${host_os})])
+ VG_PLATFORM="x86-freebsd"
-case "${kernel}" in
- 2.6.*)
- AC_MSG_RESULT([2.6 family (${kernel})])
- AC_DEFINE([KERNEL_2_6], 1, [Define to 1 if you're using Linux 2.6.x])
- ;;
-
- 2.4.*)
- AC_MSG_RESULT([2.4 family (${kernel})])
- AC_DEFINE([KERNEL_2_4], 1, [Define to 1 if you're using Linux 2.4.x])
- ;;
-
- 2.2.*)
- AC_MSG_RESULT([2.2 family (${kernel})])
- AC_DEFINE([KERNEL_2_2], 1, [Define to 1 if you're using Linux 2.2.x])
- ;;
+ ;;
*)
- AC_MSG_RESULT([unsupported (${kernel})])
- AC_MSG_ERROR([Valgrind works on kernels 2.2, 2.4, 2.6])
- ;;
+ AC_MSG_RESULT([no (${host_os})])
+ AC_MSG_ERROR([Valgrind is operating system specific. Sorry. Please consider doing a port.])
+ ;;
esac
+
AC_SUBST(DEFAULT_SUPP)
@@ -349,4 +358,7 @@
auxprogs/Makefile
coregrind/Makefile
+ coregrind/arch/Makefile
+ coregrind/arch/x86-linux/Makefile
+ coregrind/arch/x86-freebsd/Makefile
coregrind/demangle/Makefile
coregrind/docs/Makefile
|
|
From: Doug R. <df...@nl...> - 2004-01-03 15:33:36
|
On Sat, 2004-01-03 at 15:21, Dirk Mueller wrote: > CVS commit by mueller: > > infrastructure. Yes, it doesn't do much yet. Thanks! |
|
From: Julian S. <js...@ac...> - 2004-01-04 03:46:49
|
CVS commit by jseward:
Add copyright notices to new files.
M +24 -0 coregrind/gen_toolint.pl 1.2
M +26 -0 coregrind/stage1.c 1.3
M +26 -0 coregrind/stage2.c 1.4
M +26 -0 coregrind/ume.c 1.4
M +26 -0 coregrind/ume.h 1.2
M +26 -0 coregrind/ume_arch.h 1.2
M +26 -0 coregrind/vg_skiplist.c 1.2
M +26 -0 coregrind/vg_unistd.h 1.2
M +26 -0 coregrind/x86/ume_archdefs.c 1.2
M +26 -0 coregrind/x86/ume_archdefs.h 1.2
M +26 -0 coregrind/x86/ume_entry.S 1.2
M +26 -0 coregrind/x86/ume_go.c 1.2
M +25 -0 example/ex_main.c 1.15
--- valgrind/coregrind/gen_toolint.pl #1.1:1.2
@@ -1,4 +1,28 @@
#!/usr/bin/perl
+# This file is part of Valgrind, an extensible x86 protected-mode
+# emulator for monitoring program execution on x86-Unixes.
+#
+# Copyright (C) 2000-2004 Julian Seward
+# js...@ac...
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+# 02111-1307, USA.
+#
+# The GNU General Public License is contained in the file COPYING.
+
+
my $output = shift @ARGV;
my $indent = "";
--- valgrind/coregrind/stage1.c #1.2:1.3
@@ -1,2 +1,28 @@
+
+/*
+ This file is part of Valgrind, an extensible x86 protected-mode
+ emulator for monitoring program execution on x86-Unixes.
+
+ Copyright (C) 2000-2004 Julian Seward
+ js...@ac...
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307, USA.
+
+ The GNU General Public License is contained in the file COPYING.
+*/
+
#define _FILE_OFFSET_BITS 64
--- valgrind/coregrind/stage2.c #1.3:1.4
@@ -1,2 +1,28 @@
+
+/*
+ This file is part of Valgrind, an extensible x86 protected-mode
+ emulator for monitoring program execution on x86-Unixes.
+
+ Copyright (C) 2000-2004 Julian Seward
+ js...@ac...
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307, USA.
+
+ The GNU General Public License is contained in the file COPYING.
+*/
+
#define _FILE_OFFSET_BITS 64
--- valgrind/coregrind/ume.c #1.3:1.4
@@ -1,2 +1,28 @@
+
+/*
+ This file is part of Valgrind, an extensible x86 protected-mode
+ emulator for monitoring program execution on x86-Unixes.
+
+ Copyright (C) 2000-2004 Julian Seward
+ js...@ac...
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307, USA.
+
+ The GNU General Public License is contained in the file COPYING.
+*/
+
/*
User-mode exec
--- valgrind/coregrind/ume.h #1.1:1.2
@@ -1,2 +1,28 @@
+
+/*
+ This file is part of Valgrind, an extensible x86 protected-mode
+ emulator for monitoring program execution on x86-Unixes.
+
+ Copyright (C) 2000-2004 Julian Seward
+ js...@ac...
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307, USA.
+
+ The GNU General Public License is contained in the file COPYING.
+*/
+
#ifndef _COREGRIND_UME_H
#define _COREGRIND_UME_H
--- valgrind/coregrind/ume_arch.h #1.1:1.2
@@ -1,2 +1,28 @@
+
+/*
+ This file is part of Valgrind, an extensible x86 protected-mode
+ emulator for monitoring program execution on x86-Unixes.
+
+ Copyright (C) 2000-2004 Julian Seward
+ js...@ac...
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307, USA.
+
+ The GNU General Public License is contained in the file COPYING.
+*/
+
#ifndef UME_ARCH
#define UME_ARCH
--- valgrind/coregrind/vg_skiplist.c #1.1:1.2
@@ -1,2 +1,28 @@
+
+/*
+ This file is part of Valgrind, an extensible x86 protected-mode
+ emulator for monitoring program execution on x86-Unixes.
+
+ Copyright (C) 2002-2004 Nicholas Nethercote
+ nj...@ca...
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307, USA.
+
+ The GNU General Public License is contained in the file COPYING.
+*/
+
#include "vg_include.h"
--- valgrind/coregrind/vg_unistd.h #1.1:1.2
@@ -1,2 +1,28 @@
+
+/*
+ This file is part of Valgrind, an extensible x86 protected-mode
+ emulator for monitoring program execution on x86-Unixes.
+
+ Copyright (C) 2000-2004 Julian Seward
+ js...@ac...
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307, USA.
+
+ The GNU General Public License is contained in the file COPYING.
+*/
+
#ifndef _VG_ASM_I386_UNISTD_H_
#define _VG_ASM_I386_UNISTD_H_
--- valgrind/coregrind/x86/ume_archdefs.c #1.1:1.2
@@ -1,2 +1,28 @@
+
+/*
+ This file is part of Valgrind, an extensible x86 protected-mode
+ emulator for monitoring program execution on x86-Unixes.
+
+ Copyright (C) 2000-2004 Julian Seward
+ js...@ac...
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307, USA.
+
+ The GNU General Public License is contained in the file COPYING.
+*/
+
#include "ume_archdefs.h"
--- valgrind/coregrind/x86/ume_archdefs.h #1.1:1.2
@@ -1,2 +1,28 @@
+
+/*
+ This file is part of Valgrind, an extensible x86 protected-mode
+ emulator for monitoring program execution on x86-Unixes.
+
+ Copyright (C) 2000-2004 Julian Seward
+ js...@ac...
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307, USA.
+
+ The GNU General Public License is contained in the file COPYING.
+*/
+
#ifndef UME_ARCHDEFS_H
#define UME_ARCHDEFS_H
--- valgrind/coregrind/x86/ume_entry.S #1.1:1.2
@@ -1,2 +1,28 @@
+
+/*
+ This file is part of Valgrind, an extensible x86 protected-mode
+ emulator for monitoring program execution on x86-Unixes.
+
+ Copyright (C) 2000-2004 Julian Seward
+ js...@ac...
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307, USA.
+
+ The GNU General Public License is contained in the file COPYING.
+*/
+
.text
.globl _ume_entry
--- valgrind/coregrind/x86/ume_go.c #1.1:1.2
@@ -1,2 +1,28 @@
+
+/*
+ This file is part of Valgrind, an extensible x86 protected-mode
+ emulator for monitoring program execution on x86-Unixes.
+
+ Copyright (C) 2000-2004 Julian Seward
+ js...@ac...
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307, USA.
+
+ The GNU General Public License is contained in the file COPYING.
+*/
+
#include "ume_arch.h"
--- valgrind/example/ex_main.c #1.14:1.15
@@ -4,4 +4,29 @@
/*--------------------------------------------------------------------*/
+/*
+ This file is part of Valgrind, an extensible x86 protected-mode
+ emulator for monitoring program execution on x86-Unixes.
+
+ Copyright (C) 2002-2004 Nicholas Nethercote
+ nj...@ca...
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307, USA.
+
+ The GNU General Public License is contained in the file COPYING.
+*/
+
#include "vg_skin.h"
|
|
From: Nicholas N. <nj...@ca...> - 2004-01-04 16:44:02
|
CVS commit by nethercote:
Updated copyright dates for 2004. Also added a couple of missing headers and
footers to some new files.
M +2 -2 addrcheck/ac_main.c 1.57
M +1 -1 auxprogs/valgrind-listener.c 1.12
M +2 -2 cachegrind/cg_annotate.in 1.19
M +2 -2 cachegrind/cg_main.c 1.59
M +1 -1 cachegrind/cg_sim_D1.c 1.9
M +1 -1 cachegrind/cg_sim_I1.c 1.9
M +1 -1 cachegrind/cg_sim_L2.c 1.9
M +1 -1 cachegrind/cg_sim_gen.c 1.12
M +2 -2 corecheck/cc_main.c 1.19
M +1 -1 corecheck/docs/cc_main.html 1.4
M +8 -0 coregrind/stage1.c 1.4
M +9 -0 coregrind/stage2.c 1.5
M +8 -0 coregrind/ume.c 1.5
M +1 -1 coregrind/vg_constants.h 1.15
M +1 -1 coregrind/vg_default.c 1.20
M +1 -1 coregrind/vg_demangle.c 1.7
M +1 -1 coregrind/vg_dispatch.S 1.15
M +1 -1 coregrind/vg_dummy_profile.c 1.9
M +1 -1 coregrind/vg_dwarf.c 1.3
M +1 -1 coregrind/vg_errcontext.c 1.48
M +1 -1 coregrind/vg_execontext.c 1.14
M +1 -1 coregrind/vg_from_ucode.c 1.71
M +1 -1 coregrind/vg_hashtable.c 1.8
M +1 -1 coregrind/vg_helpers.S 1.28
M +1 -1 coregrind/vg_include.h 1.166
M +1 -1 coregrind/vg_instrument.c 1.10
M +1 -1 coregrind/vg_intercept.c 1.28
M +1 -1 coregrind/vg_ldt.c 1.11
M +1 -1 coregrind/vg_libpthread.c 1.143
M +1 -1 coregrind/vg_libpthread_unimp.c 1.43
M +3 -3 coregrind/vg_main.c 1.135
M +1 -1 coregrind/vg_malloc2.c 1.17
M +1 -1 coregrind/vg_memory.c 1.50
M +1 -1 coregrind/vg_messages.c 1.9
M +1 -1 coregrind/vg_mylibc.c 1.64
M +1 -1 coregrind/vg_needs.c 1.14
M +1 -1 coregrind/vg_procselfmaps.c 1.11
M +1 -1 coregrind/vg_proxylwp.c 1.11
M +1 -1 coregrind/vg_replace_malloc.c 1.17
M +1 -1 coregrind/vg_scheduler.c 1.135
M +1 -1 coregrind/vg_signals.c 1.55
M +1 -1 coregrind/vg_stabs.c 1.3
M +1 -1 coregrind/vg_startup.S 1.21
M +1 -1 coregrind/vg_symtab2.c 1.72
M +1 -1 coregrind/vg_symtab2.h 1.5
M +1 -1 coregrind/vg_symtypes.c 1.3
M +1 -1 coregrind/vg_symtypes.h 1.3
M +1 -1 coregrind/vg_syscall.S 1.11
M +1 -1 coregrind/vg_syscalls.c 1.74
M +2 -2 coregrind/vg_to_ucode.c 1.119
M +1 -1 coregrind/vg_translate.c 1.66
M +1 -1 coregrind/vg_transtab.c 1.27
M +1 -1 coregrind/vg_unsafe.h 1.23
M +1 -1 coregrind/arch/x86-freebsd/vg_libpthread.c 1.2
M +1 -1 coregrind/arch/x86-freebsd/vg_syscall.S 1.2
M +1 -1 coregrind/arch/x86-linux/vg_libpthread.c 1.143
M +1 -1 coregrind/arch/x86-linux/vg_libpthread_unimp.c 1.43
M +1 -1 coregrind/arch/x86-linux/vg_syscall.S 1.11
M +1 -1 example/ex_main.c 1.16
M +1 -1 helgrind/helgrind.h 1.7
M +2 -2 helgrind/hg_main.c 1.70
M +1 -1 include/valgrind.h 1.24
M +1 -1 include/vg_constants_skin.h 1.7
M +1 -1 include/vg_kerneliface.h 1.11
M +1 -1 include/vg_profile.c 1.10
M +2 -2 include/vg_skin.h.base 1.6
M +2 -2 lackey/lk_main.c 1.23
M +1 -1 lackey/docs/lk_main.html 1.4
M +1 -1 memcheck/mac_leakcheck.c 1.13
M +1 -1 memcheck/mac_malloc_wrappers.c 1.9
M +1 -1 memcheck/mac_needs.c 1.21
M +1 -1 memcheck/mac_replace_strmem.c 1.12
M +1 -1 memcheck/mac_shared.h 1.16
M +1 -1 memcheck/mc_clientreqs.c 1.18
M +1 -1 memcheck/mc_constants.h 1.4
M +1 -1 memcheck/mc_errcontext.c 1.22
M +1 -1 memcheck/mc_from_ucode.c 1.15
M +1 -1 memcheck/mc_helpers.S 1.8
M +1 -1 memcheck/mc_include.h 1.18
M +2 -2 memcheck/mc_main.c 1.44
M +2 -2 memcheck/mc_translate.c 1.33
M +1 -1 memcheck/memcheck.h 1.17
M +1 -1 memcheck/docs/mc_techdocs.html 1.9
M +2 -2 none/nl_main.c 1.18
M +1 -1 none/docs/nl_main.html 1.4
--- valgrind/addrcheck/ac_main.c #1.56:1.57
@@ -10,5 +10,5 @@
detecting memory errors.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
@@ -1276,5 +1276,5 @@ void SK_(pre_clo_init)(void)
VG_(details_description) ("a fine-grained address checker");
VG_(details_copyright_author)(
- "Copyright (C) 2002-2003, and GNU GPL'd, by Julian Seward.");
+ "Copyright (C) 2002-2004, and GNU GPL'd, by Julian Seward.");
VG_(details_bug_reports_to) (VG_BUGS_TO);
VG_(details_avg_translation_sizeB) ( 135 );
--- valgrind/auxprogs/valgrind-listener.c #1.11:1.12
@@ -9,5 +9,5 @@
emulator for monitoring program execution on x86-Unixes.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/cachegrind/cg_annotate.in #1.18:1.19
@@ -10,5 +10,5 @@
# profiling programs.
#
-# Copyright (C) 2002-2003 Nicholas Nethercote
+# Copyright (C) 2002-2004 Nicholas Nethercote
# nj...@ca...
#
@@ -159,5 +159,5 @@
source files
- Cachegrind is Copyright (C) 2002-2003 Nicholas Nethercote.
+ Cachegrind is Copyright (C) 2002-2004 Nicholas Nethercote.
Both are licensed under the GNU General Public License, version 2.
Bug reports, feedback, admiration, abuse, etc, to: njn25\@cam.ac.uk.
--- valgrind/cachegrind/cg_main.c #1.58:1.59
@@ -10,5 +10,5 @@
profiling programs.
- Copyright (C) 2002-2003 Nicholas Nethercote
+ Copyright (C) 2002-2004 Nicholas Nethercote
nj...@ca...
@@ -2022,5 +2022,5 @@ void SK_(pre_clo_init)(void)
VG_(details_description) ("an I1/D1/L2 cache profiler");
VG_(details_copyright_author)(
- "Copyright (C) 2002-2003, and GNU GPL'd, by Nicholas Nethercote.");
+ "Copyright (C) 2002-2004, and GNU GPL'd, by Nicholas Nethercote.");
VG_(details_bug_reports_to) (VG_BUGS_TO);
VG_(details_avg_translation_sizeB) ( 155 );
--- valgrind/cachegrind/cg_sim_D1.c #1.8:1.9
@@ -9,5 +9,5 @@
profiling programs.
- Copyright (C) 2002-2003 Nicholas Nethercote
+ Copyright (C) 2002-2004 Nicholas Nethercote
nj...@ca...
--- valgrind/cachegrind/cg_sim_I1.c #1.8:1.9
@@ -9,5 +9,5 @@
profiling programs.
- Copyright (C) 2002-2003 Nicholas Nethercote
+ Copyright (C) 2002-2004 Nicholas Nethercote
nj...@ca...
--- valgrind/cachegrind/cg_sim_L2.c #1.8:1.9
@@ -9,5 +9,5 @@
profiling programs.
- Copyright (C) 2002-2003 Nicholas Nethercote
+ Copyright (C) 2002-2004 Nicholas Nethercote
nj...@ca...
--- valgrind/cachegrind/cg_sim_gen.c #1.11:1.12
@@ -9,5 +9,5 @@
profiling programs.
- Copyright (C) 2002-2003 Nicholas Nethercote
+ Copyright (C) 2002-2004 Nicholas Nethercote
nj...@ca...
--- valgrind/corecheck/cc_main.c #1.18:1.19
@@ -9,5 +9,5 @@
detecting certain basic program errors.
- Copyright (C) 2002-2003 Nicholas Nethercote
+ Copyright (C) 2002-2004 Nicholas Nethercote
nj...@ca...
@@ -38,5 +38,5 @@ void SK_(pre_clo_init)(void)
VG_(details_description) ("a rudimentary error detector");
VG_(details_copyright_author)(
- "Copyright (C) 2002-2003, and GNU GPL'd, by Nicholas Nethercote.");
+ "Copyright (C) 2002-2004, and GNU GPL'd, by Nicholas Nethercote.");
VG_(details_bug_reports_to) (VG_BUGS_TO);
--- valgrind/corecheck/docs/cc_main.html #1.3:1.4
@@ -32,5 +32,5 @@
<center>
<a href="mailto:nj...@ca...">nj...@ca...</a><br>
-Copyright © 2000-2003 Nicholas Nethercote
+Copyright © 2000-2004 Nicholas Nethercote
<p>
CoreCheck is licensed under the GNU General Public License,
--- valgrind/coregrind/stage1.c #1.3:1.4
@@ -1,3 +1,7 @@
+/*--------------------------------------------------------------------*/
+/*--- Startup: stage 1 stage1.c ---*/
+/*--------------------------------------------------------------------*/
+
/*
This file is part of Valgrind, an extensible x86 protected-mode
@@ -206,2 +210,6 @@ int main(int argc, char **argv)
ume_go((addr_t)hoops, (addr_t)stack + sizeof(stack));
}
+
+/*--------------------------------------------------------------------*/
+/*--- end stage1.c ---*/
+/*--------------------------------------------------------------------*/
--- valgrind/coregrind/stage2.c #1.4:1.5
@@ -1,3 +1,7 @@
+/*--------------------------------------------------------------------*/
+/*--- Startup: stage 2 stage1.c ---*/
+/*--------------------------------------------------------------------*/
+
/*
This file is part of Valgrind, an extensible x86 protected-mode
@@ -1001,2 +1005,7 @@ int main(int argc, char **argv)
abort();
}
+
+/*--------------------------------------------------------------------*/
+/*--- end stage2.c ---*/
+/*--------------------------------------------------------------------*/
+
--- valgrind/coregrind/ume.c #1.4:1.5
@@ -1,3 +1,7 @@
+/*--------------------------------------------------------------------*/
+/*--- User-mode execve() ume.c ---*/
+/*--------------------------------------------------------------------*/
+
/*
This file is part of Valgrind, an extensible x86 protected-mode
@@ -685,2 +689,6 @@ int do_exec(const char *exe, struct exei
return do_exec_inner(exe, info);
}
+
+/*--------------------------------------------------------------------*/
+/*--- end ume.c ---*/
+/*--------------------------------------------------------------------*/
--- valgrind/coregrind/vg_constants.h #1.14:1.15
@@ -9,5 +9,5 @@
emulator for monitoring program execution on x86-Unixes.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/coregrind/vg_default.c #1.19:1.20
@@ -10,5 +10,5 @@
emulator for monitoring program execution on x86-Unixes.
- Copyright (C) 2000-2003 Nicholas Nethercote
+ Copyright (C) 2000-2004 Nicholas Nethercote
nj...@ca...
--- valgrind/coregrind/vg_demangle.c #1.6:1.7
@@ -9,5 +9,5 @@
emulator for monitoring program execution on x86-Unixes.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/coregrind/vg_dispatch.S #1.14:1.15
@@ -9,5 +9,5 @@
emulator for monitoring program execution on x86-Unixes.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/coregrind/vg_dummy_profile.c #1.8:1.9
@@ -10,5 +10,5 @@
emulator for monitoring program execution on x86-Unixes.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/coregrind/vg_dwarf.c #1.2:1.3
@@ -7,5 +7,5 @@
emulator for monitoring program execution on x86-Unixes.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/coregrind/vg_errcontext.c #1.47:1.48
@@ -8,5 +8,5 @@
emulator for monitoring program execution on x86-Unixes.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/coregrind/vg_execontext.c #1.13:1.14
@@ -9,5 +9,5 @@
emulator for monitoring program execution on x86-Unixes.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/coregrind/vg_from_ucode.c #1.70:1.71
@@ -9,5 +9,5 @@
emulator for monitoring program execution on x86-Unixes.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/coregrind/vg_hashtable.c #1.7:1.8
@@ -8,5 +8,5 @@
emulator for monitoring program execution on x86-Unixes.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/coregrind/vg_helpers.S #1.27:1.28
@@ -8,5 +8,5 @@
emulator for monitoring program execution on x86-Unixes.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/coregrind/vg_include.h #1.165:1.166
@@ -10,5 +10,5 @@
emulator for monitoring program execution on x86-Unixes.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/coregrind/vg_instrument.c #1.9:1.10
@@ -9,5 +9,5 @@
emulator for monitoring program execution on x86-Unixes.
- Copyright (C) 2000-2003 Nicholas Nethercote
+ Copyright (C) 2000-2004 Nicholas Nethercote
nj...@ca...
--- valgrind/coregrind/vg_intercept.c #1.27:1.28
@@ -9,5 +9,5 @@
emulator for monitoring program execution on x86-Unixes.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/coregrind/vg_ldt.c #1.10:1.11
@@ -8,5 +8,5 @@
emulator for monitoring program execution on x86-Unixes.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/coregrind/vg_libpthread.c #1.142:1.143
@@ -9,5 +9,5 @@
emulator for monitoring program execution on x86-Unixes.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/coregrind/vg_libpthread_unimp.c #1.42:1.43
@@ -9,5 +9,5 @@
emulator for monitoring program execution on x86-Unixes.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/coregrind/vg_main.c #1.134:1.135
@@ -9,5 +9,5 @@
emulator for monitoring program execution on x86-Unixes.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
@@ -721,5 +721,5 @@ void VG_(usage) ( void )
" Extra options are read from env variable $VALGRIND_OPTS\n"
"\n"
-" Valgrind is Copyright (C) 2000-2003 Julian Seward\n"
+" Valgrind is Copyright (C) 2000-2004 Julian Seward\n"
" and licensed under the GNU General Public License, version 2.\n"
" Bug reports, feedback, admiration, abuse, etc, to: %s.\n"
@@ -1146,5 +1146,5 @@ static void process_cmd_line_options ( c
VERSION);
VG_(message)(Vg_UserMsg,
- "Copyright (C) 2000-2003, and GNU GPL'd, by Julian Seward.");
+ "Copyright (C) 2000-2004, and GNU GPL'd, by Julian Seward.");
}
--- valgrind/coregrind/vg_malloc2.c #1.16:1.17
@@ -9,5 +9,5 @@
emulator for monitoring program execution on x86-Unixes.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/coregrind/vg_memory.c #1.49:1.50
@@ -10,5 +10,5 @@
emulator for monitoring program execution on x86-Unixes.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/coregrind/vg_messages.c #1.8:1.9
@@ -9,5 +9,5 @@
emulator for monitoring program execution on x86-Unixes.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/coregrind/vg_mylibc.c #1.63:1.64
@@ -10,5 +10,5 @@
emulator for monitoring program execution on x86-Unixes.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/coregrind/vg_needs.c #1.13:1.14
@@ -9,5 +9,5 @@
emulator for monitoring program execution on x86-Unixes.
- Copyright (C) 2000-2003 Nicholas Nethercote
+ Copyright (C) 2000-2004 Nicholas Nethercote
nj...@ca...
--- valgrind/coregrind/vg_procselfmaps.c #1.10:1.11
@@ -9,5 +9,5 @@
emulator for monitoring program execution on x86-Unixes.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/coregrind/vg_proxylwp.c #1.10:1.11
@@ -8,5 +8,5 @@
emulator for monitoring program execution on x86-Unixes.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/coregrind/vg_replace_malloc.c #1.16:1.17
@@ -9,5 +9,5 @@
emulator for monitoring program execution on x86-Unixes.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/coregrind/vg_scheduler.c #1.134:1.135
@@ -8,5 +8,5 @@
emulator for monitoring program execution on x86-Unixes.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/coregrind/vg_signals.c #1.54:1.55
@@ -9,5 +9,5 @@
emulator for monitoring program execution on x86-Unixes.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/coregrind/vg_stabs.c #1.2:1.3
@@ -7,5 +7,5 @@
emulator for monitoring program execution on x86-Unixes.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/coregrind/vg_startup.S #1.20:1.21
@@ -9,5 +9,5 @@
emulator for monitoring program execution on x86-Unixes.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/coregrind/vg_symtab2.c #1.71:1.72
@@ -8,5 +8,5 @@
emulator for monitoring program execution on x86-Unixes.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/coregrind/vg_symtab2.h #1.4:1.5
@@ -7,5 +7,5 @@
emulator for monitoring program execution on x86-Unixes.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/coregrind/vg_symtypes.c #1.2:1.3
@@ -7,5 +7,5 @@
emulator for monitoring program execution on x86-Unixes.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/coregrind/vg_symtypes.h #1.2:1.3
@@ -7,5 +7,5 @@
emulator for monitoring program execution on x86-Unixes.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/coregrind/vg_syscall.S #1.10:1.11
@@ -9,5 +9,5 @@
emulator for monitoring program execution on x86-Unixes.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/coregrind/vg_syscalls.c #1.73:1.74
@@ -8,5 +8,5 @@
emulator for monitoring program execution on x86-Unixes.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/coregrind/vg_to_ucode.c #1.118:1.119
@@ -1,3 +1,3 @@
-/* -*- c-basic-offset: 3 -*- */
+
/*--------------------------------------------------------------------*/
/*--- The JITter: translate x86 code to ucode. ---*/
@@ -9,5 +9,5 @@
emulator for monitoring program execution on x86-Unixes.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/coregrind/vg_translate.c #1.65:1.66
@@ -9,5 +9,5 @@
emulator for monitoring program execution on x86-Unixes.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/coregrind/vg_transtab.c #1.26:1.27
@@ -9,5 +9,5 @@
emulator for monitoring program execution on x86-Unixes.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/coregrind/vg_unsafe.h #1.22:1.23
@@ -10,5 +10,5 @@
emulator for monitoring program execution on x86-Unixes.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/coregrind/arch/x86-freebsd/vg_libpthread.c #1.1:1.2
@@ -9,5 +9,5 @@
emulator for monitoring program execution on x86-Unixes.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/coregrind/arch/x86-freebsd/vg_syscall.S #1.1:1.2
@@ -9,5 +9,5 @@
emulator for monitoring program execution on x86-Unixes.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/coregrind/arch/x86-linux/vg_libpthread.c #1.142:1.143
@@ -9,5 +9,5 @@
emulator for monitoring program execution on x86-Unixes.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/coregrind/arch/x86-linux/vg_libpthread_unimp.c #1.42:1.43
@@ -9,5 +9,5 @@
emulator for monitoring program execution on x86-Unixes.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/coregrind/arch/x86-linux/vg_syscall.S #1.10:1.11
@@ -9,5 +9,5 @@
emulator for monitoring program execution on x86-Unixes.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/example/ex_main.c #1.15:1.16
@@ -37,5 +37,5 @@ static void SK_(pre_clo_init)()
VG_(details_description) ("an example Valgrind tool");
VG_(details_copyright_author)(
- "Copyright (C) 2002-2003, and put in the public domain, by Santa Claus.");
+ "Copyright (C) 2002-2004, and put in the public domain, by Santa Claus.");
VG_(details_bug_reports_to) ("san...@no...");
--- valgrind/helgrind/helgrind.h #1.6:1.7
@@ -12,5 +12,5 @@
data races in threaded programs.
- Copyright (C) 2002-2003 Nicholas Nethercote. All rights reserved.
+ Copyright (C) 2002-2004 Nicholas Nethercote. All rights reserved.
Redistribution and use in source and binary forms, with or without
--- valgrind/helgrind/hg_main.c #1.69:1.70
@@ -9,5 +9,5 @@
data races in threaded programs.
- Copyright (C) 2002-2003 Nicholas Nethercote
+ Copyright (C) 2002-2004 Nicholas Nethercote
nj...@ca...
@@ -3236,5 +3236,5 @@ void SK_(pre_clo_init)(void)
VG_(details_description) ("a data race detector");
VG_(details_copyright_author)(
- "Copyright (C) 2002-2003, and GNU GPL'd, by Nicholas Nethercote.");
+ "Copyright (C) 2002-2004, and GNU GPL'd, by Nicholas Nethercote.");
VG_(details_bug_reports_to) (VG_BUGS_TO);
VG_(details_avg_translation_sizeB) ( 115 );
--- valgrind/include/valgrind.h #1.23:1.24
@@ -13,5 +13,5 @@
emulator for monitoring program execution on x86-Unixes.
- Copyright (C) 2000-2003 Julian Seward. All rights reserved.
+ Copyright (C) 2000-2004 Julian Seward. All rights reserved.
Redistribution and use in source and binary forms, with or without
--- valgrind/include/vg_constants_skin.h #1.6:1.7
@@ -9,5 +9,5 @@
emulator for monitoring program execution on x86-Unixes.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/include/vg_kerneliface.h #1.10:1.11
@@ -10,5 +10,5 @@
emulator for monitoring program execution on x86-Unixes.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/include/vg_profile.c #1.9:1.10
@@ -11,5 +11,5 @@
emulator for monitoring program execution on x86-Unixes.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/include/vg_skin.h.base #1.5:1.6
@@ -1,3 +1,3 @@
-/* -*- c -*- */
+
/*--------------------------------------------------------------------*/
/*--- The only header your skin will ever need to #include... ---*/
@@ -9,5 +9,5 @@
emulator for monitoring program execution on x86-Unixes.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/lackey/lk_main.c #1.22:1.23
@@ -9,5 +9,5 @@
some simple program measurement.
- Copyright (C) 2002-2003 Nicholas Nethercote
+ Copyright (C) 2002-2004 Nicholas Nethercote
nj...@ca...
@@ -79,5 +79,5 @@ void SK_(pre_clo_init)(void)
VG_(details_description) ("an example Valgrind tool");
VG_(details_copyright_author)(
- "Copyright (C) 2002-2003, and GNU GPL'd, by Nicholas Nethercote.");
+ "Copyright (C) 2002-2004, and GNU GPL'd, by Nicholas Nethercote.");
VG_(details_bug_reports_to) (VG_BUGS_TO);
VG_(details_avg_translation_sizeB) ( 175 );
--- valgrind/lackey/docs/lk_main.html #1.3:1.4
@@ -32,5 +32,5 @@
<center>
<a href="mailto:nj...@ca...">nj...@ca...</a><br>
-Copyright © 2000-2003 Nicholas Nethercote
+Copyright © 2002-2004 Nicholas Nethercote
<p>
Lackey is licensed under the GNU General Public License,
--- valgrind/memcheck/mac_leakcheck.c #1.12:1.13
@@ -10,5 +10,5 @@
for detecting memory errors.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/memcheck/mac_malloc_wrappers.c #1.8:1.9
@@ -10,5 +10,5 @@
for detecting memory errors.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/memcheck/mac_needs.c #1.20:1.21
@@ -10,5 +10,5 @@
for detecting memory errors.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/memcheck/mac_replace_strmem.c #1.11:1.12
@@ -10,5 +10,5 @@
detecting memory errors.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/memcheck/mac_shared.h #1.15:1.16
@@ -10,5 +10,5 @@
for detecting memory errors.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/memcheck/mc_clientreqs.c #1.17:1.18
@@ -10,5 +10,5 @@
detecting memory errors.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/memcheck/mc_constants.h #1.3:1.4
@@ -8,5 +8,5 @@
detecting memory errors.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/memcheck/mc_errcontext.c #1.21:1.22
@@ -9,5 +9,5 @@
detecting memory errors.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/memcheck/mc_from_ucode.c #1.14:1.15
@@ -9,5 +9,5 @@
detecting memory errors.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/memcheck/mc_helpers.S #1.7:1.8
@@ -9,5 +9,5 @@
detecting memory errors.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/memcheck/mc_include.h #1.17:1.18
@@ -9,5 +9,5 @@
detecting memory errors.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/memcheck/mc_main.c #1.43:1.44
@@ -10,5 +10,5 @@
detecting memory errors.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
@@ -1656,5 +1656,5 @@ void SK_(pre_clo_init)(void)
VG_(details_description) ("a memory error detector");
VG_(details_copyright_author)(
- "Copyright (C) 2002-2003, and GNU GPL'd, by Julian Seward.");
+ "Copyright (C) 2002-2004, and GNU GPL'd, by Julian Seward.");
VG_(details_bug_reports_to) (VG_BUGS_TO);
VG_(details_avg_translation_sizeB) ( 228 );
--- valgrind/memcheck/mc_translate.c #1.32:1.33
@@ -1,3 +1,3 @@
-/* -*- c-basic-offset: 3 -*- */
+
/*--------------------------------------------------------------------*/
/*--- Instrument UCode to perform memory checking operations. ---*/
@@ -9,5 +9,5 @@
detecting memory errors.
- Copyright (C) 2000-2003 Julian Seward
+ Copyright (C) 2000-2004 Julian Seward
js...@ac...
--- valgrind/memcheck/memcheck.h #1.16:1.17
@@ -13,5 +13,5 @@
detecting memory errors.
- Copyright (C) 2002-2003 Julian Seward. All rights reserved.
+ Copyright (C) 2000-2004 Julian Seward. All rights reserved.
Redistribution and use in source and binary forms, with or without
--- valgrind/memcheck/docs/mc_techdocs.html #1.8:1.9
@@ -35,5 +35,5 @@
<a href="mailto:js...@ac...">js...@ac...</a><br>
<a href="http://valgrind.kde.org">http://valgrind.kde.org</a><br>
-Copyright © 2000-2003 Julian Seward
+Copyright © 2000-2004 Julian Seward
<p>
Valgrind is licensed under the GNU General Public License,
--- valgrind/none/nl_main.c #1.17:1.18
@@ -8,5 +8,5 @@
which does nothing.
- Copyright (C) 2002-2003 Nicholas Nethercote
+ Copyright (C) 2002-2004 Nicholas Nethercote
nj...@ca...
@@ -52,5 +52,5 @@ static void pre_clo_init(void)
VG_(details_description) ("a binary JIT-compiler");
VG_(details_copyright_author)(
- "Copyright (C) 2002-2003, and GNU GPL'd, by Nicholas Nethercote.");
+ "Copyright (C) 2002-2004, and GNU GPL'd, by Nicholas Nethercote.");
VG_(details_bug_reports_to) (VG_BUGS_TO);
--- valgrind/none/docs/nl_main.html #1.3:1.4
@@ -32,5 +32,5 @@
<center>
<a href="mailto:nj...@ca...">nj...@ca...</a><br>
-Copyright © 2000-2003 Nicholas Nethercote
+Copyright © 2000-2004 Nicholas Nethercote
<p>
Nulgrind is licensed under the GNU General Public License,
|
|
From: Julian S. <js...@ac...> - 2004-01-04 23:08:40
|
CVS commit by jseward:
In the fast sanity check for these tools which use shadow memory,
remove the test that the first page of memory is inaccessible. This
is now getting in the way.
Fixes #69886.
M +2 -15 addrcheck/ac_main.c 1.58
M +2 -16 helgrind/hg_main.c 1.71
M +2 -15 memcheck/mc_main.c 1.45
--- valgrind/addrcheck/ac_main.c #1.57:1.58
@@ -1143,21 +1143,8 @@ static void ac_detect_memory_leaks ( voi
------------------------------------------------------------------ */
-/* Check that nobody has spuriously claimed that the first or last 16
- pages (64 KB) of address space have become accessible. Failure of
- the following do not per se indicate an internal consistency
- problem, but they are so likely to that we really want to know
- about it if so. */
-
Bool SK_(cheap_sanity_check) ( void )
{
- if (IS_DISTINGUISHED_SM(primary_map[0])
- /* kludge: kernel drops a page up at top of address range for
- magic "optimized syscalls", so we can no longer check the
- highest page */
- /* && IS_DISTINGUISHED_SM(primary_map[65535]) */
- )
+ /* nothing useful we can rapidly check */
return True;
- else
- return False;
}
--- valgrind/helgrind/hg_main.c #1.70:1.71
@@ -2001,21 +2001,8 @@ void* SK_(realloc) ( void* p, Int new_si
/*--------------------------------------------------------------*/
-/* Check that nobody has spuriously claimed that the first or last 16
- pages (64 KB) of address space have become accessible. Failure of
- the following do not per se indicate an internal consistency
- problem, but they are so likely to that we really want to know
- about it if so. */
-
Bool SK_(cheap_sanity_check) ( void )
{
- if (VGE_IS_DISTINGUISHED_SM(primary_map[0])
- /* kludge: kernel drops a page up at top of address range for
- magic "optimized syscalls", so we can no longer check the
- highest page */
- /* && VGE_IS_DISTINGUISHED_SM(primary_map[65535]) */
- )
+ /* nothing useful we can rapidly check */
return True;
- else
- return False;
}
--- valgrind/memcheck/mc_main.c #1.44:1.45
@@ -1469,21 +1469,8 @@ void MC_(detect_memory_leaks) ( void )
------------------------------------------------------------------ */
-/* Check that nobody has spuriously claimed that the first or last 16
- pages (64 KB) of address space have become accessible. Failure of
- the following do not per se indicate an internal consistency
- problem, but they are so likely to that we really want to know
- about it if so. */
-
Bool SK_(cheap_sanity_check) ( void )
{
- if (IS_DISTINGUISHED_SM(primary_map[0])
- /* kludge: kernel drops a page up at top of address range for
- magic "optimized syscalls", so we can no longer check the
- highest page */
- /* && IS_DISTINGUISHED_SM(primary_map[65535]) */
- )
+ /* nothing useful we can rapidly check */
return True;
- else
- return False;
}
|
|
From: Julian S. <js...@ac...> - 2004-01-04 23:31:28
|
CVS commit by jseward:
Support for FXSAVE/FXRSTOR (Tom Hughes). Fixes #71180.
M +3 -3 addrcheck/ac_main.c 1.59
M +17 -7 cachegrind/cg_main.c 1.61
M +1 -1 coregrind/vg_from_ucode.c 1.72
M +19 -0 coregrind/vg_to_ucode.c 1.120
M +19 -17 coregrind/vg_translate.c 1.67
M +1 -1 include/vg_skin.h.base 1.8
M +3 -3 memcheck/mac_needs.c 1.22
M +2 -2 memcheck/mc_main.c 1.46
M +2 -2 memcheck/mc_translate.c 1.34
--- valgrind/addrcheck/ac_main.c #1.58:1.59
@@ -908,5 +908,5 @@ void ac_fpu_ACCESS_check ( Addr addr, In
}
- if (size == 16 || size == 10 || size == 28 || size == 108) {
+ if (size == 16 || size == 10 || size == 28 || size == 108 || size == 512) {
PROF_EVENT(94);
ac_fpu_ACCESS_check_SLOWLY ( addr, size, isWrite );
@@ -1056,6 +1056,6 @@ UCodeBlock* SK_(instrument)(UCodeBlock*
goto do_Access_ARG3;
do_Access_ARG3:
- sk_assert(u_in->size == 4
- || u_in->size == 8 || u_in->size == 16);
+ sk_assert(u_in->size == 4 || u_in->size == 8
+ || u_in->size == 16 || u_in->size == 512);
sk_assert(u_in->tag3 == TempReg);
t_addr = u_in->val3;
--- valgrind/cachegrind/cg_main.c #1.60:1.61
@@ -545,5 +545,5 @@ static Int compute_BBCC_array_size(UCode
case SSE2a_MemRd:
case SSE2a1_MemRd:
- sk_assert(u_in->size == 4 || u_in->size == 16);
+ sk_assert(u_in->size == 4 || u_in->size == 16 || u_in->size == 512);
t_read = u_in->val3;
is_FPU_R = True;
@@ -578,5 +578,5 @@ static Int compute_BBCC_array_size(UCode
case SSE2a_MemWr:
- sk_assert(u_in->size == 4 || u_in->size == 16);
+ sk_assert(u_in->size == 4 || u_in->size == 16 || u_in->size == 512);
t_write = u_in->val3;
is_FPU_W = True;
@@ -799,9 +799,14 @@ UCodeBlock* SK_(instrument)(UCodeBlock*
case SSE2a_MemRd:
case SSE2a1_MemRd:
- sk_assert(u_in->size == 4 || u_in->size == 16);
+ sk_assert(u_in->size == 4 || u_in->size == 16 || u_in->size == 512);
t_read = u_in->val3;
t_read_addr = newTemp(cb);
uInstr2(cb, MOV, 4, TempReg, u_in->val3, TempReg, t_read_addr);
- data_size = u_in->size;
+ /* 512 B data-sized instructions will be done inaccurately
+ * but they're very rare and this avoids errors from
+ * hitting more than two cache lines in the simulation. */
+ data_size = ( u_in->size <= MIN_LINE_SIZE
+ ? u_in->size
+ : MIN_LINE_SIZE);
VG_(copy_UInstr)(cb, u_in);
break;
@@ -857,12 +862,17 @@ UCodeBlock* SK_(instrument)(UCodeBlock*
case SSE2a_MemWr:
- sk_assert(u_in->size == 4 || u_in->size == 16);
+ sk_assert(u_in->size == 4 || u_in->size == 16 || u_in->size == 512);
/* fall through */
case SSE3a_MemWr:
- sk_assert(u_in->size == 4 || u_in->size == 8 || u_in->size == 16);
+ sk_assert(u_in->size == 4 || u_in->size == 8 || u_in->size == 16 || u_in->size == 512);
t_write = u_in->val3;
t_write_addr = newTemp(cb);
uInstr2(cb, MOV, 4, TempReg, u_in->val3, TempReg, t_write_addr);
- data_size = u_in->size;
+ /* 512 B data-sized instructions will be done inaccurately
+ * but they're very rare and this avoids errors from
+ * hitting more than two cache lines in the simulation. */
+ data_size = ( u_in->size <= MIN_LINE_SIZE
+ ? u_in->size
+ : MIN_LINE_SIZE);
VG_(copy_UInstr)(cb, u_in);
break;
--- valgrind/coregrind/vg_from_ucode.c #1.71:1.72
@@ -4076,5 +4076,5 @@ static void emitUInstr ( UCodeBlock* cb,
case SSE2a_MemWr:
case SSE2a_MemRd:
- vg_assert(u->size == 4 || u->size == 16);
+ vg_assert(u->size == 4 || u->size == 16 || u->size == 512);
vg_assert(u->tag1 == Lit16);
vg_assert(u->tag2 == Lit16);
--- valgrind/coregrind/vg_to_ucode.c #1.119:1.120
@@ -3546,6 +3546,25 @@ static Addr disInstr ( UCodeBlock* cb, A
UChar* insn = (UChar*)eip;
+ /* FXSAVE/FXRSTOR m32 -- load/store the FPU/MMX/SSE state. */
+ if (insn[0] == 0x0F && insn[1] == 0xAE
+ && (!epartIsReg(insn[2]))
+ && (gregOfRM(insn[2]) == 1 || gregOfRM(insn[2]) == 0) ) {
+ Bool store = gregOfRM(insn[2]) == 0;
+ vg_assert(sz == 4);
+ pair = disAMode ( cb, sorb, eip+2, dis?dis_buf:NULL );
+ t1 = LOW24(pair);
+ eip += 2+HI8(pair);
+ uInstr3(cb, store ? SSE2a_MemWr : SSE2a_MemRd, 512,
+ Lit16, (((UShort)insn[0]) << 8) | (UShort)insn[1],
+ Lit16, (UShort)insn[2],
+ TempReg, t1 );
+ if (dis)
+ VG_(printf)("fx%s %s\n", store ? "save" : "rstor", dis_buf );
+ goto decode_success;
+ }
+
/* STMXCSR/LDMXCSR m32 -- load/store the MXCSR register. */
if (insn[0] == 0x0F && insn[1] == 0xAE
+ && (!epartIsReg(insn[2]))
&& (gregOfRM(insn[2]) == 3 || gregOfRM(insn[2]) == 2) ) {
Bool store = gregOfRM(insn[2]) == 3;
--- valgrind/coregrind/vg_translate.c #1.66:1.67
@@ -415,5 +415,6 @@ Bool VG_(saneUInstr) ( Bool beforeRA, Bo
# define SZ48 (u->size == 4 || u->size == 8)
# define SZ416 (u->size == 4 || u->size == 16)
-# define SZsse (u->size == 4 || u->size == 8 || u->size == 16)
+# define SZsse2 (u->size == 4 || u->size == 16 || u->size == 512)
+# define SZsse3 (u->size == 4 || u->size == 8 || u->size == 16)
# define SZi (u->size == 4 || u->size == 2 || u->size == 1)
# define SZf ( u->size == 4 || u->size == 8 || u->size == 2 \
@@ -564,9 +565,9 @@ Bool VG_(saneUInstr) ( Bool beforeRA, Bo
/* Fields checked: lit32 size flags_r/w tag1 tag2 tag3 (rest) */
- case SSE2a_MemWr: return LIT0 && SZ416 && CC0 && Ls1 && Ls2 && TR3 && XOTHER;
- case SSE2a_MemRd: return LIT0 && SZ416 && CCa && Ls1 && Ls2 && TR3 && XOTHER;
+ case SSE2a_MemWr: return LIT0 && SZsse2 && CC0 && Ls1 && Ls2 && TR3 && XOTHER;
+ case SSE2a_MemRd: return LIT0 && SZsse2 && CCa && Ls1 && Ls2 && TR3 && XOTHER;
case SSE2a1_MemRd: return LIT0 && SZ416 && CC0 && Ls1 && Ls2 && TR3 && XOTHER;
- case SSE3a_MemWr: return LIT0 && SZsse && CC0 && Ls1 && Ls2 && TR3 && XOTHER;
- case SSE3a_MemRd: return LIT0 && SZsse && CCa && Ls1 && Ls2 && TR3 && XOTHER;
+ case SSE3a_MemWr: return LIT0 && SZsse3 && CC0 && Ls1 && Ls2 && TR3 && XOTHER;
+ case SSE3a_MemRd: return LIT0 && SZsse3 && CCa && Ls1 && Ls2 && TR3 && XOTHER;
case SSE3e_RegRd: return LIT0 && SZ4 && CC0 && Ls1 && Ls2 && TR3 && XOTHER;
case SSE3e_RegWr: return LIT0 && SZ4 && CC0 && Ls1 && Ls2 && TR3 && XOTHER;
@@ -603,5 +604,6 @@ Bool VG_(saneUInstr) ( Bool beforeRA, Bo
# undef SZ48
# undef SZ416
-# undef SZsse
+# undef SZsse2
+# undef SZsse3
# undef SZi
# undef SZf
--- valgrind/include/vg_skin.h.base #1.7:1.8
@@ -961,5 +961,5 @@
UShort val3; /* third operand */
UChar opcode; /* opcode */
- UChar size; /* data transfer size */
+ UShort size; /* data transfer size */
/* word 4 */
--- valgrind/memcheck/mac_needs.c #1.21:1.22
@@ -733,5 +733,5 @@ A 78 ACCESS1_SLOWLY
82 fpu_read aligned 8
83 fpu_read 2
- 84 fpu_read 10/28/108
+ 84 fpu_read 10/28/108/512
M 85 fpu_write
@@ -739,5 +739,5 @@ M 86 fpu_write aligned 4
M 87 fpu_write aligned 8
M 88 fpu_write 2
-M 89 fpu_write 10/28/108
+M 89 fpu_write 10/28/108/512
90 fpu_access
@@ -745,5 +745,5 @@ M 89 fpu_write 10/28/108
92 fpu_access aligned 8
93 fpu_access 2
- 94 fpu_access 10/28/108
+ 94 fpu_access 10/28/108/512
100 fpu_access_check_SLOWLY
--- valgrind/memcheck/mc_main.c #1.45:1.46
@@ -1191,5 +1191,5 @@ void MC_(fpu_read_check) ( Addr addr, In
if (size == 16 /*SSE*/
- || size == 10 || size == 28 || size == 108) {
+ || size == 10 || size == 28 || size == 108 || size == 512) {
PROF_EVENT(84);
mc_fpu_read_check_SLOWLY ( addr, size );
@@ -1274,5 +1274,5 @@ void MC_(fpu_write_check) ( Addr addr, I
if (size == 16 /*SSE*/
- || size == 10 || size == 28 || size == 108) {
+ || size == 10 || size == 28 || size == 108 || size == 512) {
PROF_EVENT(89);
mc_fpu_write_check_SLOWLY ( addr, size );
--- valgrind/memcheck/mc_translate.c #1.33:1.34
@@ -1113,6 +1113,6 @@ static UCodeBlock* memcheck_instrument (
Int t_size;
- sk_assert(u_in->size == 4
- || u_in->size == 8 || u_in->size == 16);
+ sk_assert(u_in->size == 4 || u_in->size == 8
+ || u_in->size == 16 || u_in->size == 512);
t_size = INVALID_TEMPREG;
|
|
From: Jeremy F. <je...@go...> - 2004-01-07 08:47:33
|
CVS commit by fitzhardinge:
Make badrw.c conform to C89; split things onto separate lines so it's
clear what the messages are talking about.
M +6 -6 addrcheck/tests/badrw.stderr.exp 1.4
M +18 -6 memcheck/tests/badrw.c 1.2
M +6 -6 memcheck/tests/badrw.stderr.exp 1.4
--- valgrind/memcheck/tests/badrw.c #1.1:1.2
@@ -5,12 +5,24 @@ int main(void)
void* x = malloc(10);
- int* x4 = x-4;
- short int* x2 = x-4;
- char* x1 = x-1;
+ int *x4;
+ short *x2;
+ char *x1;
+ int y4;
+ short y2;
+ char y1;
+
+ x4 = x-4;
+ x2 = x-4;
+ x1 = x-1;
// Invalid reads and writes of sizes 4, 2, 1
- int y4 = *x4; *x4 = y4;
- short int y2 = *x2; *x2 = y2;
- char y1 = *x1; *x1 = y1;
+ y4 = *x4;
+ *x4 = y4;
+
+ y2 = *x2;
+ *x2 = y2;
+
+ y1 = *x1;
+ *x1 = y1;
return 0;
--- valgrind/memcheck/tests/badrw.stderr.exp #1.3:1.4
@@ -1,4 +1,4 @@
Invalid read of size 4
- at 0x........: main (badrw.c:12)
+ at 0x........: main (badrw.c:19)
Address 0x........ is 4 bytes before a block of size 10 alloc'd
at 0x........: malloc (vg_replace_malloc.c:...)
@@ -6,5 +6,5 @@
Invalid write of size 4
- at 0x........: main (badrw.c:12)
+ at 0x........: main (badrw.c:20)
Address 0x........ is 4 bytes before a block of size 10 alloc'd
at 0x........: malloc (vg_replace_malloc.c:...)
@@ -12,5 +12,5 @@
Invalid read of size 2
- at 0x........: main (badrw.c:13)
+ at 0x........: main (badrw.c:22)
Address 0x........ is 4 bytes before a block of size 10 alloc'd
at 0x........: malloc (vg_replace_malloc.c:...)
@@ -18,5 +18,5 @@
Invalid write of size 2
- at 0x........: main (badrw.c:13)
+ at 0x........: main (badrw.c:23)
Address 0x........ is 4 bytes before a block of size 10 alloc'd
at 0x........: malloc (vg_replace_malloc.c:...)
@@ -24,5 +24,5 @@
Invalid read of size 1
- at 0x........: main (badrw.c:14)
+ at 0x........: main (badrw.c:25)
Address 0x........ is 1 bytes before a block of size 10 alloc'd
at 0x........: malloc (vg_replace_malloc.c:...)
@@ -30,5 +30,5 @@
Invalid write of size 1
- at 0x........: main (badrw.c:14)
+ at 0x........: main (badrw.c:26)
Address 0x........ is 1 bytes before a block of size 10 alloc'd
at 0x........: malloc (vg_replace_malloc.c:...)
--- valgrind/addrcheck/tests/badrw.stderr.exp #1.3:1.4
@@ -1,4 +1,4 @@
Invalid read of size 4
- at 0x........: main (badrw.c:12)
+ at 0x........: main (badrw.c:19)
Address 0x........ is 4 bytes before a block of size 10 alloc'd
at 0x........: malloc (vg_replace_malloc.c:...)
@@ -6,5 +6,5 @@
Invalid write of size 4
- at 0x........: main (badrw.c:12)
+ at 0x........: main (badrw.c:20)
Address 0x........ is 4 bytes before a block of size 10 alloc'd
at 0x........: malloc (vg_replace_malloc.c:...)
@@ -12,5 +12,5 @@
Invalid read of size 2
- at 0x........: main (badrw.c:13)
+ at 0x........: main (badrw.c:22)
Address 0x........ is 4 bytes before a block of size 10 alloc'd
at 0x........: malloc (vg_replace_malloc.c:...)
@@ -18,5 +18,5 @@
Invalid write of size 2
- at 0x........: main (badrw.c:13)
+ at 0x........: main (badrw.c:23)
Address 0x........ is 4 bytes before a block of size 10 alloc'd
at 0x........: malloc (vg_replace_malloc.c:...)
@@ -24,5 +24,5 @@
Invalid read of size 1
- at 0x........: main (badrw.c:14)
+ at 0x........: main (badrw.c:25)
Address 0x........ is 1 bytes before a block of size 10 alloc'd
at 0x........: malloc (vg_replace_malloc.c:...)
@@ -30,5 +30,5 @@
Invalid write of size 1
- at 0x........: main (badrw.c:14)
+ at 0x........: main (badrw.c:26)
Address 0x........ is 1 bytes before a block of size 10 alloc'd
at 0x........: malloc (vg_replace_malloc.c:...)
|
|
From: Jeremy F. <je...@go...> - 2004-01-07 08:48:15
|
CVS commit by fitzhardinge:
Fix "make dist"
M +1 -1 Makefile.am 1.62
M +1 -1 coregrind/arch/Makefile.am 1.3
--- valgrind/Makefile.am #1.61:1.62
@@ -40,5 +40,5 @@
EXTRA_DIST = $(val_DATA) \
FAQ.txt \
- PATCHES_APPLIED ACKNOWLEDGEMENTS \
+ ACKNOWLEDGEMENTS \
README_PACKAGERS \
README_MISSING_SYSCALL_OR_IOCTL TODO \
--- valgrind/coregrind/arch/Makefile.am #1.2:1.3
@@ -1,2 +1,2 @@
-
+DIST_SUBDIRS=x86-linux x86-freebsd
SUBDIRS=$(VG_PLATFORM)
|
|
From: Jeremy F. <je...@go...> - 2004-01-16 02:19:26
|
CVS commit by fitzhardinge:
Fix bug 72484. Set the process signal mask to match the client's before
running exec.
A none/tests/exec-sigmask.stderr.exp 1.1
M +2 -2 coregrind/vg_include.h 1.169
M +23 -0 coregrind/vg_syscalls.c 1.78
M +4 -1 none/tests/Makefile.am 1.21
--- valgrind/none/tests/Makefile.am #1.20:1.21
@@ -16,4 +16,6 @@
discard.stderr.exp discard.stdout.exp \
discard.vgtest \
+ exec-sigmask.vgtest
+ exec-sigmask.stdout.exp exec-sigmask.stderr.exp \
floored.stderr.exp floored.stdout.exp \
floored.vgtest \
@@ -45,5 +47,5 @@
check_PROGRAMS = \
args bitfield1 bt_everything bt_literal coolo_strlen \
- cpuid dastest discard floored fork fpu_lazy_eflags \
+ cpuid dastest discard exec-sigmask floored fork fpu_lazy_eflags \
fucomip munmap_exe map_unmap mremap rcl_assert \
rcrl readline1 resolv seg_override sha1_test shortpush shorts smc1 \
@@ -64,4 +66,5 @@
dastest_SOURCES = dastest_c.c dastest_s.s
discard_SOURCES = discard.c
+exec_sigmask_SOURCES = exec-sigmask.c
fork_SOURCES = fork.c
floored_SOURCES = floored.c
--- valgrind/coregrind/vg_syscalls.c #1.77:1.78
@@ -1878,4 +1878,27 @@ PRE(execve)
}
+ /* Set our real sigmask to match the client's sigmask so that the
+ exec'd child will get the right mask. First we need to clear
+ out any pending signals so they they don't get delivered, which
+ would confuse things.
+
+ XXX This is a bug - the signals should remain pending, and be
+ delivered to the new process after exec. There's also a
+ race-condition, since if someone delivers us a signal between
+ the sigprocmask and the execve, we'll still get the signal. Oh
+ well.
+ */
+ {
+ vki_ksigset_t allsigs;
+ vki_ksiginfo_t info;
+ static const struct vki_timespec zero = { 0, 0 };
+
+ VG_(ksigfillset)(&allsigs);
+ while(VG_(ksigtimedwait)(&allsigs, &info, &zero) > 0)
+ ;
+
+ VG_(ksigprocmask)(VKI_SIG_SETMASK, &tst->sig_mask, NULL);
+ }
+
res = VG_(do_syscall)(__NR_execve, arg1, arg2, arg3);
--- valgrind/coregrind/vg_include.h #1.168:1.169
@@ -765,6 +765,6 @@ typedef
vki_ksigset_t sig_mask;
- /* Effective signal mask. This is the mask which is currently
- applying; it may be different from sig_mask while a signal
+ /* Effective signal mask. This is the mask which currently
+ applies; it may be different from sig_mask while a signal
handler is running.
*/
|
|
From: Nicholas N. <nj...@ca...> - 2004-01-19 19:25:40
|
CVS commit by nethercote:
Patch from Tom Hughes, for bug 72643:
Patch to improve SSE/SS2 support
This patch should implement most of the missing SSE/SSE2 opcodes. About
the only ones it doesn't do are the MASKMOVxxx ones as they are quite
horrible and involved an implicit reference to EDI so I need to think
about them a bit more.
The patch also includes a set of tests for the MMX/SSE/SSE2 opcodes to
validate that they have the same effect under valgrind as they do when
run normally. In one or two cases this wasn't actually the case even
for some of the implemented opcodes, so I fixed those as well ;-)
M +2 -6 addrcheck/ac_main.c 1.60
M +6 -6 cachegrind/cg_main.c 1.62
M +129 -3 coregrind/vg_from_ucode.c 1.73
M +604 -72 coregrind/vg_to_ucode.c 1.122
M +16 -2 coregrind/vg_translate.c 1.68
M +26 -0 include/vg_skin.h.base 1.9
M +4 -1 memcheck/mc_translate.c 1.35
M +13 -1 none/tests/Makefile.am 1.22
M +3 -2 tests/Makefile.am 1.35
M +10 -2 tests/vg_regtest.in 1.18
--- valgrind/addrcheck/ac_main.c #1.59:1.60
@@ -1049,4 +1049,6 @@ UCodeBlock* SK_(instrument)(UCodeBlock*
case SSE3a_MemRd:
case SSE2a_MemRd:
+ case SSE3a1_MemRd:
+ case SSE2a1_MemRd:
helper = (Addr)ac_fpu_READ_check;
goto do_Access_ARG3;
@@ -1068,10 +1070,4 @@ UCodeBlock* SK_(instrument)(UCodeBlock*
break;
- case SSE2a1_MemRd:
- case SSE3a1_MemRd:
- VG_(pp_UInstr)(0,u_in);
- VG_(skin_panic)("AddrCheck: unhandled SSE uinstr");
- break;
-
case SSE3e1_RegRd:
case SSE3e_RegWr:
--- valgrind/cachegrind/cg_main.c #1.61:1.62
@@ -545,5 +545,5 @@ static Int compute_BBCC_array_size(UCode
case SSE2a_MemRd:
case SSE2a1_MemRd:
- sk_assert(u_in->size == 4 || u_in->size == 16 || u_in->size == 512);
+ sk_assert(u_in->size == 4 || u_in->size == 8 || u_in->size == 16 || u_in->size == 512);
t_read = u_in->val3;
is_FPU_R = True;
@@ -557,5 +557,5 @@ static Int compute_BBCC_array_size(UCode
case SSE3a1_MemRd:
- sk_assert(u_in->size == 16);
+ sk_assert(u_in->size == 8 || u_in->size == 16);
t_read = u_in->val3;
is_FPU_R = True;
@@ -578,5 +578,5 @@ static Int compute_BBCC_array_size(UCode
case SSE2a_MemWr:
- sk_assert(u_in->size == 4 || u_in->size == 16 || u_in->size == 512);
+ sk_assert(u_in->size == 4 || u_in->size == 8 || u_in->size == 16 || u_in->size == 512);
t_write = u_in->val3;
is_FPU_W = True;
@@ -799,5 +799,5 @@ UCodeBlock* SK_(instrument)(UCodeBlock*
case SSE2a_MemRd:
case SSE2a1_MemRd:
- sk_assert(u_in->size == 4 || u_in->size == 16 || u_in->size == 512);
+ sk_assert(u_in->size == 4 || u_in->size == 8 || u_in->size == 16 || u_in->size == 512);
t_read = u_in->val3;
t_read_addr = newTemp(cb);
@@ -822,5 +822,5 @@ UCodeBlock* SK_(instrument)(UCodeBlock*
case SSE3a1_MemRd:
- sk_assert(u_in->size == 16);
+ sk_assert(u_in->size == 8 || u_in->size == 16);
t_read = u_in->val3;
t_read_addr = newTemp(cb);
@@ -862,5 +862,5 @@ UCodeBlock* SK_(instrument)(UCodeBlock*
case SSE2a_MemWr:
- sk_assert(u_in->size == 4 || u_in->size == 16 || u_in->size == 512);
+ sk_assert(u_in->size == 4 || u_in->size == 8 || u_in->size == 16 || u_in->size == 512);
/* fall through */
case SSE3a_MemWr:
--- valgrind/coregrind/vg_from_ucode.c #1.72:1.73
@@ -1519,4 +1519,76 @@ static void emit_SSE2a ( FlagSet uses_sf
}
+static void emit_SSE2e1 ( FlagSet uses_sflags,
+ FlagSet sets_sflags,
+ UChar first_byte,
+ UChar second_byte,
+ UChar third_byte,
+ UChar fourth_byte,
+ Int ireg )
+{
+ VG_(new_emit)(True, uses_sflags, sets_sflags);
+ VG_(emitB) ( first_byte );
+ VG_(emitB) ( second_byte );
+ third_byte &= 0x38; /* mask out mod and rm fields */
+ third_byte |= 0xC0; /* set top two bits: mod = 11b */
+ third_byte |= (ireg & 7); /* patch in our ireg */
+ VG_(emitB) ( third_byte );
+ VG_(emitB) ( fourth_byte );
+ if (dis)
+ VG_(printf)(
+ "\n\t\tsse2e1--0x%x:0x%x:0x%x:0x%x-(%s)\n",
+ (UInt)first_byte, (UInt)second_byte,
+ (UInt)third_byte, (UInt)fourth_byte,
+ nameIReg(4,ireg)
+ );
+}
+
+static void emit_SSE2g1 ( FlagSet uses_sflags,
+ FlagSet sets_sflags,
+ UChar first_byte,
+ UChar second_byte,
+ UChar third_byte,
+ UChar fourth_byte,
+ Int ireg )
+{
+ VG_(new_emit)(True, uses_sflags, sets_sflags);
+ VG_(emitB) ( first_byte );
+ VG_(emitB) ( second_byte );
+ third_byte &= 0xC7; /* mask out reg field */
+ third_byte |= 0xC0; /* set top two bits: mod = 11b */
+ third_byte |= ((ireg & 7) << 3); /* patch in our ireg */
+ VG_(emitB) ( third_byte );
+ VG_(emitB) ( fourth_byte );
+ if (dis)
+ VG_(printf)(
+ "\n\t\tsse2g1_reg_wr--0x%x:0x%x:0x%x:0x%x-(%s)\n",
+ (UInt)first_byte, (UInt)second_byte,
+ (UInt)third_byte, (UInt)fourth_byte,
+ nameIReg(4,ireg)
+ );
+}
+
+static void emit_SSE2g ( FlagSet uses_sflags,
+ FlagSet sets_sflags,
+ UChar first_byte,
+ UChar second_byte,
+ UChar third_byte,
+ Int ireg )
+{
+ VG_(new_emit)(True, uses_sflags, sets_sflags);
+ VG_(emitB) ( first_byte );
+ VG_(emitB) ( second_byte );
+ third_byte &= 0xC7; /* mask out reg field */
+ third_byte |= 0xC0; /* set top two bits: mod = 11b */
+ third_byte |= ((ireg & 7) << 3); /* patch in our ireg */
+ VG_(emitB) ( third_byte );
+ if (dis)
+ VG_(printf)(
+ "\n\t\tsse2g--0x%x:0x%x:0x%x-(%s)\n",
+ (UInt)first_byte, (UInt)second_byte, (UInt)third_byte,
+ nameIReg(4,ireg)
+ );
+}
+
static void emit_SSE2a1 ( FlagSet uses_sflags,
FlagSet sets_sflags,
@@ -4076,5 +4148,6 @@ static void emitUInstr ( UCodeBlock* cb,
case SSE2a_MemWr:
case SSE2a_MemRd:
- vg_assert(u->size == 4 || u->size == 16 || u->size == 512);
+ vg_assert(u->size == 4 || u->size == 8
+ || u->size == 16 || u->size == 512);
vg_assert(u->tag1 == Lit16);
vg_assert(u->tag2 == Lit16);
@@ -4091,4 +4164,57 @@ static void emitUInstr ( UCodeBlock* cb,
break;
+ case SSE2g_RegWr:
+ vg_assert(u->size == 4);
+ vg_assert(u->tag1 == Lit16);
+ vg_assert(u->tag2 == Lit16);
+ vg_assert(u->tag3 == RealReg);
+ vg_assert(!anyFlagUse(u));
+ if (!(*sselive)) {
+ emit_get_sse_state();
+ *sselive = True;
+ }
+ emit_SSE2g ( u->flags_r, u->flags_w,
+ (u->val1 >> 8) & 0xFF,
+ u->val1 & 0xFF,
+ u->val2 & 0xFF,
+ u->val3 );
+ break;
+
+ case SSE2g1_RegWr:
+ vg_assert(u->size == 4);
+ vg_assert(u->tag1 == Lit16);
+ vg_assert(u->tag2 == Lit16);
+ vg_assert(u->tag3 == RealReg);
+ vg_assert(!anyFlagUse(u));
+ if (!(*sselive)) {
+ emit_get_sse_state();
+ *sselive = True;
+ }
+ emit_SSE2g1 ( u->flags_r, u->flags_w,
+ (u->val1 >> 8) & 0xFF,
+ u->val1 & 0xFF,
+ u->val2 & 0xFF,
+ u->lit32 & 0xFF,
+ u->val3 );
+ break;
+
+ case SSE2e1_RegRd:
+ vg_assert(u->size == 2);
+ vg_assert(u->tag1 == Lit16);
+ vg_assert(u->tag2 == Lit16);
+ vg_assert(u->tag3 == RealReg);
+ vg_assert(!anyFlagUse(u));
+ if (!(*sselive)) {
+ emit_get_sse_state();
+ *sselive = True;
+ }
+ emit_SSE2e1 ( u->flags_r, u->flags_w,
+ (u->val1 >> 8) & 0xFF,
+ u->val1 & 0xFF,
+ u->val2 & 0xFF,
+ u->lit32 & 0xFF,
+ u->val3 );
+ break;
+
case SSE2a1_MemRd:
vg_assert(u->size == 4 || u->size == 16);
@@ -4195,5 +4321,5 @@ static void emitUInstr ( UCodeBlock* cb,
case SSE3a1_MemRd:
- vg_assert(u->size == 16);
+ vg_assert(u->size == 8 || u->size == 16);
vg_assert(u->tag1 == Lit16);
vg_assert(u->tag2 == Lit16);
@@ -4209,5 +4335,5 @@ static void emitUInstr ( UCodeBlock* cb,
(u->val2 >> 8) & 0xFF,
u->val2 & 0xFF,
- (u->lit32 >> 8) & 0xFF,
+ u->lit32 & 0xFF,
u->val3 );
break;
--- valgrind/coregrind/vg_to_ucode.c #1.121:1.122
@@ -3398,4 +3398,191 @@ Addr dis_SSE2_load_store_or_mov ( UCodeB
}
+
+/* Simple SSE operations, either
+ op (src)xmmreg, (dst)mmxreg
+ or
+ op (src)address, (dst)mmxreg
+ 2 opcode bytes.
+ Supplied eip points to the first address mode byte.
+*/
+static
+Addr dis_SSE2_to_MMX ( UCodeBlock *cb,
+ UChar sorb,
+ Addr eip,
+ Int sz,
+ Char* name,
+ UChar opc1,
+ UChar opc2 )
+{
+ UChar dis_buf[50];
+ UChar modrm = getUChar(eip);
+ if (epartIsReg(modrm)) {
+ /* Completely internal SSE insn. */
+ uInstr2(cb, SSE3, 0, /* ignore sz for internal ops */
+ Lit16, (((UShort)opc1) << 8) | (UShort)opc2,
+ Lit16, (UShort)modrm );
+ if (dis)
+ VG_(printf)("%s %s, %s\n", name,
+ nameXMMReg(eregOfRM(modrm)),
+ nameMMXReg(gregOfRM(modrm)) );
+ eip++;
+ } else {
+ UInt pair = disAMode ( cb, sorb, eip, dis?dis_buf:NULL );
+ Int tmpa = LOW24(pair);
+ eip += HI8(pair);
+ uInstr3(cb, SSE2a_MemRd, sz,
+ Lit16, (((UShort)(opc1)) << 8) | ((UShort)opc2),
+ Lit16, ((UShort)modrm),
+ TempReg, tmpa);
+ if (dis)
+ VG_(printf)("%s %s, %s\n",
+ name,
+ dis_buf,
+ nameMMXReg(gregOfRM(modrm)));
+ }
+ return eip;
+}
+
+
+/* Simple SSE operations, either
+ op (src)mmxreg, (dst)xmmreg
+ or
+ op (src)address, (dst)xmmreg
+ 2 opcode bytes.
+ Supplied eip points to the first address mode byte.
+*/
+static
+Addr dis_SSE2_from_MMX ( UCodeBlock *cb,
+ UChar sorb,
+ Addr eip,
+ Int sz,
+ Char* name,
+ UChar opc1,
+ UChar opc2 )
+{
+ UChar dis_buf[50];
+ UChar modrm = getUChar(eip);
+ if (epartIsReg(modrm)) {
+ /* Completely internal SSE insn. */
+ uInstr2(cb, SSE3, 0, /* ignore sz for internal ops */
+ Lit16, (((UShort)opc1) << 8) | (UShort)opc2,
+ Lit16, (UShort)modrm );
+ if (dis)
+ VG_(printf)("%s %s, %s\n", name,
+ nameMMXReg(eregOfRM(modrm)),
+ nameXMMReg(gregOfRM(modrm)) );
+ eip++;
+ } else {
+ UInt pair = disAMode ( cb, sorb, eip, dis?dis_buf:NULL );
+ Int tmpa = LOW24(pair);
+ eip += HI8(pair);
+ uInstr3(cb, SSE2a_MemRd, sz,
+ Lit16, (((UShort)(opc1)) << 8) | ((UShort)opc2),
+ Lit16, ((UShort)modrm),
+ TempReg, tmpa);
+ if (dis)
+ VG_(printf)("%s %s, %s\n",
+ name,
+ dis_buf,
+ nameXMMReg(gregOfRM(modrm)));
+ }
+ return eip;
+}
+
+
+/* Simple SSE operations, either
+ op (src)xmmreg, (dst)mmxreg
+ or
+ op (src)address, (dst)mmxreg
+ 3 opcode bytes.
+ Supplied eip points to the first address mode byte.
+*/
+static
+Addr dis_SSE3_to_MMX ( UCodeBlock *cb,
+ UChar sorb,
+ Addr eip,
+ Int sz,
+ Char* name,
+ UChar opc1,
+ UChar opc2,
+ UChar opc3 )
+{
+ UChar dis_buf[50];
+ UChar modrm = getUChar(eip);
+ if (epartIsReg(modrm)) {
+ /* Completely internal SSE insn. */
+ uInstr2(cb, SSE4, 0, /* ignore sz for internal ops */
+ Lit16, (((UShort)opc1) << 8) | (UShort)opc2,
+ Lit16, (((UShort)opc3) << 8) | (UShort)modrm );
+ if (dis)
+ VG_(printf)("%s %s, %s\n", name,
+ nameXMMReg(eregOfRM(modrm)),
+ nameMMXReg(gregOfRM(modrm)) );
+ eip++;
+ } else {
+ UInt pair = disAMode ( cb, sorb, eip, dis?dis_buf:NULL );
+ Int tmpa = LOW24(pair);
+ eip += HI8(pair);
+ uInstr3(cb, SSE3a_MemRd, sz,
+ Lit16, (((UShort)(opc1)) << 8) | ((UShort)opc2),
+ Lit16, (((UShort)(opc3)) << 8) | ((UShort)modrm),
+ TempReg, tmpa);
+ if (dis)
+ VG_(printf)("%s %s, %s\n",
+ name,
+ dis_buf,
+ nameMMXReg(gregOfRM(modrm)));
+ }
+ return eip;
+}
+
+
+/* Simple SSE operations, either
+ op (src)mmxreg, (dst)xmmreg
+ or
+ op (src)address, (dst)xmmreg
+ 3 opcode bytes.
+ Supplied eip points to the first address mode byte.
+*/
+static
+Addr dis_SSE3_from_MMX ( UCodeBlock *cb,
+ UChar sorb,
+ Addr eip,
+ Int sz,
+ Char* name,
+ UChar opc1,
+ UChar opc2,
+ UChar opc3 )
+{
+ UChar dis_buf[50];
+ UChar modrm = getUChar(eip);
+ if (epartIsReg(modrm)) {
+ /* Completely internal SSE insn. */
+ uInstr2(cb, SSE4, 0, /* ignore sz for internal ops */
+ Lit16, (((UShort)opc1) << 8) | (UShort)opc2,
+ Lit16, (((UShort)opc3) << 8) | (UShort)modrm );
+ if (dis)
+ VG_(printf)("%s %s, %s\n", name,
+ nameMMXReg(eregOfRM(modrm)),
+ nameXMMReg(gregOfRM(modrm)) );
+ eip++;
+ } else {
+ UInt pair = disAMode ( cb, sorb, eip, dis?dis_buf:NULL );
+ Int tmpa = LOW24(pair);
+ eip += HI8(pair);
+ uInstr3(cb, SSE3a_MemRd, sz,
+ Lit16, (((UShort)(opc1)) << 8) | ((UShort)opc2),
+ Lit16, (((UShort)(opc3)) << 8) | ((UShort)modrm),
+ TempReg, tmpa);
+ if (dis)
+ VG_(printf)("%s %s, %s\n",
+ name,
+ dis_buf,
+ nameXMMReg(gregOfRM(modrm)));
+ }
+ return eip;
+}
+
+
static
void dis_push_segreg ( UCodeBlock* cb, UInt sreg, Int sz )
@@ -3597,4 +3784,55 @@ static Addr disInstr ( UCodeBlock* cb, A
}
+ /* CLFLUSH -- flush cache line */
+ if (insn[0] == 0x0F && insn[1] == 0xAE
+ && (!epartIsReg(insn[2]))
+ && (gregOfRM(insn[2]) == 7))
+ {
+ vg_assert(sz == 4);
+ pair = disAMode ( cb, sorb, eip+2, dis?dis_buf:NULL );
+ t1 = LOW24(pair);
+ eip += 2+HI8(pair);
+ uInstr3(cb, SSE2a_MemRd, 0, /* ignore sz for internal ops */
+ Lit16, (((UShort)0x0F) << 8) | (UShort)0xAE,
+ Lit16, (UShort)insn[2],
+ TempReg, t1 );
+ if (dis)
+ VG_(printf)("clflush %s\n", dis_buf);
+ goto decode_success;
+ }
+
+ /* CVTPI2PS (0x0F,0x2A) -- mm/m64, xmm */
+ /* CVTPI2PD (0x66,0x0F,0x2A) -- mm/m64, xmm */
+ if (insn[0] == 0x0F && insn[1] == 0x2A) {
+ if (sz == 4) {
+ eip = dis_SSE2_from_MMX
+ ( cb, sorb, eip+2, 8, "cvtpi2ps",
+ insn[0], insn[1] );
+ } else {
+ eip = dis_SSE3_from_MMX
+ ( cb, sorb, eip+2, 8, "cvtpi2pd",
+ 0x66, insn[0], insn[1] );
+ }
+ goto decode_success;
+ }
+
+ /* CVTTPS2PI (0x0F,0x2C) -- xmm/m64, mm */
+ /* CVTPS2PI (0x0F,0x2D) -- xmm/m64, mm */
+ /* CVTTPD2PI (0x66,0x0F,0x2C) -- xmm/m128, mm */
+ /* CVTPD2PI (0x66,0x0F,0x2D) -- xmm/m128, mm */
+ if (insn[0] == 0x0F
+ && (insn[1] == 0x2C || insn[1] == 0x2D)) {
+ if (sz == 4) {
+ eip = dis_SSE2_to_MMX
+ ( cb, sorb, eip+2, 8, "cvt{t}ps2pi",
+ insn[0], insn[1] );
+ } else {
+ eip = dis_SSE3_to_MMX
+ ( cb, sorb, eip+2, 16, "cvt{t}pd2pi",
+ 0x66, insn[0], insn[1] );
+ }
+ goto decode_success;
+ }
+
/* CVTTSD2SI (0xF2,0x0F,0x2C) -- convert a double-precision float
value in memory or xmm reg to int and put it in an ireg.
@@ -3696,4 +3934,18 @@ static Addr disInstr ( UCodeBlock* cb, A
}
+ /* CVTPS2PD -- convert two packed floats to two packed doubles. */
+ /* 0x66: CVTPD2PS -- convert two packed doubles to two packed floats. */
+ if (insn[0] == 0x0F && insn[1] == 0x5A) {
+ vg_assert(sz == 2 || sz == 4);
+ if (sz == 4) {
+ eip = dis_SSE2_reg_or_mem ( cb, sorb, eip+2, 8, "cvtps2pd",
+ insn[0], insn[1] );
+ } else {
+ eip = dis_SSE3_reg_or_mem ( cb, sorb, eip+2, 16, "cvtpd2ps",
+ 0x66, insn[0], insn[1] );
+ }
+ goto decode_success;
+ }
+
/* CVTSS2SD -- convert one single float to double. */
if (insn[0] == 0xF3 && insn[1] == 0x0F && insn[2] == 0x5A) {
@@ -3712,4 +3964,58 @@ static Addr disInstr ( UCodeBlock* cb, A
}
+ /* CVTDQ2PS -- convert four ints to four packed floats. */
+ /* 0x66: CVTPS2DQ -- convert four packed floats to four ints. */
+ if (insn[0] == 0x0F && insn[1] == 0x5B) {
+ vg_assert(sz == 2 || sz == 4);
+ if (sz == 4) {
+ eip = dis_SSE2_reg_or_mem ( cb, sorb, eip+2, 16, "cvtdq2ps",
+ insn[0], insn[1] );
+ } else {
+ eip = dis_SSE3_reg_or_mem ( cb, sorb, eip+2, 16, "cvtps2dq",
+ 0x66, insn[0], insn[1] );
+ }
+ goto decode_success;
+ }
+
+ /* CVTPD2DQ -- convert two packed doubles to two ints. */
+ if (sz == 2
+ && insn[0] == 0x0F && insn[1] == 0xE6) {
+ eip = dis_SSE3_reg_or_mem ( cb, sorb, eip+2, 8, "cvtpd2dq",
+ 0x66, insn[0], insn[1] );
+ goto decode_success;
+ }
+
+ /* CVTTPD2DQ -- convert two packed doubles to two ints with truncation. */
+ if (insn[0] == 0xF2 && insn[1] == 0x0F && insn[2] == 0xE6) {
+ vg_assert(sz == 4);
+ eip = dis_SSE3_reg_or_mem ( cb, sorb, eip+3, 8, "cvttpd2dq",
+ insn[0], insn[1], insn[2] );
+ goto decode_success;
+ }
+
+ /* CVTDQ2PD -- convert two ints to two packed doubles. */
+ if (insn[0] == 0xF3 && insn[1] == 0x0F && insn[2] == 0xE6) {
+ vg_assert(sz == 4);
+ eip = dis_SSE3_reg_or_mem ( cb, sorb, eip+3, 8, "cvtdq2pd",
+ insn[0], insn[1], insn[2] );
+ goto decode_success;
+ }
+
+ /* CVTTPS2DQ -- convert four packed floats to four ints with truncation. */
+ if (insn[0] == 0xF3 && insn[1] == 0x0F && insn[2] == 0x5B) {
+ vg_assert(sz == 4);
+ eip = dis_SSE3_reg_or_mem ( cb, sorb, eip+3, 16, "cvttps2dq",
+ insn[0], insn[1], insn[2] );
+ goto decode_success;
+ }
+
+ /* CMPSS -- compare scalar floats. */
+ if (insn[0] == 0xF3 && insn[1] == 0x0F && insn[2] == 0xC2) {
+ vg_assert(sz == 4);
+ eip = dis_SSE3_reg_or_mem_Imm8 ( cb, sorb, eip+3, 8, "cmpss",
+ insn[0], insn[1], insn[2] );
+ goto decode_success;
+ }
+
/* CMPSD -- compare scalar doubles. */
if (insn[0] == 0xF2 && insn[1] == 0x0F && insn[2] == 0xC2) {
@@ -3743,4 +4049,20 @@ static Addr disInstr ( UCodeBlock* cb, A
}
+ /* PSHUFLW */
+ if (insn[0] == 0xF2 && insn[1] == 0x0F && insn[2] == 0x70) {
+ eip = dis_SSE3_reg_or_mem_Imm8 ( cb, sorb, eip+3, 16,
+ "pshuflw",
+ insn[0], insn[1], insn[2] );
+ goto decode_success;
+ }
+
+ /* PSHUFHW */
+ if (insn[0] == 0xF3 && insn[1] == 0x0F && insn[2] == 0x70) {
+ eip = dis_SSE3_reg_or_mem_Imm8 ( cb, sorb, eip+3, 16,
+ "pshufhw",
+ insn[0], insn[1], insn[2] );
+ goto decode_success;
+ }
+
/* PSHUFW */
if (sz == 4
@@ -3883,4 +4205,18 @@ static Addr disInstr ( UCodeBlock* cb, A
}
+ /* MINPS */
+ /* 0x66: MINPD */
+ if (insn[0] == 0x0F && insn[1] == 0x5D) {
+ vg_assert(sz == 4 || sz == 2);
+ if (sz == 4) {
+ eip = dis_SSE2_reg_or_mem ( cb, sorb, eip+2, 16, "minps",
+ insn[0], insn[1] );
+ } else {
+ eip = dis_SSE3_reg_or_mem ( cb, sorb, eip+2, 16, "minpd",
+ 0x66, insn[0], insn[1] );
+ }
+ goto decode_success;
+ }
+
/* 0xF3: MAXSD */
/* 0xF3: MAXSS */
@@ -3945,9 +4281,15 @@ static Addr disInstr ( UCodeBlock* cb, A
}
- /* ORPD (src)xmmreg-or-mem, (dst)xmmreg */
- if (sz == 2
- && insn[0] == 0x0F && insn[1] == 0x56) {
+ /* ORPS */
+ /* 0x66: ORPD (src)xmmreg-or-mem, (dst)xmmreg */
+ if (insn[0] == 0x0F && insn[1] == 0x56) {
+ vg_assert(sz == 4 || sz == 2);
+ if (sz == 4) {
+ eip = dis_SSE2_reg_or_mem ( cb, sorb, eip+2, 16, "orps",
+ insn[0], insn[1] );
+ } else {
eip = dis_SSE3_reg_or_mem ( cb, sorb, eip+2, 16, "orpd",
0x66, insn[0], insn[1] );
+ }
goto decode_success;
}
@@ -4014,10 +4356,10 @@ static Addr disInstr ( UCodeBlock* cb, A
goto decode_success;
}
- /* 0xE0: PAVGB(src)xmmreg-or-mem, (dst)xmmreg, size 4 */
- if (sz == 4
- && insn[0] == 0x0F
- && insn[1] == 0xE0 ) {
- eip = dis_SSE2_reg_or_mem ( cb, sorb, eip+2, 16, "pavg{b,w}",
- insn[0], insn[1] );
+
+ /* 0xF6: PSADBW(src)xmmreg-or-mem, (dst)xmmreg */
+ if (sz == 2
+ && insn[0] == 0x0F && insn[1] == 0xF6) {
+ eip = dis_SSE3_reg_or_mem ( cb, sorb, eip+2, 16, "psadbw",
+ 0x66, insn[0], insn[1] );
goto decode_success;
}
@@ -4026,9 +4368,11 @@ static Addr disInstr ( UCodeBlock* cb, A
/* 0x61: PUNPCKLWD (src)xmmreg-or-mem, (dst)xmmreg */
/* 0x62: PUNPCKLDQ (src)xmmreg-or-mem, (dst)xmmreg */
+ /* 0x6C: PUNPCKQLQDQ (src)xmmreg-or-mem, (dst)xmmreg */
if (sz == 2
&& insn[0] == 0x0F
- && (insn[1] == 0x60 || insn[1] == 0x61 || insn[1] == 0x62)) {
+ && (insn[1] == 0x60 || insn[1] == 0x61
+ || insn[1] == 0x62 || insn[1] == 0x6C)) {
eip = dis_SSE3_reg_or_mem ( cb, sorb, eip+2, 16,
- "punpckl{bw,wd,dq}",
+ "punpckl{bw,wd,dq,qdq}",
0x66, insn[0], insn[1] );
goto decode_success;
@@ -4038,9 +4382,11 @@ static Addr disInstr ( UCodeBlock* cb, A
/* 0x69: PUNPCKHWD (src)xmmreg-or-mem, (dst)xmmreg */
/* 0x6A: PUNPCKHDQ (src)xmmreg-or-mem, (dst)xmmreg */
+ /* 0x6D: PUNPCKHQDQ (src)xmmreg-or-mem, (dst)xmmreg */
if (sz == 2
&& insn[0] == 0x0F
- && (insn[1] == 0x68 || insn[1] == 0x69 || insn[1] == 0x6A)) {
+ && (insn[1] == 0x68 || insn[1] == 0x69
+ || insn[1] == 0x6A || insn[1] == 0x6D)) {
eip = dis_SSE3_reg_or_mem ( cb, sorb, eip+2, 16,
- "punpckh{bw,wd,dq}",
+ "punpckh{bw,wd,dq,qdq}",
0x66, insn[0], insn[1] );
goto decode_success;
@@ -4143,10 +4489,19 @@ static Addr disInstr ( UCodeBlock* cb, A
}
+ /* 0xE4: PMULHUW(src)xmmreg-or-mem, (dst)xmmreg */
/* 0xE5: PMULHW(src)xmmreg-or-mem, (dst)xmmreg */
/* 0xD5: PMULLW(src)xmmreg-or-mem, (dst)xmmreg */
if (sz == 2
&& insn[0] == 0x0F
- && (insn[1] == 0xE5 || insn[1] == 0xD5)) {
- eip = dis_SSE3_reg_or_mem ( cb, sorb, eip+2, 16, "pmul{h,l}w",
+ && (insn[1] == 0xE4 || insn[1] == 0xE5 || insn[1] == 0xD5)) {
+ eip = dis_SSE3_reg_or_mem ( cb, sorb, eip+2, 16, "pmul{hu,h,l}w",
+ 0x66, insn[0], insn[1] );
+ goto decode_success;
+ }
+
+ /* 0xD5: PMULUDQ(src)xmmreg-or-mem, (dst)xmmreg */
+ if (sz == 2
+ && insn[0] == 0x0F && insn[1] == 0xF4) {
+ eip = dis_SSE3_reg_or_mem ( cb, sorb, eip+2, 16, "pmuludq",
0x66, insn[0], insn[1] );
goto decode_success;
@@ -4292,4 +4647,24 @@ static Addr disInstr ( UCodeBlock* cb, A
}
+ /* MOVDQ2Q -- move low 4 bytes of XMM reg to MMX reg. */
+ if (insn[0] == 0xF2
+ && insn[1] == 0x0F
+ && insn[2] == 0xD6) {
+ eip = dis_SSE3_to_MMX
+ ( cb, sorb, eip+3, 8, "movdq2q",
+ insn[0], insn[1], insn[2] );
+ goto decode_success;
+ }
+
+ /* MOVQ2DQ -- move MMX reg to low 4 bytes of XMM reg. */
+ if (insn[0] == 0xF3
+ && insn[1] == 0x0F
+ && insn[2] == 0xD6) {
+ eip = dis_SSE3_from_MMX
+ ( cb, sorb, eip+3, 8, "movq2dq",
+ insn[0], insn[1], insn[2] );
+ goto decode_success;
+ }
+
/* MOVSS -- move 4 bytes of XMM reg to/from XMM reg or mem. */
if (insn[0] == 0xF3
@@ -4357,17 +4732,4 @@ static Addr disInstr ( UCodeBlock* cb, A
}
- /* MOVLPD -- 8-byte load/store. */
- if (sz == 2
- && insn[0] == 0x0F
- && (insn[1] == 0x12 || insn[1] == 0x13)) {
- Bool is_store = insn[1]==0x13;
- /* Cannot be used for reg-reg moves, according to Intel docs. */
- vg_assert(!epartIsReg(insn[2]));
- eip = dis_SSE3_load_store_or_mov
- (cb, sorb, eip+2, 8, is_store, "movlpd",
- 0x66, insn[0], insn[1] );
- goto decode_success;
- }
-
/* MOVDQU -- unaligned 16-byte load/store. */
if (insn[0] == 0xF3
@@ -4523,18 +4885,4 @@ static Addr disInstr ( UCodeBlock* cb, A
}
- /* MOVLPS -- 8-byte load/store. How is this different from MOVLPS
- ? */
- if (insn[0] == 0x0F
- && (insn[1] == 0x12 || insn[1] == 0x13)) {
- Bool is_store = insn[1]==0x13;
- vg_assert(sz == 4);
- /* Cannot be used for reg-reg moves, according to Intel docs. */
- // vg_assert(!epartIsReg(insn[2]));
- eip = dis_SSE2_load_store_or_mov
- (cb, sorb, eip+2, 8, is_store, "movlps",
- insn[0], insn[1] );
- goto decode_success;
- }
-
/* 0xF3: RCPSS -- reciprocal of scalar float */
if (insn[0] == 0xF3 && insn[1] == 0x0F && insn[2] == 0x53) {
@@ -4548,5 +4896,8 @@ static Addr disInstr ( UCodeBlock* cb, A
/* MOVMSKPD -- extract 2 sign bits from a xmm reg and copy them to
an ireg. Top 30 bits of ireg are set to zero. */
- if (sz == 2 && insn[0] == 0x0F && insn[1] == 0x50) {
+ /* MOVMSKPS -- extract 4 sign bits from a xmm reg and copy them to
+ an ireg. Top 28 bits of ireg are set to zero. */
+ if (insn[0] == 0x0F && insn[1] == 0x50) {
+ vg_assert(sz == 4 || sz == 2);
modrm = insn[2];
/* Intel docs don't say anything about a memory source being
@@ -4554,4 +4905,11 @@ static Addr disInstr ( UCodeBlock* cb, A
vg_assert(epartIsReg(modrm));
t1 = newTemp(cb);
+ if (sz == 4) {
+ uInstr3(cb, SSE2g_RegWr, 4,
+ Lit16, (((UShort)insn[0]) << 8) | (UShort)insn[1],
+ Lit16, (UShort)modrm,
+ TempReg, t1 );
+ uInstr2(cb, PUT, 4, TempReg, t1, ArchReg, gregOfRM(modrm));
+ } else {
uInstr3(cb, SSE3g_RegWr, 4,
Lit16, (((UShort)0x66) << 8) | (UShort)insn[0],
@@ -4559,6 +4917,8 @@ static Addr disInstr ( UCodeBlock* cb, A
TempReg, t1 );
uInstr2(cb, PUT, 4, TempReg, t1, ArchReg, gregOfRM(modrm));
+ }
if (dis)
- VG_(printf)("movmskpd %s, %s\n",
+ VG_(printf)("movmskp%c %s, %s\n",
+ sz == 4 ? 's' : 'd',
nameXMMReg(eregOfRM(modrm)),
nameIReg(4,gregOfRM(modrm)));
@@ -4581,14 +4941,53 @@ static Addr disInstr ( UCodeBlock* cb, A
}
- /* MOVHPD -- 8-byte load/store. */
- if (sz == 2
- && insn[0] == 0x0F
+ /* MOVHLPS -- move two packed floats from high quadword to low quadword */
+ /* MOVLPS -- load/store two packed floats to/from low quadword. */
+ /* MOVLPD -- load/store packed double to/from low quadword. */
+ if (insn[0] == 0x0F
+ && (insn[1] == 0x12 || insn[1] == 0x13)) {
+ Bool is_store = insn[1]==0x13;
+ vg_assert(sz == 4 || sz == 2);
+ if (sz == 4) {
+ if (epartIsReg(insn[2])) {
+ vg_assert(insn[1]==0x12);
+ eip = dis_SSE2_reg_or_mem ( cb, sorb, eip+2, 16, "movhlps",
+ insn[0], insn[1] );
+ } else {
+ eip = dis_SSE2_load_store_or_mov
+ (cb, sorb, eip+2, 8, is_store, "movlps",
+ insn[0], insn[1] );
+ }
+ } else {
+ vg_assert(!epartIsReg(insn[2]));
+ eip = dis_SSE3_load_store_or_mov
+ (cb, sorb, eip+2, 8, is_store, "movlpd",
+ 0x66, insn[0], insn[1] );
+ }
+ goto decode_success;
+ }
+
+ /* MOVLHPS -- move two packed floats from low quadword to high quadword */
+ /* MOVHPS -- load/store two packed floats to/from high quadword. */
+ /* MOVHPD -- load/store packed double to/from high quadword. */
+ if (insn[0] == 0x0F
&& (insn[1] == 0x16 || insn[1] == 0x17)) {
Bool is_store = insn[1]==0x17;
- /* Cannot be used for reg-reg moves, according to Intel docs. */
+ vg_assert(sz == 4 || sz == 2);
+ if (sz == 4) {
+ if (epartIsReg(insn[2])) {
+ vg_assert(insn[1]==0x16);
+ eip = dis_SSE2_reg_or_mem ( cb, sorb, eip+2, 16, "movlhps",
+ insn[0], insn[1] );
+ } else {
+ eip = dis_SSE2_load_store_or_mov
+ (cb, sorb, eip+2, 8, is_store, "movhps",
+ insn[0], insn[1] );
+ }
+ } else {
vg_assert(!epartIsReg(insn[2]));
eip = dis_SSE3_load_store_or_mov
(cb, sorb, eip+2, 8, is_store, "movhpd",
0x66, insn[0], insn[1] );
+ }
goto decode_success;
}
@@ -4615,26 +5014,26 @@ static Addr disInstr ( UCodeBlock* cb, A
}
- /* CVTDQ2PD -- convert one single double. to float. */
- if (insn[0] == 0xF3 && insn[1] == 0x0F && insn[2] == 0xE6) {
- vg_assert(sz == 4);
- eip = dis_SSE3_reg_or_mem ( cb, sorb, eip+3, 8, "cvtdq2pd",
- insn[0], insn[1], insn[2] );
- goto decode_success;
- }
-
- /* CVTPD2PS -- convert two doubles to two floats. */
- if (sz == 2 &&
- insn[0] == 0x0F && insn[1] == 0x5A) {
- eip = dis_SSE3_reg_or_mem ( cb, sorb, eip+2, 16, "cvtpd2ps",
+ /* sz==4: SQRTPS: square root of packed float. */
+ /* sz==2: SQRTPD: square root of packed double. */
+ if (insn[0] == 0x0F && insn[1] == 0x51) {
+ vg_assert(sz == 2 || sz == 4);
+ if (sz == 4) {
+ eip = dis_SSE2_reg_or_mem ( cb, sorb, eip+2, 16,
+ "sqrtps",
+ insn[0], insn[1] );
+ } else {
+ eip = dis_SSE3_reg_or_mem ( cb, sorb, eip+2, 16,
+ "sqrtpd",
0x66, insn[0], insn[1] );
+ }
goto decode_success;
}
- /* SQRTPD: square root of packed double. */
- if (sz == 2
- && insn[0] == 0x0F && insn[1] == 0x51) {
- eip = dis_SSE3_reg_or_mem ( cb, sorb, eip+2, 16,
- "sqrtpd",
- 0x66, insn[0], insn[1] );
+ /* RSQRTPS: square root reciprocal of packed float. */
+ if (insn[0] == 0x0F && insn[1] == 0x52) {
+ vg_assert(sz == 4);
+ eip = dis_SSE2_reg_or_mem ( cb, sorb, eip+2, 16,
+ "rsqrtps",
+ insn[0], insn[1] );
goto decode_success;
}
@@ -6073,4 +6472,22 @@ static Addr disInstr ( UCodeBlock* cb, A
break;
+ /* =-=-=-=-=-=-=-=-=-=-= MOVNTI -=-=-=-=-=-=-=-=-= */
+
+ case 0xC3: /* MOVNTI Gv,Ev */
+ vg_assert(sz == 4);
+ modrm = getUChar(eip);
+ vg_assert(!epartIsReg(modrm));
+ t1 = newTemp(cb);
+ uInstr2(cb, GET, 4, ArchReg, gregOfRM(modrm), TempReg, t1);
+ pair = disAMode ( cb, sorb, eip, dis?dis_buf:NULL );
+ t2 = LOW24(pair);
+ eip += HI8(pair);
+ uInstr2(cb, STORE, 4, TempReg, t1, TempReg, t2);
+ if (dis)
+ VG_(printf)("movnti %s,%s\n",
+ nameIReg(4,gregOfRM(modrm)),
+ dis_buf);
+ break;
+
/* =-=-=-=-=-=-=-=-=- MUL/IMUL =-=-=-=-=-=-=-=-=-= */
@@ -6429,4 +6846,10 @@ static Addr disInstr ( UCodeBlock* cb, A
break;
+ case 0xD4:
+ /* PADDQ (src)mmxreg-or-mem, (dst)mmxreg */
+ vg_assert(sz == 4);
+ eip = dis_MMXop_regmem_to_reg ( cb, sorb, eip, opc, "paddq", False );
+ break;
+
case 0xEC: case 0xED:
/* PADDSgg (src)mmxreg-or-mem, (dst)mmxreg */
@@ -6441,5 +6864,5 @@ static Addr disInstr ( UCodeBlock* cb, A
break;
- case 0xF8: case 0xF9: case 0xFA:
+ case 0xF8: case 0xF9: case 0xFA: case 0xFB:
/* PSUBgg (src)mmxreg-or-mem, (dst)mmxreg */
vg_assert(sz == 4);
@@ -6459,4 +6882,9 @@ static Addr disInstr ( UCodeBlock* cb, A
break;
+ case 0xE4: /* PMULHUW (src)mmxreg-or-mem, (dst)mmxreg */
+ vg_assert(sz == 4);
+ eip = dis_MMXop_regmem_to_reg ( cb, sorb, eip, opc, "pmulhuw", False );
+ break;
+
case 0xE5: /* PMULHW (src)mmxreg-or-mem, (dst)mmxreg */
vg_assert(sz == 4);
@@ -6469,4 +6897,9 @@ static Addr disInstr ( UCodeBlock* cb, A
break;
+ case 0xF4: /* PMULUDQ (src)mmxreg-or-mem, (dst)mmxreg */
+ vg_assert(sz == 4);
+ eip = dis_MMXop_regmem_to_reg ( cb, sorb, eip, opc, "pmuludq", False );
+ break;
+
case 0xF5: /* PMADDWD (src)mmxreg-or-mem, (dst)mmxreg */
vg_assert(sz == 4);
@@ -6551,4 +6984,103 @@ static Addr disInstr ( UCodeBlock* cb, A
break;
+ case 0xDA:
+ /* PMINUB (src)mmxreg-or-mem, (dst)mmxreg */
+ vg_assert(sz == 4);
+ eip = dis_MMXop_regmem_to_reg ( cb, sorb, eip, opc, "pminub", False );
+ break;
+
+ case 0xDE:
+ /* PMAXUB (src)mmxreg-or-mem, (dst)mmxreg */
+ vg_assert(sz == 4);
+ eip = dis_MMXop_regmem_to_reg ( cb, sorb, eip, opc, "pmaxub", False );
+ break;
+
+ case 0xEA:
+ /* PMINSW (src)mmxreg-or-mem, (dst)mmxreg */
+ vg_assert(sz == 4);
+ eip = dis_MMXop_regmem_to_reg ( cb, sorb, eip, opc, "pminsw", False );
+ break;
+
+ case 0xEE:
+ /* PMAXSW (src)mmxreg-or-mem, (dst)mmxreg */
+ vg_assert(sz == 4);
+ eip = dis_MMXop_regmem_to_reg ( cb, sorb, eip, opc, "pmaxsw", False );
+ break;
+
+ case 0xE0:
+ /* PAVGB (src)mmxreg-or-mem, (dst)mmxreg */
+ vg_assert(sz == 4);
+ eip = dis_MMXop_regmem_to_reg ( cb, sorb, eip, opc, "pavgb", False );
+ break;
+
+ case 0xE3:
+ /* PAVGW (src)mmxreg-or-mem, (dst)mmxreg */
+ vg_assert(sz == 4);
+ eip = dis_MMXop_regmem_to_reg ( cb, sorb, eip, opc, "pavgw", False );
+ break;
+
+ case 0xF6:
+ /* PSADBW (src)mmxreg-or-mem, (dst)mmxreg */
+ vg_assert(sz == 4);
+ eip = dis_MMXop_regmem_to_reg ( cb, sorb, eip, opc, "psadbw", False );
+ break;
+
+ case 0xD7:
+ /* PMOVMSKB (src)mmxreg, (dst)ireg */
+ vg_assert(sz == 4);
+ modrm = getUChar(eip);
+ vg_assert(epartIsReg(modrm));
+ t1 = newTemp(cb);
+ uInstr3(cb, SSE2g_RegWr, 4,
+ Lit16, (((UShort)(0x0F)) << 8) | (UShort)(opc),
+ Lit16, (UShort)modrm,
+ TempReg, t1 );
+ uInstr2(cb, PUT, 4, TempReg, t1, ArchReg, gregOfRM(modrm));
+ if (dis)
+ VG_(printf)("pmovmskb %s, %s\n",
+ nameMMXReg(eregOfRM(modrm)),
+ nameIReg(4,gregOfRM(modrm)));
+ eip++;
+ break;
+
+ case 0xC5:
+ /* PEXTRW (src)mmxreg, (dst)ireg */
+ vg_assert(sz == 4);
+ t1 = newTemp(cb);
+ modrm = getUChar(eip); eip++;
+ abyte = getUChar(eip); eip++;
+ vg_assert(epartIsReg(modrm));
+ uInstr3(cb, SSE2g1_RegWr, 4,
+ Lit16, (((UShort)(0x0F)) << 8) | (UShort)(opc),
+ Lit16, (UShort)modrm,
+ TempReg, t1 );
+ uLiteral(cb, abyte);
+ uInstr2(cb, PUT, 4, TempReg, t1, ArchReg, gregOfRM(modrm));
+ if (dis)
+ VG_(printf)("pextrw %s, %d, %s\n",
+ nameMMXReg(eregOfRM(modrm)), (Int)abyte,
+ nameIReg(4, gregOfRM(modrm)));
+ break;
+
+ case 0xC4:
+ /* PINSRW (src)ireg, (dst)mmxreg */
+ vg_assert(sz == 4);
+ t1 = newTemp(cb);
+ modrm = getUChar(eip); eip++;
+ abyte = getUChar(eip); eip++;
+ vg_assert(epartIsReg(modrm));
+ uInstr2(cb, GET, 2, ArchReg, eregOfRM(modrm), TempReg, t1);
+ uInstr3(cb, SSE2e1_RegRd, 2,
+ Lit16, (((UShort)(0x0F)) << 8) | (UShort)(opc),
+ Lit16, (UShort)modrm,
+ TempReg, t1 );
+ uLiteral(cb, abyte);
+ if (dis)
+ VG_(printf)("pinsrw %s, %d, %s\n",
+ nameIReg(2, eregOfRM(modrm)),
+ (Int)abyte,
+ nameMMXReg(gregOfRM(modrm)));
+ break;
+
case 0xA1: /* POP %FS */
dis_pop_segreg( cb, R_FS, sz ); break;
--- valgrind/coregrind/vg_translate.c #1.67:1.68
@@ -415,5 +415,6 @@ Bool VG_(saneUInstr) ( Bool beforeRA, Bo
# define SZ48 (u->size == 4 || u->size == 8)
# define SZ416 (u->size == 4 || u->size == 16)
-# define SZsse2 (u->size == 4 || u->size == 16 || u->size == 512)
+# define SZ816 (u->size == 8 || u->size == 16)
+# define SZsse2 (u->size == 4 || u->size == 8 || u->size == 16 || u->size == 512)
# define SZsse3 (u->size == 4 || u->size == 8 || u->size == 16)
# define SZi (u->size == 4 || u->size == 2 || u->size == 1)
@@ -568,9 +569,12 @@ Bool VG_(saneUInstr) ( Bool beforeRA, Bo
case SSE2a_MemRd: return LIT0 && SZsse2 && CCa && Ls1 && Ls2 && TR3 && XOTHER;
case SSE2a1_MemRd: return LIT0 && SZ416 && CC0 && Ls1 && Ls2 && TR3 && XOTHER;
+ case SSE2g_RegWr: return LIT0 && SZ4 && CC0 && Ls1 && Ls2 && TR3 && XOTHER;
+ case SSE2g1_RegWr: return LIT8 && SZ4 && CC0 && Ls1 && Ls2 && TR3 && XOTHER;
+ case SSE2e1_RegRd: return LIT8 && SZ2 && CC0 && Ls1 && Ls2 && TR3 && XOTHER;
case SSE3a_MemWr: return LIT0 && SZsse3 && CC0 && Ls1 && Ls2 && TR3 && XOTHER;
case SSE3a_MemRd: return LIT0 && SZsse3 && CCa && Ls1 && Ls2 && TR3 && XOTHER;
case SSE3e_RegRd: return LIT0 && SZ4 && CC0 && Ls1 && Ls2 && TR3 && XOTHER;
case SSE3e_RegWr: return LIT0 && SZ4 && CC0 && Ls1 && Ls2 && TR3 && XOTHER;
- case SSE3a1_MemRd: return LIT8 && SZ16 && CC0 && Ls1 && Ls2 && TR3 && XOTHER;
+ case SSE3a1_MemRd: return LIT8 && SZ816 && CC0 && Ls1 && Ls2 && TR3 && XOTHER;
case SSE3g_RegWr: return LIT0 && SZ4 && CC0 && Ls1 && Ls2 && TR3 && XOTHER;
case SSE3g1_RegWr: return LIT8 && SZ4 && CC0 && Ls1 && Ls2 && TR3 && XOTHER;
@@ -898,5 +902,8 @@ Char* VG_(name_UOpcode) ( Bool upper, Op
case SSE2a_MemWr: return "SSE2a_MWr";
case SSE2a_MemRd: return "SSE2a_MRd";
+ case SSE2g_RegWr: return "SSE2g_RWr";
case SSE2a1_MemRd: return "SSE2a1_MRd";
+ case SSE2g1_RegWr: return "SSE2g1_RWr";
+ case SSE2e1_RegRd: return "SSE2e1_RRd";
case SSE3e_RegRd: return "SSE3e_RRd";
case SSE3e_RegWr: return "SSE3e_RWr";
@@ -1063,4 +1070,7 @@ void pp_UInstrWorker ( Int instrNo, UIns
case SSE2a_MemWr:
case SSE2a_MemRd:
+ case SSE2g_RegWr:
+ case SSE2g1_RegWr:
+ case SSE2e1_RegRd:
VG_(printf)("0x%x:0x%x:0x%x",
(u->val1 >> 8) & 0xFF, u->val1 & 0xFF, u->val2 & 0xFF );
@@ -1271,4 +1281,5 @@ Int VG_(get_reg_usage) ( UInstr* u, Tag
case SSE3a1_MemRd:
case SSE2a1_MemRd:
+ case SSE2e1_RegRd:
case SSE3e_RegRd:
case SSE3a_MemWr:
@@ -1278,4 +1289,6 @@ Int VG_(get_reg_usage) ( UInstr* u, Tag
case SSE2a_MemRd: RD(3); break;
+ case SSE2g_RegWr:
+ case SSE2g1_RegWr:
case SSE3e_RegWr:
case SSE3g1_RegWr:
@@ -1442,4 +1455,5 @@ Int maybe_uinstrReadsArchReg ( UInstr* u
case MMX2_ERegRd: case MMX2_ERegWr:
case SSE2a_MemWr: case SSE2a_MemRd: case SSE2a1_MemRd:
+ case SSE2g_RegWr: case SSE2g1_RegWr: case SSE2e1_RegRd:
case SSE3a_MemWr: case SSE3a_MemRd: case SSE3a1_MemRd:
case SSE3e_RegRd: case SSE3g_RegWr: case SSE3e_RegWr:
--- valgrind/include/vg_skin.h.base #1.8:1.9
@@ -711,4 +711,30 @@
SSE2a_MemWr,
+ /* 4 bytes, writes an integer register. Insns of the form
+ bbbbbbbb:bbbbbbbb:11 ireg bbb.
+ Held in val1[15:0] and val2[7:0], and ireg is to be replaced
+ at codegen time by a reference to the relevant RealReg.
+ Transfer is always at size 4. Arg3 holds this Temp/Real Reg.
+ */
+ SSE2g_RegWr,
+
+ /* 5 bytes, writes an integer register. Insns of the form
+ bbbbbbbb:bbbbbbbb:11 ireg bbb :bbbbbbbb. Held in
+ val1[15:0] and val2[7:0] and lit32[7:0], and ireg is to be
+ replaced at codegen time by a reference to the relevant
+ RealReg. Transfer is always at size 4. Arg3 holds this
+ Temp/Real Reg.
+ */
+ SSE2g1_RegWr,
+
+ /* 5 bytes, reads an integer register. Insns of the form
+ bbbbbbbb:bbbbbbbb:11 bbb ireg :bbbbbbbb. Held in
+ val1[15:0] and val2[7:0] and lit32[7:0], and ireg is to be
+ replaced at codegen time by a reference to the relevant
+ RealReg. Transfer is always at size 4. Arg3 holds this
+ Temp/Real Reg.
+ */
+ SSE2e1_RegRd,
+
/* 4 bytes, no memrefs, no iregdefs, copy exactly to the
output. Held in val1[15:0] and val2[15:0]. */
--- valgrind/memcheck/mc_translate.c #1.34:1.35
@@ -1077,4 +1077,7 @@ static UCodeBlock* memcheck_instrument (
/* SSE ins referencing scalar integer registers */
+ case SSE2g_RegWr:
+ case SSE2g1_RegWr:
+ case SSE2e1_RegRd:
case SSE3g_RegWr:
case SSE3e_RegRd:
--- valgrind/none/tests/Makefile.am #1.21:1.22
@@ -25,4 +25,7 @@
fucomip.stderr.exp fucomip.vgtest \
gxx304.stderr.exp gxx304.vgtest \
+ insn_mmx.stderr.exp insn_mmx.stdout.exp insn_mmx.vgtest \
+ insn_sse.stderr.exp insn_sse.stdout.exp insn_sse.vgtest \
+ insn_sse2.stderr.exp insn_sse2.stdout.exp insn_sse2.vgtest \
map_unmap.stdout.exp map_unmap.vgtest \
mremap.stdout.exp mremap.vgtest \
@@ -48,5 +51,6 @@
args bitfield1 bt_everything bt_literal coolo_strlen \
cpuid dastest discard exec-sigmask floored fork fpu_lazy_eflags \
- fucomip munmap_exe map_unmap mremap rcl_assert \
+ fucomip insn_mmx insn_sse insn_sse2 \
+ munmap_exe map_unmap mremap rcl_assert \
rcrl readline1 resolv seg_override sha1_test shortpush shorts smc1 \
pth_blockedsig \
@@ -72,4 +76,10 @@
fpu_lazy_eflags_SOURCES = fpu_lazy_eflags.c
fucomip_SOURCES = fucomip.c
+insn_mmx_SOURCES = insn_mmx.def
+insn_mmx_LDADD = -lm
+insn_sse_SOURCES = insn_sse.def
+insn_sse_LDADD = -lm
+insn_sse2_SOURCES = insn_sse2.def
+insn_sse2_LDADD = -lm
map_unmap_SOURCES = map_unmap.c
mremap_SOURCES = mremap.c
@@ -100,2 +110,4 @@
fpu_lazy_eflags.o: CFLAGS += -O2 -mcpu=pentiumpro -march=pentiumpro
+.def.c:
+ $(PERL) gen_insn_test.pl < $< > $@
--- valgrind/tests/Makefile.am #1.34:1.35
@@ -13,5 +13,6 @@
check_PROGRAMS = \
- true
+ true \
+ cputest
AM_CFLAGS = $(WERROR) -Winline -Wall -Wshadow -g
@@ -20,4 +21,4 @@
# generic C ones
true_SOURCES = true.c
-
+cputest_SOURCES = cputest.c
--- valgrind/tests/vg_regtest.in #1.17:1.18
@@ -50,4 +50,5 @@
# - stdout_filter: <filter to run stdout through> (default: none)
# - stderr_filter: <filter to run stderr through> (default: ./filter_stderr)
+# - cpu_test: <cpu feature required for test> (default: none)
#
# Note that filters are necessary for stderr results to filter out things that
@@ -81,4 +82,5 @@
my $stdout_filter; # filter program to run stdout results file through
my $stderr_filter; # filter program to run stderr results file through
+my $cpu_test; # cpu feature to check for before running test
my @failures; # List of failed tests
@@ -166,6 +168,6 @@
# Defaults.
- ($vgopts, $prog, $args, $stdout_filter, $stderr_filter) =
- ("", undef, "", undef, undef);
+ ($vgopts, $prog, $args, $stdout_filter, $stderr_filter, $cpu_test) =
+ ("", undef, "", undef, undef, undef);
# Every test directory must have a "filter_stderr"
@@ -185,4 +187,6 @@
} elsif ($line =~ /^\s*stderr_filter:\s*(.*)$/) {
$stderr_filter = validate_program(".", $1, 1);
+ } elsif ($line =~ /^\s*cpu_test:\s*(.*)$/) {
+ $cpu_test = $1;
} else {
die "Bad line in $f: $line\n";
@@ -223,4 +227,8 @@
read_vgtest_file($vgtest);
+ if (defined $cpu_test) {
+ return unless system("../../tests/cputest $cpu_test") == 0;
+ }
+
printf("%-16s valgrind $vgopts $prog $args\n", "$name:");
|
|
From: Tom H. <th...@cy...> - 2004-01-19 23:53:51
|
In message <200...@of...>
Nicholas Nethercote <nj...@ca...> wrote:
> CVS commit by nethercote:
>
> Patch from Tom Hughes, for bug 72643:
>
> Patch to improve SSE/SS2 support
>
> This patch should implement most of the missing SSE/SSE2 opcodes. About
> the only ones it doesn't do are the MASKMOVxxx ones as they are quite
> horrible and involved an implicit reference to EDI so I need to think
> about them a bit more.
>
> The patch also includes a set of tests for the MMX/SSE/SSE2 opcodes to
> validate that they have the same effect under valgrind as they do when
> run normally. In one or two cases this wasn't actually the case even
> for some of the implemented opcodes, so I fixed those as well ;-)
>
>
> M +2 -6 addrcheck/ac_main.c 1.60
> M +6 -6 cachegrind/cg_main.c 1.62
> M +129 -3 coregrind/vg_from_ucode.c 1.73
> M +604 -72 coregrind/vg_to_ucode.c 1.122
> M +16 -2 coregrind/vg_translate.c 1.68
> M +26 -0 include/vg_skin.h.base 1.9
> M +4 -1 memcheck/mc_translate.c 1.35
> M +13 -1 none/tests/Makefile.am 1.22
> M +3 -2 tests/Makefile.am 1.35
> M +10 -2 tests/vg_regtest.in 1.18
Did you cvs add the various new files before committing? Only there's
no sign of them here and they haven't shown up in CVS unlike the other
changes. The files in question are:
tests/cputest.c
none/tests/gen_insn_test.pl
none/tests/insn_mmx.def
none/tests/insn_mmx.vgtest
none/tests/insn_mmx.stderr.exp
none/tests/insn_mmx.stdout.exp
none/tests/insn_sse.def
none/tests/insn_sse.vgtest
none/tests/insn_sse.stderr.exp
none/tests/insn_sse.stdout.exp
none/tests/insn_sse2.def
none/tests/insn_sse2.vgtest
none/tests/insn_sse2.stderr.exp
none/tests/insn_sse2.stdout.exp
Tom
--
Tom Hughes (th...@cy...)
Software Engineer, Cyberscience Corporation
http://www.cyberscience.com/
|
|
From: Nicholas N. <nj...@ca...> - 2004-01-20 09:45:59
|
On Mon, 19 Jan 2004, Tom Hughes wrote: > Did you cvs add the various new files before committing? Only there's > no sign of them here and they haven't shown up in CVS unlike the other > changes. The files in question are: [snip] No, because I am a moron. Now added, thanks for the catch, and sorry for any breakage. N ps: Tom, you've been doing a fantastic job with bug-fixing lately, so a big thank you for that! |
|
From: Nicholas N. <nj...@ca...> - 2004-01-19 19:33:00
|
CVS commit by nethercote:
Update instructions for FV.
M +25 -24 README_MISSING_SYSCALL_OR_IOCTL 1.6
--- valgrind/README_MISSING_SYSCALL_OR_IOCTL #1.5:1.6
@@ -47,17 +47,23 @@
Removing the debug printing clutter, it looks like this:
- case __NR_time: /* syscall 13 */
+ PRE(time)
+ {
/* time_t time(time_t *t); */
+ MAYBE_PRINTF("time ( %p )\n",arg1);
if (arg1 != (UInt)NULL) {
- SYSCALL_TRACK( pre_mem_write, tst, "time", arg1, sizeof(time_t) );
+ SYSCALL_TRACK( pre_mem_write, tid, "time", arg1, sizeof(time_t) );
}
- KERNEL_DO_SYSCALL(tid,res);
- if (!VG_(is_kerror)(res) && arg1 != (UInt)NULL) {
+ }
+
+ POST(time)
+ {
+ if (arg1 != (UInt)NULL) {
VG_TRACK( post_mem_write, arg1, sizeof(time_t) );
}
- break;
+ }
-The first thing we do is, if a non-NULL buffer is passed in as the argument,
-tell the tool that the buffer is about to be written to:
+The first thing we do happens before the syscall occurs, in the PRE() function:
+if a non-NULL buffer is passed in as the argument, tell the tool that the
+buffer is about to be written to:
if (arg1 != (UInt)NULL) {
@@ -65,18 +71,14 @@
}
-Now Valgrind asks the kernel to actally do the system call, for the thread
-identified by thread ID "tid", depositing the return value in "res":
-
- KERNEL_DO_SYSCALL(tid, res);
+Finally, the really important bit, after the syscall occurs, in the POST()
+function: if, and only if, the system call was successful, tell the tool that
+the memory was written:
-Finally, the really important bit. If, and only if, the system call
-was successful, tell the tool that the memory was written:
-
- if (!VG_(is_kerror)(res) && arg1 != (UInt)NULL) {
+ if (arg1 != (UInt)NULL) {
VG_TRACK( post_mem_write, arg1, sizeof(time_t) );
}
-The function VG_(is_kerror) tells you whether or not its argument
-represents a Linux kernel return error code. Hence the test.
+The POST() function won't be called if the syscall failed, so you don't need
+to worry about checking that in the POST() function.
@@ -108,4 +110,8 @@
succeeds, issue suitable VG_TRACK( post_mem_write, ... ) calls.
(There's no need for post_mem_read calls.)
+
+ Also, add it to the sys_info[] array; use SYSBA if it requires a PRE()
+ and POST() function, and SYSB_ if it only requires a PRE() function.
+ The 2nd arg of these macros indicate if the syscall is blocking.
If you find this difficult, read the wrappers for other syscalls
@@ -126,11 +132,6 @@
is the case.
- Note that many syscalls are bracketed by #if defined(__NR_mysyscall)
- ... #endif, because they exist only in the 2.4 kernel and not
- the 2.2 kernel. This enables the same piece of code to serve both
- kernels. Please try and stick to this convention.
-
-4. Once happy, send me the patch. Pretty please.
+4. Once happy, send us the patch. Pretty please.
@@ -144,5 +145,5 @@
more specific case to get the right behaviour.
-As above, please create a bugreport and attach the patch as described
+As above, please create a bug report and attach the patch as described
on http://valgrind.kde.org/bugs.html
|
|
From: Jeremy F. <je...@go...> - 2004-01-20 01:54:46
|
CVS commit by fitzhardinge:
Some clarifications to README_MISSING_SYSCALL_OR_IOCTL.
M +27 -10 README_MISSING_SYSCALL_OR_IOCTL 1.7
--- valgrind/README_MISSING_SYSCALL_OR_IOCTL #1.6:1.7
@@ -79,6 +79,10 @@
}
-The POST() function won't be called if the syscall failed, so you don't need
-to worry about checking that in the POST() function.
+The POST() function won't be called if the syscall failed, so you
+don't need to worry about checking that in the POST() function.
+(Note: this is sometimes a bug; some syscalls do return results when
+they "fail" - for example, nanosleep returns the amount of unslept
+time if interrupted. TODO: add another per-syscall flag for this
+case.)
@@ -93,8 +97,14 @@
This should tell you something like __NR_mysyscallname.
-
+ Copy this entry to coregrind/vg_unistd.h.
2. Do 'man 2 mysyscallname' to get some idea of what the syscall
- does.
+ does. Note that the actual kernel interface can differ from this,
+ so you might also want to check a version of the Linux kernel
+ source.
+
+ NOTE: any syscall which has something to do with signals or
+ threads is probably "special", and needs more careful handling.
+ Post something to valgrind-developers if you aren't sure.
@@ -111,7 +121,8 @@
(There's no need for post_mem_read calls.)
- Also, add it to the sys_info[] array; use SYSBA if it requires a PRE()
- and POST() function, and SYSB_ if it only requires a PRE() function.
- The 2nd arg of these macros indicate if the syscall is blocking.
+ Also, add it to the sys_info[] array; use SYSBA if it requires a
+ PRE() and POST() function, and SYSB_ if it only requires a PRE()
+ function. The 2nd arg of these macros indicate if the syscall
+ could possibly block.
If you find this difficult, read the wrappers for other syscalls
@@ -120,6 +131,10 @@
starting point.
- If you have to #include headers for structure definitions,
- put your #includes into vg_unsafe.h.
+ If you need structure definitions for your syscall, you can copy
+ structure definitions from the kernel headers into
+ include/vg_kerneliface.h, with the appropriate vki_* name
+ mangling. Alternatively, you can #include headers for structure
+ definitions, put your #includes into vg_unsafe.h (copying
+ syscall-related things into vg_kerneliface.h is preferred though).
Test it.
@@ -140,5 +155,7 @@
Writing your own ioctl wrappers
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-Is pretty much the same as writing syscall wrappers.
+
+Is pretty much the same as writing syscall wrappers, except that all
+the action happens within PRE(ioctl) and POST(ioctl).
There's a default case, sometimes it isn't correct and you have to write a
|
|
From: Nicholas N. <nj...@ca...> - 2004-01-21 13:59:59
|
CVS commit by nethercote:
Updated the manual for some recent changes, esp. the fact that Memcheck is no
longer the default.
M +70 -82 coregrind/docs/coregrind_core.html 1.22
M +34 -50 coregrind/docs/coregrind_intro.html 1.8
M +5 -7 docs/manual.html 1.47
--- valgrind/docs/manual.html #1.46:1.47
@@ -27,5 +27,5 @@
<a name="title"> </a>
<h1 align=center>Valgrind, version 2.1.0</h1>
-<center>This manual was last updated on 14 December 2003</center>
+<center>This manual was last updated on 21 January 2004</center>
<p>
@@ -53,11 +53,7 @@
1.2 <a href="coregrind_intro.html#intro-navigation">
How to navigate this manual</a>
- <br>
- 1.2.1 <a href="coregrind_intro.html#intro-migrating">
- For users migrating from valgrind-1.0.X</a>
<h4>2 <a href="coregrind_core.html#core">
- Using and understanding the Valgrind core services
- </a></h4>
+ Using and understanding the Valgrind core</a></h4>
2.1 <a href="coregrind_core.html#core-whatdoes">
What it does with your program</a><br>
@@ -88,4 +84,6 @@
2.14 <a href="coregrind_core.html#example">
An example run</a><br>
+ 2.15 <a href="coregrind_core.html#warnings">
+ Warning messages you might see</a><br>
<h4>3 <a href="mc_main.html#mc-top">
@@ -111,5 +109,5 @@
<p>
The following are not part of the user manual. They describe internal
-details of how Valgrind works. Reading them may rot your mind. You
+details of how Valgrind works. Reading them may rot your brain. You
have been warned.
--- valgrind/coregrind/docs/coregrind_core.html #1.21:1.22
@@ -2,7 +2,7 @@
<a name="core"></a>
-<h2>2 Using and understanding the Valgrind core services</h2>
+<h2>2 Using and understanding the Valgrind core</h2>
-This section describes the core services, flags and behaviours. That
+This section describes the Valgrind core services, flags and behaviours. That
means it is relevant regardless of what particular tool you are using.
A point of terminology: most references to "valgrind" in the rest of
@@ -15,28 +15,24 @@
Valgrind is designed to be as non-intrusive as possible. It works
directly with existing executables. You don't need to recompile,
-relink, or otherwise modify, the program to be checked. Simply place
-the word <code>valgrind</code> at the start of the command line
-normally used to run the program, and tell it what tool you want to
-use.
+relink, or otherwise modify, the program to be checked.
-<p>
-So, for example, if you want to run the command <code>ls -l</code>
-using the heavyweight memory-checking tool, issue the command:
-<code>valgrind --tool=memcheck ls -l</code>. The <code>--tool=</code>
-parameter tells the core which tool is to be used.
-
-<p>
-To preserve compatibility with the 1.0.X series, if you do not specify
-a tool, the default is to use Memcheck. That means the above
-example simplifies to: <code>valgrind ls -l</code>.
+Simply put <code>valgrind --tool=<i>tool_name</i></code> at the start of
+the command line normally used to run the program. For example,
+if want to run the command <code>ls -l</code>
+using the heavyweight memory-checking tool Memcheck, issue the command:
+
+ <blockquote>
+ <code>valgrind --tool=memcheck ls -l</code>.
+ </blockquote>
<p>Regardless of which tool is in use, Valgrind takes control of your
program before it starts. Debugging information is read from the
-executable and associated libraries, so that error messages can be
-phrased in terms of source code locations (if that is appropriate).
+executable and associated libraries, so that error messages and other
+outputs can be phrased in terms of source code locations (if that is
+appropriate)
<p>
Your program is then run on a synthetic x86 CPU provided by the
-valgrind core. As new code is executed for the first time, the core
+Valgrind core. As new code is executed for the first time, the core
hands the code to the selected tool. The tool adds its own
instrumentation code to this and hands the result back to the core,
@@ -49,6 +45,6 @@
code at least 12 times, and making it run 25-50 times slower than
natively. At the other end of the spectrum, the ultra-trivial "none"
-tool adds no instrumentation at all and causes in total "only" about a
-4 times slowdown.
+tool (a.k.a. Nulgrind) adds no instrumentation at all and causes in total
+"only" about a 4 times slowdown.
<p>
@@ -60,27 +56,21 @@
<p>
-If -- as is usually the case -- you're using one of the
-error-detection tools, valgrind will often detect errors in
-libraries, for example the GNU C or X11 libraries, which you have to
-use. Since you're probably using valgrind to debug your own
-application, and not those libraries, you don't want to see those
-errors and probably can't fix them anyway.
-
-<p>
-So, rather than swamping you with errors in which you are not
-interested, Valgrind allows you to selectively suppress errors, by
-recording them in a suppressions file which is read when Valgrind
-starts up. The build mechanism attempts to select suppressions which
-give reasonable behaviour for the libc and XFree86 versions detected
-on your machine. To make it easier to write suppressions, you can use
-the <code>--gen-suppressions=yes</code> option which tells Valgrind to
-print out a suppression for each error that appears, which you can
-then copy into a suppressions file.
-
-<p>
-Different tools report different kinds of errors. The suppression
-mechanism therefore allows you to say which tool or tool(s) each
-suppression applies to.
-
+If you're using one of the error-detection tools, Valgrind will often
+detect errors in libraries, for example the GNU C or X11 libraries,
+which you have to use. You might not be interested in these errors,
+since you probably have noo control over that code. Therefore, Valgrind
+allows you to selectively suppress errors, by recording them in a
+suppressions file which is read when Valgrind starts up. The build
+mechanism attempts to select suppressions which give reasonable
+behaviour for the libc and XFree86 versions detected on your machine.
+To make it easier to write suppressions, you can use the
+<code>--gen-suppressions=yes</code> option which tells Valgrind to print
+out a suppression for each error that appears, which you can then copy
+into a suppressions file.
+
+<p>
+Different error-checking tools report different kinds of errors. The
+suppression mechanism therefore allows you to say which tool or tool(s)
+each suppression applies to.
@@ -90,5 +80,5 @@
First off, consider whether it might be beneficial to recompile your
application and supporting libraries with debugging info enabled (the
-<code>-g</code> flag). Without debugging info, the best valgrind
+<code>-g</code> flag). Without debugging info, the best Valgrind tools
will be able to do is guess which function a particular piece of code
belongs to, which makes both error messages and profiling output
@@ -101,5 +91,5 @@
function-call chain, which can help reduce confusion when navigating
around large C++ apps. For whatever it's worth, debugging
-OpenOffice.org with Valgrind is a bit easier when using this flag.
+OpenOffice.org with Memcheck is a bit easier when using this flag.
<p>
@@ -110,6 +100,6 @@
<p>
-This paragraph applies only if you plan to use Memcheck
-(which is the default): On rare occasions, optimisation levels
+This paragraph applies only if you plan to use Memcheck:
+On rare occasions, optimisation levels
at <code>-O2</code> and above have been observed to generate code which
fools Memcheck into wrongly reporting uninitialised value
@@ -133,5 +123,5 @@
<p>
When you're ready to roll, just run your application as you would
-normally, but place <code>valgrind --tool=the-selected-tool</code> in
+normally, but place <code>valgrind --tool=<i>tool_name</i></code> in
front of your usual command-line invocation. Note that you should run
the real (machine-code) executable here. If your application is
@@ -148,5 +138,5 @@
<h3>2.3 The commentary</h3>
-Valgrind writes a commentary, a stream of text, detailing error
+Valgrind tools write a commentary, a stream of text, detailing error
reports and other significant events. All lines in the commentary
have following form:<br>
@@ -160,5 +150,5 @@
become merged together, for whatever reason.
-<p>By default, Valgrind writes only essential messages to the commentary,
+<p>By default, Valgrind tools write only essential messages to the commentary,
so as to avoid flooding you with information of secondary importance.
If you want more information about what is happening, re-run, passing
@@ -166,6 +156,5 @@
<p>
-Version 2 of valgrind gives significantly more flexibility than 1.0.X
-does about where that stream is sent to. You have three options:
+You can direct the commentary to three different places:
<ul>
@@ -196,7 +185,6 @@
in the sources.
<p>
- Note, unfortunately, that you have to use an IP address here --
- for technical reasons, valgrind's core itself can't use the GNU C
- library, and this makes it difficult to do hostname-to-IP lookups.
+ Note, unfortunately, that you have to use an IP address here, rather
+ than a hostname.
<p>
Writing to a network socket is pretty useless if you don't have
@@ -222,10 +210,10 @@
the default (1500). The specified port must be in the range
1024 to 65535. The same restriction applies to port numbers
- specified by a <code>--logsocket=</code> to valgrind itself.
+ specified by a <code>--logsocket=</code> to Valgrind itself.
</ul>
<p>
If a valgrinded process fails to connect to a listener, for
whatever reason (the listener isn't running, invalid or
- unreachable host or port, etc), valgrind switches back to writing
+ unreachable host or port, etc), Valgrind switches back to writing
the commentary to stderr. The same goes for any process which
loses an established connection to a listener. In other words,
@@ -236,5 +224,5 @@
Here is an important point about the relationship between the
commentary and profiling output from tools. The commentary contains a
-mix of messages from the valgrind core and the selected tool. If the
+mix of messages from the Valgrind core and the selected tool. If the
tool reports errors, it will report them to the commentary. However,
if the tool does profiling, the profile data will be written to a file
@@ -312,5 +300,5 @@
<p>
To avoid this cutoff you can use the <code>--error-limit=no</code>
-flag. Then valgrind will always show errors, regardless of how many
+flag. Then Valgrind will always show errors, regardless of how many
there are. Use this flag carefully, since it may have a dire effect
on performance.
@@ -387,5 +375,5 @@
(Nb: no spaces are allowed).
<p>
- Recall that valgrind-2.0.X is a modular system, in which
+ Recall that Valgrind-2.0.X is a modular system, in which
different instrumentation tools can observe your program whilst
it is running. Since different tools detect different kinds of
@@ -479,5 +467,5 @@
-As mentioned above, valgrind's core accepts a common set of flags.
+As mentioned above, Valgrind's core accepts a common set of flags.
The tools also accept tool-specific flags, which are documented
seperately for each tool.
@@ -485,10 +473,10 @@
You invoke Valgrind like this:
<pre>
- valgrind [options-for-Valgrind] your-prog [options for your-prog]
+ valgrind --tool=<i>tool_name</i> [options-for-Valgrind] your-prog [options for your-prog]
</pre>
<p>Note that Valgrind also reads options from the environment variable
<code>$VALGRIND_OPTS</code>, and processes them before the command-line
-options. Options for the valgrind core may be freely mixed with those
+options. Options for the Valgrind core may be freely mixed with those
for the selected tool.
@@ -514,5 +502,5 @@
<li><code>--version</code><br> <p>Show the version number of the
- valgrind core. Tools can have their own version numbers. There
+ Valgrind core. Tools can have their own version numbers. There
is a scheme in place to ensure that tools only execute when the
core version is one they are known to work with. This was done
@@ -559,5 +547,5 @@
the specified port at the specified IP address. The port may be
omitted, in which case port 1500 is used. If a connection
- cannot be made to the specified socket, valgrind falls back to
+ cannot be made to the specified socket, Valgrind falls back to
writing output to the standard error (stderr). This option is
intended to be used in conjunction with the
@@ -604,5 +592,5 @@
<li><code>--error-limit=yes</code> [default]<br>
- <code>--error-limit=no</code> <p>When enabled, valgrind stops
+ <code>--error-limit=no</code> <p>When enabled, Valgrind stops
reporting errors after 30000 in total, or 300 different ones,
have been seen. This is to stop the error tracking machinery
@@ -720,5 +708,5 @@
<ul>
<li><code>--alignment=<number></code> [default: 4]<br> <p>By
- default valgrind's <code>malloc</code>, <code>realloc</code>,
+ default Valgrind's <code>malloc</code>, <code>realloc</code>,
etc, return 4-byte aligned addresses. These are suitable for
any accesses on x86 processors.
@@ -778,5 +766,5 @@
7.1. So this flag is provided in order to inhibit the run of
<code>__libc_freeres</code>. If your program seems to run fine
- on valgrind, but segfaults at exit, you may find that
+ on Valgrind, but segfaults at exit, you may find that
<code>--run-libc-freeres=no</code> fixes that, although at the
cost of possibly falsely reporting space leaks in
@@ -890,7 +878,7 @@
<li><code>--profile=no</code><br>
<code>--profile=yes</code> [default]
- <p>When enabled, does crude internal profiling of valgrind
+ <p>When enabled, does crude internal profiling of Valgrind
itself. This is not for profiling your programs. Rather it is
- to allow the developers to assess where valgrind is spending
+ to allow the developers to assess where Valgrind is spending
its time. The tools must be built for profiling for this to
work.
@@ -994,5 +982,5 @@
debugging a JITter or some other dynamic code generation system.
After this call, attempts to execute code in the invalidated
- address range will cause valgrind to make new translations of that
+ address range will cause Valgrind to make new translations of that
code, which is probably the semantics you want. Note that this is
implemented naively, and involves checking all 200191 entries in
@@ -1078,5 +1066,5 @@
similar, bugs.
<p>
-As of the valgrind-1.0 release, the state of pthread support was as follows:
+As of the Valgrind-1.0 release, the state of pthread support was as follows:
<ul>
<li>Mutexes, condition variables, thread-specific data,
@@ -1214,5 +1202,5 @@
If you describe your program's memory management scheme
using "client requests" (Section 3.7 of this manual),
- valgrind can do better. Nevertheless, using malloc/new
+ Memcheck can do better. Nevertheless, using malloc/new
and free/delete is still the best approach.
</li>
@@ -1480,14 +1468,8 @@
</pre>
<p>The GCC folks fixed this about a week before gcc-3.0 shipped.
-<hr width="100%">
<p>
-</body>
-</html>
-
-
-<h2>Misc text looking for a home</h2>
-
-<h4>2.6.6 Warning messages you might see</h4>
+<a name="warnings"></a>
+<h3>2.15 Warning messages you might see</h3>
Most of these only appear if you run in verbose mode (enabled by
@@ -1551,2 +1533,8 @@
developers, to do with memory permissions.
</ul>
+
+</body>
+</html>
+
+
+
--- valgrind/coregrind/docs/coregrind_intro.html #1.7:1.8
@@ -40,24 +40,4 @@
difficult-to-diagnose crashes.
<p>
-<li><b>Cachegrind</b> is a cache profiler. It performs detailed simulation of
- the I1, D1 and L2 caches in your CPU and so can accurately
- pinpoint the sources of cache misses in your code. If you desire,
- it will show the number of cache misses, memory references and
- instructions accruing to each line of source code, with
- per-function, per-module and whole-program summaries. If you ask
- really nicely it will even show counts for each individual x86
- instruction.
- <p>
- Cachegrind auto-detects your machine's cache configuration
- using the <code>CPUID</code> instruction, and so needs no further
- configuration info, in most cases.
- <p>
- Cachegrind is nicely complemented by Josef Weidendorfer's
- amazing KCacheGrind visualisation tool (<A
- HREF="http://kcachegrind.sourceforge.net">
- http://kcachegrind.sourceforge.net</A>), a KDE application which
- presents these profiling results in a graphical and
- easier-to-understand form.
-<p>
<li><b>Addrcheck</b> is a lightweight version of
Memcheck. It is identical to Memcheck except
@@ -85,4 +65,24 @@
all the addressing errors that appear.
<p>
+<li><b>Cachegrind</b> is a cache profiler. It performs detailed simulation of
+ the I1, D1 and L2 caches in your CPU and so can accurately
+ pinpoint the sources of cache misses in your code. If you desire,
+ it will show the number of cache misses, memory references and
+ instructions accruing to each line of source code, with
+ per-function, per-module and whole-program summaries. If you ask
+ really nicely it will even show counts for each individual x86
+ instruction.
+ <p>
+ Cachegrind auto-detects your machine's cache configuration
+ using the <code>CPUID</code> instruction, and so needs no further
+ configuration info, in most cases.
+ <p>
+ Cachegrind is nicely complemented by Josef Weidendorfer's
+ amazing KCacheGrind visualisation tool (<A
+ HREF="http://kcachegrind.sourceforge.net">
+ http://kcachegrind.sourceforge.net</A>), a KDE application which
+ presents these profiling results in a graphical and
+ easier-to-understand form.
+<p>
<li><b>Helgrind</b> finds data races in multithreaded programs.
Helgrind looks for
@@ -105,5 +105,5 @@
A number of minor tools (<b>corecheck</b>, <b>lackey</b> and
-<b>none</b>) are also supplied. These aren't particularly useful --
+<b>Nulgrind</b>) are also supplied. These aren't particularly useful --
they exist to illustrate how to create simple tools and to help the
valgrind developers in various ways.
@@ -138,20 +138,16 @@
<h3>1.2 How to navigate this manual</h3>
-Valgrind is structured as a set of core services supporting a number
-of profiling and debugging tools. This manual is structured
-similarly. Below, we continue with a description of the valgrind
-core, how to use it, and the flags it supports.
-
-<p>
-The tools each have their own chapters in this manual. You only need
-to read the documentation for the core services and for the tool(s)
-you actually use, although you may find it helpful to be at least a
-little bit familar with what all tools do. If you want to write a new
-tool, read <A HREF="coregrind_tools.html">this</A>.
-
-<p>
-If you're new to all this, you're most likely to be using the Memcheck
-tool, since that's the one selected by default. So, read the rest of
-this page, and the section Memcheck.
+The Valgrind distribution consists of the Valgrind core, upon which are
+built Valgrind tools, which do different kinds of debugging and
+profiling. This manual is structured similarly.
+
+<p>
+First, we describe the Valgrind core, how to use it, and the flags it
+supports. Then, each tool has its own chapter in this manual. You only
+need to read the documentation for the core and for the tool(s) you
+actually use, although you may find it helpful to be at least a little
+bit familar with what all tools do. If you're new to all this, you
+probably want to run the Memcheck tool. If you want to write a new tool,
+read <A HREF="coregrind_tools.html">this</A>.
<p>
@@ -160,19 +156,7 @@
there is no central place describing all the flags that are accepted
-- you have to read the flags documentation both for
-<A HREF="coregrind_core.html#core">valgrind's core</A>
+<A HREF="coregrind_core.html#core">Valgrind's core</A>
and for the tool you want to use.
<p>
-<a name="intro-migrating"></a>
-<h4>1.2.1 For users migrating from valgrind-1.0.X</h4>
-<p>
-Valgrind-2.0.X is a major redesign of the 1.0.X series. You should at
-least be familiar with the concept of the core/tool division,
-as explained above in the Introduction. Having said that, we've tried
-to make the command line handling and behaviour as
-backwards-compatible as we can. In particular, just running
-<code>valgrind [args-for-valgrind] my_prog [args-for-my-prog]</code>
-should work pretty much as before.
-
-<p>
|
|
From: Nicholas N. <nj...@ca...> - 2004-01-21 15:08:36
|
CVS commit by nethercote:
Convert "skin" to "tool" in various places; almost entirely within comments,
nothing that will affect code.
M +1 -1 AUTHORS 1.6
M +1 -1 cachegrind/cg_main.c 1.63
M +9 -9 coregrind/vg_errcontext.c 1.50
M +3 -3 coregrind/vg_malloc2.c 1.18
M +1 -1 coregrind/vg_mylibc.c 1.65
M +2 -2 coregrind/vg_needs.c 1.15
M +1 -1 coregrind/vg_replace_malloc.c 1.18
M +4 -4 coregrind/vg_scheduler.c 1.138
M +4 -4 coregrind/vg_signals.c 1.58
M +3 -3 coregrind/vg_symtab2.c 1.74
M +1 -1 coregrind/vg_symtypes.c 1.5
M +2 -2 coregrind/vg_to_ucode.c 1.124
M +3 -3 include/valgrind.h 1.25
M +3 -3 include/vg_profile.c 1.11
M +1 -1 memcheck/mac_malloc_wrappers.c 1.10
M +3 -3 memcheck/mac_shared.h 1.17
M +1 -1 memcheck/memcheck.h 1.18
M +1 -1 tests/filter_stderr_basic 1.15
--- valgrind/AUTHORS #1.5:1.6
@@ -3,5 +3,5 @@
Nicholas Nethercote, nj...@ca..., did the core/tool
-generalisation, and wrote Cachegrind and some of the other skins.
+generalisation, and wrote Cachegrind and some of the other tools.
Jeremy Fitzhardinge, je...@go..., wrote much of Helgrind, and lots
--- valgrind/cachegrind/cg_main.c #1.62:1.63
@@ -70,5 +70,5 @@ typedef
VgpCacheResults
}
- VgpSkinCC;
+ VgpToolCC;
/*------------------------------------------------------------*/
--- valgrind/coregrind/vg_errcontext.c #1.49:1.50
@@ -421,5 +421,5 @@ void VG_(maybe_record_error) ( ThreadId
/* Second top-level entry point to the error management subsystem, for
- errors that the skin want to report immediately, eg. because they're
+ errors that the tool wants to report immediately, eg. because they're
guaranteed to only happen once. This avoids all the recording and
comparing stuff. But they can be suppressed; returns True if it is
@@ -628,7 +628,7 @@ static Bool setLocationTy ( Char** p_cal
-/* Look for "skin" in a string like "skin1,skin2,skin3" */
+/* Look for "tool" in a string like "tool1,tool2,tool3" */
static __inline__
-Bool skin_name_present(Char *name, Char *names)
+Bool tool_name_present(Char *name, Char *names)
{
Bool found;
@@ -654,5 +654,5 @@ static void load_one_suppressions_file (
Bool eof;
Char buf[N_BUF+1];
- Char* skin_names;
+ Char* tool_names;
Char* supp_name;
@@ -665,5 +665,5 @@ static void load_one_suppressions_file (
while (True) {
- /* Assign and initialise the two suppression halves (core and skin) */
+ /* Assign and initialise the two suppression halves (core and tool) */
Supp* supp;
supp = VG_(arena_malloc)(VG_AR_CORE, sizeof(Supp));
@@ -694,9 +694,9 @@ static void load_one_suppressions_file (
buf[i] = '\0'; /* Replace ':', splitting into two strings */
- skin_names = & buf[0];
+ tool_names = & buf[0];
supp_name = & buf[i+1];
/* Is it a core suppression? */
- if (VG_(needs).core_errors && skin_name_present("core", skin_names))
+ if (VG_(needs).core_errors && tool_name_present("core", tool_names))
{
if (VG_STREQ(supp_name, "PThread"))
@@ -706,7 +706,7 @@ static void load_one_suppressions_file (
}
- /* Is it a skin suppression? */
+ /* Is it a tool suppression? */
else if (VG_(needs).skin_errors &&
- skin_name_present(VG_(details).name, skin_names))
+ tool_name_present(VG_(details).name, tool_names))
{
if (SK_(recognised_suppression)(supp_name, supp))
--- valgrind/coregrind/vg_malloc2.c #1.17:1.18
@@ -255,5 +255,5 @@ void ensure_mm_init ( void )
/* Use a checked red zone size of 1 word for our internal stuff,
and an unchecked zone of arbitrary size for the client. Of
- course the client's red zone can be checked by the skin, eg.
+ course the client's red zone can be checked by the tool, eg.
by using addressibility maps, but not by the mechanism implemented
here, which merely checks at the time of freeing that the red
@@ -262,5 +262,5 @@ void ensure_mm_init ( void )
arena_init ( &vg_arena[VG_AR_CORE], "core", 1, True, 262144, False );
- arena_init ( &vg_arena[VG_AR_SKIN], "skin", 1, True, 262144, False );
+ arena_init ( &vg_arena[VG_AR_SKIN], "tool", 1, True, 262144, False );
arena_init ( &vg_arena[VG_AR_SYMTAB], "symtab", 1, True, 262144, False );
@@ -1359,5 +1359,5 @@ void* VG_(arena_realloc) ( ArenaId aid,
/*------------------------------------------------------------*/
-/* All just wrappers to avoid exposing arenas to skins */
+/* All just wrappers to avoid exposing arenas to tools */
void* VG_(malloc) ( Int nbytes )
--- valgrind/coregrind/vg_mylibc.c #1.64:1.65
@@ -1035,5 +1035,5 @@ __inline__ Char* VG_(arena_strdup) ( Are
}
-/* Wrapper to avoid exposing skins to ArenaId's */
+/* Wrapper to avoid exposing tools to ArenaId's */
Char* VG_(strdup) ( const Char* s )
{
--- valgrind/coregrind/vg_needs.c #1.14:1.15
@@ -1,5 +1,5 @@
/*--------------------------------------------------------------------*/
-/*--- Stuff relating to skin data structures. ---*/
+/*--- Stuff relating to tool data structures. ---*/
/*--- vg_needs.c ---*/
/*--------------------------------------------------------------------*/
@@ -34,5 +34,5 @@
/* ---------------------------------------------------------------------
- Skin data structure initialisation
+ Tool data structure initialisation
------------------------------------------------------------------ */
--- valgrind/coregrind/vg_replace_malloc.c #1.17:1.18
@@ -37,5 +37,5 @@
be called from within Valgrind.
- This file can be #included into a skin that wishes to know about
+ This file can be #included into a tool that wishes to know about
calls to malloc(). It should define functions SK_(malloc) et al
that will be called.
--- valgrind/coregrind/vg_scheduler.c #1.137:1.138
@@ -1115,5 +1115,5 @@ VgSchedReturnCode VG_(scheduler) ( void
VG_(exitcode) = VG_(threads)[tid].m_ebx; /* syscall arg1 */
- /* Only run __libc_freeres if the skin says it's ok and
+ /* Only run __libc_freeres if the tool says it's ok and
it hasn't been overridden with --run-libc-freeres=no
on the command line. */
@@ -2962,8 +2962,8 @@ void do_client_request ( ThreadId tid )
}
- /* Note: for skins that replace malloc() et al, we want to call
+ /* Note: for tools that replace malloc() et al, we want to call
the replacement versions. For those that don't, we want to call
VG_(cli_malloc)() et al. We do this by calling SK_(malloc)(), which
- malloc-replacing skins must replace, but have its default definition
+ malloc-replacing tools must replace, but have its default definition
call */
@@ -3281,5 +3281,5 @@ void do_client_request ( ThreadId tid )
if (!whined) {
- // Allow for requests in core, but defined by skins, which
+ // Allow for requests in core, but defined by tools, which
// have 0 and 0 in their two high bytes.
Char c1 = (arg[0] >> 24) & 0xff;
--- valgrind/coregrind/vg_signals.c #1.57:1.58
@@ -985,5 +985,5 @@ void vg_push_signal_frame ( ThreadId tid
sigNo, signame(sigNo), tid );
- /* Signal delivery to skins */
+ /* Signal delivery to tools */
VG_TRACK( pre_deliver_signal, tid, sigNo, /*alt_stack*/False );
@@ -991,5 +991,5 @@ void vg_push_signal_frame ( ThreadId tid
esp_top_of_frame = tst->m_esp;
- /* Signal delivery to skins */
+ /* Signal delivery to tools */
VG_TRACK( pre_deliver_signal, tid, sigNo, /*alt_stack*/True );
}
@@ -1171,5 +1171,5 @@ Int vg_pop_signal_frame ( ThreadId tid )
VG_(proxy_setsigmask)(tid);
- /* Notify skins */
+ /* Notify tools */
VG_TRACK( post_deliver_signal, tid, sigNo );
@@ -1686,5 +1686,5 @@ void vg_sync_signalhandler ( Int sigNo,
using some memory which had not previously been used.
This catches those faults, makes the memory accessible,
- and calls the skin to initialize that page.
+ and calls the tool to initialize that page.
*/
static Int recursion = 0;
--- valgrind/coregrind/vg_symtab2.c #1.73:1.74
@@ -1545,5 +1545,5 @@ Bool get_fnname ( Bool demangle, Addr a,
}
-/* This is available to skins... always demangle C++ names,
+/* This is available to tools... always demangle C++ names,
match anywhere in function, but don't show offsets. */
Bool VG_(get_fnname) ( Addr a, Char* buf, Int nbuf )
@@ -1554,5 +1554,5 @@ Bool VG_(get_fnname) ( Addr a, Char* buf
}
-/* This is available to skins... always demangle C++ names,
+/* This is available to tools... always demangle C++ names,
match anywhere in function, and show offset if nonzero. */
Bool VG_(get_fnname_w_offset) ( Addr a, Char* buf, Int nbuf )
@@ -1563,5 +1563,5 @@ Bool VG_(get_fnname_w_offset) ( Addr a,
}
-/* This is available to skins... always demangle C++ names,
+/* This is available to tools... always demangle C++ names,
only succeed if 'a' matches first instruction of function,
and don't show offsets. */
--- valgrind/coregrind/vg_symtypes.c #1.4:1.5
@@ -690,5 +690,5 @@ Char *VG_(describe_addr)(ThreadId tid, A
bufsz *= 2;
- /* use skin malloc so that the skin client can free it */
+ /* use tool malloc so that the skin client can free it */
n = VG_(malloc)(bufsz);
if (buf != NULL && bufidx != 0)
--- valgrind/coregrind/vg_to_ucode.c #1.123:1.124
@@ -7173,6 +7173,6 @@ Int VG_(disBB) ( UCodeBlock* cb, Addr ei
* into the `extra4b' field of the basic-block-ending JMP.
*
- * The INCEIPs and JMP.extra4b fields allows a skin to track x86
- * instruction sizes, important for some skins (eg. cache simulation).
+ * The INCEIPs and JMP.extra4b fields allows a tool to track x86
+ * instruction sizes, important for some tools (eg. Cachegrind).
*/
if (VG_(clo_single_step)) {
--- valgrind/include/valgrind.h #1.24:1.25
@@ -160,5 +160,5 @@ typedef
VG_USERREQ__COUNT_ERRORS = 0x1201,
- /* These are useful and can be interpreted by any skin that tracks
+ /* These are useful and can be interpreted by any tool that tracks
malloc() et al, by using vg_replace_malloc.c. */
VG_USERREQ__MALLOCLIKE_BLOCK = 0x1301,
@@ -274,6 +274,6 @@ VALGRIND_PRINTF_BACKTRACE(const char *fo
-/* Counts the number of errors that have been recorded by a skin. Nb:
- the skin must record the errors with VG_(maybe_record_error)() or
+/* Counts the number of errors that have been recorded by a tool. Nb:
+ the tool must record the errors with VG_(maybe_record_error)() or
VG_(unique_error)() for them to be counted. */
#define VALGRIND_COUNT_ERRORS \
--- valgrind/include/vg_profile.c #1.10:1.11
@@ -1,6 +1,6 @@
/*--------------------------------------------------------------------*/
-/*--- Profiling machinery. #include this file into a skin to ---*/
-/*--- enable --profile=yes, but not for release versions of skins, ---*/
+/*--- Profiling machinery. #include this file into a tool to ---*/
+/*--- enable --profile=yes, but not for release versions of tools, ---*/
/*--- because it uses glibc code. ---*/
/*--- vg_profile.c ---*/
@@ -77,5 +77,5 @@ void VGP_(register_profile_event) ( Int
VG_(printf)("\nProfile event #%d being registered as `%s'\n"
"already registered as `%s'.\n"
- "Note that skin and core event numbers must not overlap.\n",
+ "Note that tool and core event numbers must not overlap.\n",
n, name, vgp_names[n]);
VG_(skin_panic)("profile event already registered");
--- valgrind/memcheck/mac_malloc_wrappers.c #1.9:1.10
@@ -45,5 +45,5 @@ static UInt cmalloc_bs_mallocd = 0;
UInt VG_(vg_malloc_redzone_szB) = 16;
-/* Function pointers for the two skins to track interesting events. */
+/* Function pointers for the two tools to track interesting events. */
void (*MAC_(new_mem_heap)) ( Addr a, UInt len, Bool is_inited ) = NULL;
void (*MAC_(ban_mem_heap)) ( Addr a, UInt len ) = NULL;
--- valgrind/memcheck/mac_shared.h #1.16:1.17
@@ -155,5 +155,5 @@ typedef
/*------------------------------------------------------------*/
-/*--- Profiling of skins and memory events ---*/
+/*--- Profiling of tools and memory events ---*/
/*------------------------------------------------------------*/
@@ -164,5 +164,5 @@ typedef
VgpESPAdj
}
- VgpSkinCC;
+ VgpToolCC;
/* Define to collect detailed performance info. */
@@ -271,5 +271,5 @@ extern void MAC_(print_common_debug_usag
extern VgHashTable MAC_(malloc_list);
-/* Function pointers for the two skins to track interesting events. */
+/* Function pointers for the two tools to track interesting events. */
extern void (*MAC_(new_mem_heap)) ( Addr a, UInt len, Bool is_inited );
extern void (*MAC_(ban_mem_heap)) ( Addr a, UInt len );
--- valgrind/memcheck/memcheck.h #1.17:1.18
@@ -83,5 +83,5 @@ typedef
/* These two have been moved into core, because they are useful for
- any skin that tracks heap blocks. Hence the suffix. But they're
+ any tool that tracks heap blocks. Hence the suffix. But they're
still here for backwards compatibility, although Valgrind will
abort with an explanatory message if you use them. */
--- valgrind/tests/filter_stderr_basic #1.14:1.15
@@ -8,5 +8,5 @@
# Remove "<name>, a <description> for x86-linux." line and the following
-# copyright notice line. Works for skin and core intro lines.
+# copyright notice line. Works for tool and core intro lines.
sed "/^.*, .* for x86-linux\./ , /./ d" |
|
|
From: Jeremy F. <je...@go...> - 2004-01-23 23:09:35
|
CVS commit by fitzhardinge:
Fix bug 73219. This adds a general mechanism for querying the host CPU's
capabilities, and uses it to see if it has SSE/SSE2/fxsave support before
trying to use fxsave at startup.
M +35 -0 coregrind/vg_include.h 1.171
M +8 -8 coregrind/vg_main.c 1.139
M +88 -0 coregrind/vg_to_ucode.c 1.125
M +2 -2 include/vg_skin.h.base 1.10
--- valgrind/coregrind/vg_include.h #1.170:1.171
@@ -1137,4 +1137,39 @@ extern Bool VG_(is_chained_jumpsite)
------------------------------------------------------------------ */
+#define VG_X86_FEAT_FPU (0*32 + 0)
+#define VG_X86_FEAT_VME (0*32 + 1)
+#define VG_X86_FEAT_DE (0*32 + 2)
+#define VG_X86_FEAT_PSE (0*32 + 3)
+#define VG_X86_FEAT_TSC (0*32 + 4)
+#define VG_X86_FEAT_MSR (0*32 + 5)
+#define VG_X86_FEAT_PAE (0*32 + 6)
+#define VG_X86_FEAT_MCE (0*32 + 7)
+#define VG_X86_FEAT_CX8 (0*32 + 8)
+#define VG_X86_FEAT_APIC (0*32 + 9)
+#define VG_X86_FEAT_SEP (0*32 + 11)
+#define VG_X86_FEAT_MTRR (0*32 + 12)
+#define VG_X86_FEAT_PGE (0*32 + 13)
+#define VG_X86_FEAT_MCA (0*32 + 14)
+#define VG_X86_FEAT_CMOV (0*32 + 15)
+#define VG_X86_FEAT_PAT (0*32 + 16)
+#define VG_X86_FEAT_PSE36 (0*32 + 17)
+#define VG_X86_FEAT_CLFSH (0*32 + 19)
+#define VG_X86_FEAT_DS (0*32 + 21)
+#define VG_X86_FEAT_ACPI (0*32 + 22)
+#define VG_X86_FEAT_MMX (0*32 + 23)
+#define VG_X86_FEAT_FXSR (0*32 + 24)
+#define VG_X86_FEAT_SSE (0*32 + 25)
+#define VG_X86_FEAT_SSE2 (0*32 + 26)
+#define VG_X86_FEAT_SS (0*32 + 27)
+#define VG_X86_FEAT_HT (0*32 + 28)
+#define VG_X86_FEAT_TM (0*32 + 29)
+#define VG_X86_FEAT_PBE (0*32 + 31)
+
+#define VG_X86_FEAT_EST (1*32 + 7)
+#define VG_X86_FEAT_TM2 (1*32 + 8)
+#define VG_X86_FEAT_CNXTID (1*32 + 10)
+
+Bool VG_(cpu_has_feature)(UInt feat);
+
extern Int VG_(disBB) ( UCodeBlock* cb, Addr eip0 );
--- valgrind/coregrind/vg_main.c #1.138:1.139
@@ -503,12 +503,7 @@ Int VG_(exitcode) = 0;
Bool VG_(logging_to_filedes) = True;
-/* Is this a SSE/SSE2-capable CPU? If so, we had better save/restore
- the SSE state all over the place. This is set up very early, in
- vg_startup.S. We have to determine it early since we can't even
- correctly snapshot the startup machine state without it. */
-/* Initially True. Safer to err on the side of SSEness and get SIGILL
- than to not notice for some reason that we have SSE and get weird
- errors later on. */
-Bool VG_(have_ssestate) = True;
+/* This is set early to inidicate whether this CPU has the
+ SSE/fxsave/fxrestor features. */
+Bool VG_(have_ssestate);
@@ -1395,4 +1390,9 @@ void VG_(main) ( const KickstartParams *
VG_(m_state_static)[60/4] = kp->client_eip;
+ /* I assume that if we have SSE2 we also have SSE */
+ VG_(have_ssestate) =
+ VG_(cpu_has_feature)(VG_X86_FEAT_FXSR) &&
+ VG_(cpu_has_feature)(VG_X86_FEAT_SSE);
+
/* set up an initial FPU state (doesn't really matter what it is,
so long as it's somewhat valid) */
--- valgrind/coregrind/vg_to_ucode.c #1.124:1.125
@@ -41,4 +41,92 @@
/*------------------------------------------------------------*/
+/*--- CPU feature set stuff ---*/
+/*--- This is a little out of place here, but it will do ---*/
+/*--- for now. ---*/
+/*------------------------------------------------------------*/
+
+#define VG_N_FEATURE_WORDS 2
+
+static Int cpuid_level = -2; /* -2 -> not initialized */
+static UInt cpu_features[VG_N_FEATURE_WORDS];
+
+/* Standard macro to see if a specific flag is changeable */
+static inline Bool flag_is_changeable(UInt flag)
+{
+ UInt f1, f2;
+
+ asm("pushfl\n\t"
+ "pushfl\n\t"
+ "popl %0\n\t"
+ "movl %0,%1\n\t"
+ "xorl %2,%0\n\t"
+ "pushl %0\n\t"
+ "popfl\n\t"
+ "pushfl\n\t"
+ "popl %0\n\t"
+ "popfl\n\t"
+ : "=&r" (f1), "=&r" (f2)
+ : "ir" (flag));
+
+ return ((f1^f2) & flag) != 0;
+}
+
+
+/* Probe for the CPUID instruction */
+static Bool has_cpuid(void)
+{
+ return flag_is_changeable(EFlagID);
+}
+
+static inline UInt cpuid_eax(UInt eax)
+{
+ asm("cpuid" : "=a" (eax) : "0" (eax) : "bx", "cx", "dx");
+ return eax;
+}
+
+static inline void cpuid(UInt eax,
+ UInt *eax_ret, UInt *ebx_ret, UInt *ecx_ret, UInt *edx_ret)
+{
+ UInt ebx, ecx, edx;
+
+ asm("cpuid" : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) : "0" (eax));
+
+ if (eax_ret)
+ *eax_ret = eax;
+ if (ebx_ret)
+ *ebx_ret = ebx;
+ if (ecx_ret)
+ *ecx_ret = ecx;
+ if (edx_ret)
+ *edx_ret = edx;
+}
+
+static void get_cpu_features(void)
+{
+ if (!has_cpuid()) {
+ cpuid_level = -1;
+ return;
+ }
+
+ cpuid_level = cpuid_eax(0);
+
+ if (cpuid_level >= 1)
+ cpuid(1, NULL, NULL, &cpu_features[1], &cpu_features[0]);
+}
+
+Bool VG_(cpu_has_feature)(UInt feature)
+{
+ UInt word = feature / 32;
+ UInt bit = feature % 32;
+
+ if (cpuid_level == -2)
+ get_cpu_features();
+
+ vg_assert(word >= 0 && word < VG_N_FEATURE_WORDS);
+
+ return !!(cpu_features[word] & (1 << bit));
+}
+
+/*------------------------------------------------------------*/
/*--- Here so it can be inlined everywhere. ---*/
/*------------------------------------------------------------*/
--- valgrind/include/vg_skin.h.base #1.9:1.10
@@ -1,4 +1,3 @@
-
-/*--------------------------------------------------------------------*/
+/*-*- c -*- ----------------------------------------------------------*/
/*--- The only header your skin will ever need to #include... ---*/
/*--- vg_skin.h ---*/
@@ -955,4 +954,5 @@
#define EFlagD (1 << 10) /* direction */
#define EFlagO (1 << 11) /* overflow */
+#define EFlagID (1 << 21) /* changable if CPUID exists */
/* Liveness of general purpose registers, useful for code generation.
|
|
From: Dirk M. <mu...@kd...> - 2004-01-24 22:33:28
|
CVS commit by mueller: don't mess with prefix. CCMAIL: 727...@bu... M +1 -1 valgrind.spec.in 1.12 --- valgrind/valgrind.spec.in #1.11:1.12 @@ -30,5 +30,5 @@ %install -make install prefix=$RPM_BUILD_ROOT/usr +make install DESTDIR=$RPM_BUILD_ROOT %files |
|
From: Nicholas N. <nj...@ca...> - 2004-02-01 17:30:06
|
CVS commit by nethercote:
Killed the terminally wounded --stop-after option.
M +2 -3 FAQ.txt 1.20
M +0 -1 coregrind/Makefile.am 1.65
M +2 -31 coregrind/vg_include.h 1.179
M +2 -70 coregrind/vg_main.c 1.144
M +1 -30 coregrind/vg_scheduler.c 1.141
M +0 -22 coregrind/vg_translate.c 1.69
M +0 -7 coregrind/docs/coregrind_core.html 1.26
R coregrind/vg_startup.S 1.22
--- valgrind/FAQ.txt #1.19:1.20
@@ -200,7 +200,6 @@
As of 1.9.6, Valgrind only uses these variables with
- --trace-children=no, when executing execve() or using the
- --stop-after=yes flag. This should reduce the potential for
- problems.
+ --trace-children=no or when executing execve(). This should
+ reduce the potential for problems.
-----------------------------------------------------------------
--- valgrind/coregrind/Makefile.am #1.64:1.65
@@ -64,5 +64,4 @@
vg_dummy_profile.c \
vg_signals.c \
- vg_startup.S \
vg_symtab2.c \
vg_dwarf.c \
--- valgrind/coregrind/vg_include.h #1.178:1.179
@@ -244,6 +244,4 @@ extern Bool VG_(clo_trace_sched);
(some), 2 (all) */
extern Int VG_(clo_trace_pthread_level);
-/* Stop after this many basic blocks. default: Infinity. */
-extern ULong VG_(clo_stop_after);
/* Display gory details for the k'th most popular error. default:
Infinity. */
@@ -823,5 +821,5 @@ typedef
Although the segment registers are 16 bits long, storage
- management here, in VG_(baseBlock) and in VG_(m_state_static) is
+ management here and in VG_(baseBlock) is
simplified if we pretend they are 32 bits. */
UInt m_cs;
@@ -911,6 +909,4 @@ typedef
VgSrc_ExitSyscall, /* client called exit(). This is the normal
route out. */
- VgSrc_BbsDone, /* In a debugging run, the specified number of
- bbs has been completed. */
VgSrc_FatalSig /* Killed by the default action of a fatal
signal */
@@ -1337,5 +1333,5 @@ extern Addr VG_(code_redirect) (Addr o
/* Is this a SSE/SSE2-capable CPU? If so, we had better save/restore
the SSE state all over the place. This is set up very early, in
- vg_startup.S. We have to determine it early since we can't even
+ main(). We have to determine it early since we can't even
correctly snapshot the startup machine state without it. */
extern Bool VG_(have_ssestate);
@@ -1373,23 +1369,4 @@ extern Int VG_(clexecfd);
extern const Char *VG_(libdir);
-/* A structure used as an intermediary when passing the simulated
- CPU's state to VG_(switch_to_real_CPU)(), for --stop-after=yes.
- Stuff is copied from baseBlock to here, because it's much easier
- to copy the state into the real registers from this structure than
- the baseBlock, because it's layout is simpler.
- Alignment: the SSE state must be 16-byte aligned. We ask for the whole
- struct to be 16-byte aligned, and the SSE state starts at the 6+8+1+1th
- == 16th word, so it too must be 16-byte aligned. Consequence: change
- this struct only _very carefully_ ! See also above comment re masking
- MXCSR.
-*/
-__attribute__ ((aligned (16)))
-extern UInt VG_(m_state_static) [6 /* segment regs, Intel order */
- + 8 /* int regs, in Intel order */
- + 1 /* %eflags */
- + 1 /* %eip */
- + VG_SIZE_OF_SSESTATE_W /* SSE state */
- ];
-
/* Determine if %esp adjustment must be noted */
extern Bool VG_(need_to_handle_esp_assignment) ( void );
@@ -1644,10 +1621,4 @@ extern Int VG_(clone) ( Int (*fn)(void *
/* ---------------------------------------------------------------------
- Exports of vg_startup.S
- ------------------------------------------------------------------ */
-
-extern void VG_(switch_to_real_CPU) ( void );
-
-/* ---------------------------------------------------------------------
Exports of vg_dispatch.S
------------------------------------------------------------------ */
--- valgrind/coregrind/vg_main.c #1.143:1.144
@@ -164,6 +164,4 @@ UInt VG_(dispatch_ctr);
/* 64-bit counter for the number of basic blocks done. */
ULong VG_(bbs_done);
-/* 64-bit counter for the number of bbs to go before a debug exit. */
-ULong VG_(bbs_to_go);
/* This is the ThreadId of the last thread the scheduler ran. */
@@ -1426,5 +1424,4 @@ Bool VG_(clo_trace_symtab) = False;
Bool VG_(clo_trace_sched) = False;
Int VG_(clo_trace_pthread_level) = 0;
-ULong VG_(clo_stop_after) = 1000000000000000LL;
Int VG_(clo_dump_error) = 0;
Int VG_(clo_backtrace_size) = 4;
@@ -1529,6 +1526,4 @@ void usage ( Bool debug_help )
" --trace-sched=no|yes show thread scheduler details? [no]\n"
" --trace-pthread=none|some|all show pthread event details? [none]\n"
-" --stop-after=<number> switch to real CPU after executing\n"
-" <number> basic blocks [infinity]\n"
" --wait-for-gdb=yes|no pause on startup to wait for gdb attach\n"
"\n"
@@ -1861,7 +1856,4 @@ static void process_cmd_line_options
VG_(clo_lowlat_syscalls) = False;
- else if (VG_CLO_STREQN(13, arg, "--stop-after="))
- VG_(clo_stop_after) = VG_(atoll)(&arg[13]);
-
else if (VG_CLO_STREQN(13, arg, "--dump-error="))
VG_(clo_dump_error) = (Int)VG_(atoll)(&arg[13]);
@@ -2059,6 +2051,4 @@ static void process_cmd_line_options
" as it doesn't generate errors.");
}
-
- VG_(bbs_to_go) = VG_(clo_stop_after);
}
@@ -2099,5 +2089,5 @@ static void setup_file_descriptors(void)
/*====================================================================*/
-/*=== m_state_static + baseBlock: definition, setup, copying ===*/
+/*=== baseBlock: definition + setup ===*/
/*====================================================================*/
@@ -2189,13 +2179,4 @@ Int VG_(noncompact_helper_offsets)[MAX_
UInt VG_(baseBlock)[VG_BASEBLOCK_WORDS];
-/* See comment about this in vg_include.h. Change only with great care. */
-__attribute__ ((aligned (16)))
-UInt VG_(m_state_static) [6 /* segment regs, Intel order */
- + 8 /* int regs, in Intel order */
- + 1 /* %eflags */
- + 1 /* %eip */
- + VG_SIZE_OF_SSESTATE_W /* FPU state */
- ];
-
/* Words. */
static Int baB_off = 0;
@@ -2225,34 +2206,4 @@ Int VG_(extractDflag)(UInt eflags)
}
-static void copy_baseBlock_to_m_state_static( void )
-{
- Int i;
- VG_(m_state_static)[ 0/4] = VG_(baseBlock)[VGOFF_(m_cs)];
- VG_(m_state_static)[ 4/4] = VG_(baseBlock)[VGOFF_(m_ss)];
- VG_(m_state_static)[ 8/4] = VG_(baseBlock)[VGOFF_(m_ds)];
- VG_(m_state_static)[12/4] = VG_(baseBlock)[VGOFF_(m_es)];
- VG_(m_state_static)[16/4] = VG_(baseBlock)[VGOFF_(m_fs)];
- VG_(m_state_static)[20/4] = VG_(baseBlock)[VGOFF_(m_gs)];
-
- VG_(m_state_static)[24/4] = VG_(baseBlock)[VGOFF_(m_eax)];
- VG_(m_state_static)[28/4] = VG_(baseBlock)[VGOFF_(m_ecx)];
- VG_(m_state_static)[32/4] = VG_(baseBlock)[VGOFF_(m_edx)];
- VG_(m_state_static)[36/4] = VG_(baseBlock)[VGOFF_(m_ebx)];
- VG_(m_state_static)[40/4] = VG_(baseBlock)[VGOFF_(m_esp)];
- VG_(m_state_static)[44/4] = VG_(baseBlock)[VGOFF_(m_ebp)];
- VG_(m_state_static)[48/4] = VG_(baseBlock)[VGOFF_(m_esi)];
- VG_(m_state_static)[52/4] = VG_(baseBlock)[VGOFF_(m_edi)];
-
- VG_(m_state_static)[56/4]
- = VG_(insertDflag)(VG_(baseBlock)[VGOFF_(m_eflags)],
- VG_(baseBlock)[VGOFF_(m_dflag)]);
- VG_(m_state_static)[60/4] = VG_(baseBlock)[VGOFF_(m_eip)];
-
- for (i = 0; i < VG_SIZE_OF_SSESTATE_W; i++)
- VG_(m_state_static)[64/4 + i]
- = VG_(baseBlock)[VGOFF_(m_ssestate) + i];
-}
-
-
/* Returns the offset, in words. */
static Int alloc_BaB ( Int words )
@@ -2873,5 +2824,5 @@ int main(int argc, char **argv)
//--------------------------------------------------------------
- // Set up baseBlock, copy machine state (m_state_static)
+ // Set up baseBlock
// p: {pre,post}_clo_init() [for tool helper registration]
// load_client() [for 'client_eip']
@@ -3105,23 +3056,4 @@ int main(int argc, char **argv)
break;
- case VgSrc_BbsDone:
- /* Tricky; we have to try and switch back to the real CPU.
- This is all very dodgy and won't work at all in the
- presence of threads, or if the client happened to be
- running a signal handler. */
- /* Prepare to restore state to the real CPU. */
- VG_(sigshutdown_actions)();
- VG_(load_thread_state)(1 /* root thread */ );
- copy_baseBlock_to_m_state_static();
-
- VG_(proxy_shutdown)();
-
- /* This pushes a return address on the simulator's stack,
- which is abandoned. We call vg_sigshutdown_actions() at
- the end of vg_switch_to_real_CPU(), so as to ensure that
- the original stack and machine state is restored before
- the real signal mechanism is restored. */
- VG_(switch_to_real_CPU)();
-
case VgSrc_FatalSig:
/* We were killed by a fatal signal, so replicate the effect */
--- valgrind/coregrind/vg_scheduler.c #1.140:1.141
@@ -518,5 +518,4 @@ UInt run_thread_for_a_while ( ThreadId t
vg_assert(VG_(is_valid_tid)(tid));
vg_assert(VG_(threads)[tid].status == VgTs_Runnable);
- vg_assert(VG_(bbs_to_go) > 0);
vg_assert(!VG_(scheduler_jmpbuf_valid));
@@ -902,8 +901,4 @@ VgSchedReturnCode VG_(scheduler) ( void
threads but some are blocked on I/O. */
- /* Was a debug-stop requested? */
- if (VG_(bbs_to_go) == 0)
- goto debug_stop;
-
/* Do the following loop until a runnable thread is found, or
deadlock is detected. */
@@ -997,8 +992,5 @@ VgSchedReturnCode VG_(scheduler) ( void
always get at least one decrement even if nothing happens.
*/
- if (VG_(bbs_to_go) >= VG_SCHEDULING_QUANTUM)
VG_(dispatch_ctr) = VG_SCHEDULING_QUANTUM + 1;
- else
- VG_(dispatch_ctr) = (UInt)VG_(bbs_to_go) + 1;
/* ... and remember what we asked for. */
@@ -1187,5 +1179,4 @@ VgSchedReturnCode VG_(scheduler) ( void
done_this_time = (Int)dispatch_ctr_SAVED - (Int)VG_(dispatch_ctr) - 1;
vg_assert(done_this_time >= 0);
- VG_(bbs_to_go) -= (ULong)done_this_time;
VG_(bbs_done) += (ULong)done_this_time;
@@ -1208,7 +1199,4 @@ VgSchedReturnCode VG_(scheduler) ( void
simply by doing nothing, causing us to arrive back at
Phase 1. */
- if (VG_(bbs_to_go) == 0) {
- goto debug_stop;
- }
break;
@@ -1217,7 +1205,4 @@ VgSchedReturnCode VG_(scheduler) ( void
simply by doing nothing, causing us to arrive back at
Phase 1. */
- if (VG_(bbs_to_go) == 0) {
- goto debug_stop;
- }
vg_assert(VG_(dispatch_ctr) == 0);
break;
@@ -1257,18 +1242,4 @@ VgSchedReturnCode VG_(scheduler) ( void
VG_(core_panic)("scheduler: post-main-loop ?!");
/* NOTREACHED */
-
- debug_stop:
- /* If we exited because of a debug stop, print the translation
- of the last block executed -- by translating it again, and
- throwing away the result. */
- VG_(printf)(
- "======vvvvvvvv====== LAST TRANSLATION ======vvvvvvvv======\n");
- VG_(translate)( tid,
- VG_(threads)[tid].m_eip, NULL, NULL, NULL, NULL );
- VG_(printf)("\n");
- VG_(printf)(
- "======^^^^^^^^====== LAST TRANSLATION ======^^^^^^^^======\n");
-
- return VgSrc_BbsDone;
}
--- valgrind/coregrind/vg_translate.c #1.68:1.69
@@ -1510,26 +1510,4 @@ static void vg_improve ( UCodeBlock* cb
FlagSet future_dead_flags;
-# if 0
- /* DEBUGGING HOOK */
- {
- static int n_done=0;
- if (VG_(clo_stop_after) > 1000000000) {
- if (n_done > (VG_(clo_stop_after) - 1000000000)) {
- dis=False;
- VG_(clo_trace_codegen) = 0;
- return;
- }
- if (n_done == (VG_(clo_stop_after) - 1000000000)) {
- VG_(printf)("\n");
- VG_(pp_UCodeBlock) ( cb, "Incoming:" );
- dis = True;
- VG_(clo_trace_codegen) = 31;
- }
- n_done++;
- }
- }
- /* end DEBUGGING HOOK */
-# endif /* 0 */
-
if (dis)
VG_(printf) ("Improvements:\n");
--- valgrind/coregrind/docs/coregrind_core.html #1.25:1.26
@@ -925,11 +925,4 @@
<p>
- <li><code>--stop-after=<number></code>
- [default: infinity, more or less]
- <p>After <number> basic blocks have been executed, shut down
- Valgrind and switch back to running the client on the real CPU.
- </li><br>
- <p>
-
<li><code>--dump-error=<number></code> [default: inactive]
<p>After the program has exited, show gory details of the
|