You can subscribe to this list here.
| 2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
(122) |
Nov
(152) |
Dec
(69) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2003 |
Jan
(6) |
Feb
(25) |
Mar
(73) |
Apr
(82) |
May
(24) |
Jun
(25) |
Jul
(10) |
Aug
(11) |
Sep
(10) |
Oct
(54) |
Nov
(203) |
Dec
(182) |
| 2004 |
Jan
(307) |
Feb
(305) |
Mar
(430) |
Apr
(312) |
May
(187) |
Jun
(342) |
Jul
(487) |
Aug
(637) |
Sep
(336) |
Oct
(373) |
Nov
(441) |
Dec
(210) |
| 2005 |
Jan
(385) |
Feb
(480) |
Mar
(636) |
Apr
(544) |
May
(679) |
Jun
(625) |
Jul
(810) |
Aug
(838) |
Sep
(634) |
Oct
(521) |
Nov
(965) |
Dec
(543) |
| 2006 |
Jan
(494) |
Feb
(431) |
Mar
(546) |
Apr
(411) |
May
(406) |
Jun
(322) |
Jul
(256) |
Aug
(401) |
Sep
(345) |
Oct
(542) |
Nov
(308) |
Dec
(481) |
| 2007 |
Jan
(427) |
Feb
(326) |
Mar
(367) |
Apr
(255) |
May
(244) |
Jun
(204) |
Jul
(223) |
Aug
(231) |
Sep
(354) |
Oct
(374) |
Nov
(497) |
Dec
(362) |
| 2008 |
Jan
(322) |
Feb
(482) |
Mar
(658) |
Apr
(422) |
May
(476) |
Jun
(396) |
Jul
(455) |
Aug
(267) |
Sep
(280) |
Oct
(253) |
Nov
(232) |
Dec
(304) |
| 2009 |
Jan
(486) |
Feb
(470) |
Mar
(458) |
Apr
(423) |
May
(696) |
Jun
(461) |
Jul
(551) |
Aug
(575) |
Sep
(134) |
Oct
(110) |
Nov
(157) |
Dec
(102) |
| 2010 |
Jan
(226) |
Feb
(86) |
Mar
(147) |
Apr
(117) |
May
(107) |
Jun
(203) |
Jul
(193) |
Aug
(238) |
Sep
(300) |
Oct
(246) |
Nov
(23) |
Dec
(75) |
| 2011 |
Jan
(133) |
Feb
(195) |
Mar
(315) |
Apr
(200) |
May
(267) |
Jun
(293) |
Jul
(353) |
Aug
(237) |
Sep
(278) |
Oct
(611) |
Nov
(274) |
Dec
(260) |
| 2012 |
Jan
(303) |
Feb
(391) |
Mar
(417) |
Apr
(441) |
May
(488) |
Jun
(655) |
Jul
(590) |
Aug
(610) |
Sep
(526) |
Oct
(478) |
Nov
(359) |
Dec
(372) |
| 2013 |
Jan
(467) |
Feb
(226) |
Mar
(391) |
Apr
(281) |
May
(299) |
Jun
(252) |
Jul
(311) |
Aug
(352) |
Sep
(481) |
Oct
(571) |
Nov
(222) |
Dec
(231) |
| 2014 |
Jan
(185) |
Feb
(329) |
Mar
(245) |
Apr
(238) |
May
(281) |
Jun
(399) |
Jul
(382) |
Aug
(500) |
Sep
(579) |
Oct
(435) |
Nov
(487) |
Dec
(256) |
| 2015 |
Jan
(338) |
Feb
(357) |
Mar
(330) |
Apr
(294) |
May
(191) |
Jun
(108) |
Jul
(142) |
Aug
(261) |
Sep
(190) |
Oct
(54) |
Nov
(83) |
Dec
(22) |
| 2016 |
Jan
(49) |
Feb
(89) |
Mar
(33) |
Apr
(50) |
May
(27) |
Jun
(34) |
Jul
(53) |
Aug
(53) |
Sep
(98) |
Oct
(206) |
Nov
(93) |
Dec
(53) |
| 2017 |
Jan
(65) |
Feb
(82) |
Mar
(102) |
Apr
(86) |
May
(187) |
Jun
(67) |
Jul
(23) |
Aug
(93) |
Sep
(65) |
Oct
(45) |
Nov
(35) |
Dec
(17) |
| 2018 |
Jan
(26) |
Feb
(35) |
Mar
(38) |
Apr
(32) |
May
(8) |
Jun
(43) |
Jul
(27) |
Aug
(30) |
Sep
(43) |
Oct
(42) |
Nov
(38) |
Dec
(67) |
| 2019 |
Jan
(32) |
Feb
(37) |
Mar
(53) |
Apr
(64) |
May
(49) |
Jun
(18) |
Jul
(14) |
Aug
(53) |
Sep
(25) |
Oct
(30) |
Nov
(49) |
Dec
(31) |
| 2020 |
Jan
(87) |
Feb
(45) |
Mar
(37) |
Apr
(51) |
May
(99) |
Jun
(36) |
Jul
(11) |
Aug
(14) |
Sep
(20) |
Oct
(24) |
Nov
(40) |
Dec
(23) |
| 2021 |
Jan
(14) |
Feb
(53) |
Mar
(85) |
Apr
(15) |
May
(19) |
Jun
(3) |
Jul
(14) |
Aug
(1) |
Sep
(57) |
Oct
(73) |
Nov
(56) |
Dec
(22) |
| 2022 |
Jan
(3) |
Feb
(22) |
Mar
(6) |
Apr
(55) |
May
(46) |
Jun
(39) |
Jul
(15) |
Aug
(9) |
Sep
(11) |
Oct
(34) |
Nov
(20) |
Dec
(36) |
| 2023 |
Jan
(79) |
Feb
(41) |
Mar
(99) |
Apr
(169) |
May
(48) |
Jun
(16) |
Jul
(16) |
Aug
(57) |
Sep
(19) |
Oct
|
Nov
|
Dec
|
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
|
1
(13) |
2
(33) |
3
(25) |
4
(22) |
5
(22) |
6
(21) |
7
(19) |
|
8
(29) |
9
(34) |
10
(29) |
11
(37) |
12
(36) |
13
(28) |
14
(25) |
|
15
(28) |
16
(23) |
17
(36) |
18
(21) |
19
(12) |
20
(14) |
21
(10) |
|
22
(7) |
23
(15) |
24
(41) |
25
(15) |
26
(9) |
27
(7) |
28
(6) |
|
29
(16) |
30
(24) |
31
(22) |
|
|
|
|
|
From: <sv...@va...> - 2005-05-14 23:28:46
|
Author: njn
Date: 2005-05-15 00:28:42 +0100 (Sun, 15 May 2005)
New Revision: 3714
Modified:
trunk/coregrind/vg_scheduler.c
Log:
Remove call to VGA_(cleanup_thread)() from VG_(exit_thread)(), since
mostly_clear_thread_record() calls it anyway.
Modified: trunk/coregrind/vg_scheduler.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/vg_scheduler.c 2005-05-14 23:10:37 UTC (rev 3713)
+++ trunk/coregrind/vg_scheduler.c 2005-05-14 23:28:42 UTC (rev 3714)
@@ -350,8 +350,6 @@
vg_assert(VG_(is_running_thread)(tid));
vg_assert(VG_(is_exiting)(tid));
=20
- VGA_(cleanup_thread)( &VG_(threads)[tid].arch );
-
mostly_clear_thread_record(tid);
running_tid =3D VG_INVALID_THREADID;
=20
|
|
From: <sv...@va...> - 2005-05-14 23:10:41
|
Author: njn
Date: 2005-05-15 00:10:37 +0100 (Sun, 15 May 2005)
New Revision: 3713
Modified:
trunk/coregrind/vg_scheduler.c
Log:
Remove dead function.
Modified: trunk/coregrind/vg_scheduler.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/vg_scheduler.c 2005-05-14 21:51:49 UTC (rev 3712)
+++ trunk/coregrind/vg_scheduler.c 2005-05-14 23:10:37 UTC (rev 3713)
@@ -130,16 +130,6 @@
}
=20
=20
-__inline__
-static Bool is_valid_or_empty_tid ( ThreadId tid )
-{
- /* tid is unsigned, hence no < 0 test. */
- if (tid =3D=3D 0) return False;
- if (tid >=3D VG_N_THREADS) return False;
- return True;
-}
-
-
/* For constructing error messages only: try and identify a thread
whose stack satisfies the predicate p, or return VG_INVALID_THREADID
if none do.
|
|
From: <sv...@va...> - 2005-05-14 21:51:53
|
Author: njn
Date: 2005-05-14 22:51:49 +0100 (Sat, 14 May 2005)
New Revision: 3712
Added:
trunk/coregrind/core_asm.h
Modified:
trunk/coregrind/Makefile.am
trunk/coregrind/core.h
trunk/coregrind/pub_core_debuglog.h
Log:
Whoops, a little premature in removing core_asm.h -- still need it
because it #includes tool_asm.h.
Modified: trunk/coregrind/Makefile.am
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/Makefile.am 2005-05-14 21:44:20 UTC (rev 3711)
+++ trunk/coregrind/Makefile.am 2005-05-14 21:51:49 UTC (rev 3712)
@@ -37,6 +37,7 @@
=20
noinst_HEADERS =3D \
core.h \
+ core_asm.h \
pub_core_aspacemgr.h \
pub_core_debuglog.h \
pub_core_demangle.h \
Modified: trunk/coregrind/core.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/core.h 2005-05-14 21:44:20 UTC (rev 3711)
+++ trunk/coregrind/core.h 2005-05-14 21:51:49 UTC (rev 3712)
@@ -83,7 +83,7 @@
*/
=20
#include "tool.h" // tool stuff
-#include "tool_asm.h" // XXX: temporary, for VG_() and friends
+#include "core_asm.h"
#include "core_arch.h" // arch-specific stuff, eg. x86/core_arch.h
=20
// Ugly: this is needed by linux/core_os.h
Added: trunk/coregrind/core_asm.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/core_asm.h 2005-05-14 21:44:20 UTC (rev 3711)
+++ trunk/coregrind/core_asm.h 2005-05-14 21:51:49 UTC (rev 3712)
@@ -0,0 +1,2 @@
+// XXX: temporary only
+#include "tool_asm.h"
Modified: trunk/coregrind/pub_core_debuglog.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/pub_core_debuglog.h 2005-05-14 21:44:20 UTC (rev 3711=
)
+++ trunk/coregrind/pub_core_debuglog.h 2005-05-14 21:51:49 UTC (rev 3712=
)
@@ -47,7 +47,7 @@
portable way to avoid using stdarg.h. */
#include <stdarg.h>
=20
-#include "tool_asm.h" /* For definition of VG_ macro */
+#include "core_asm.h" /* For definition of VG_ macro */
=20
/* There are no tool-visible exports from m_debuglog, hence no header
file for it. */
|
|
From: <sv...@va...> - 2005-05-14 21:44:22
|
Author: njn
Date: 2005-05-14 22:44:20 +0100 (Sat, 14 May 2005)
New Revision: 3711
Added:
trunk/coregrind/pub_core_transtab_asm.h
Removed:
trunk/coregrind/core_asm.h
Modified:
trunk/coregrind/Makefile.am
trunk/coregrind/core.h
trunk/coregrind/m_dispatch/dispatch-amd64.S
trunk/coregrind/m_dispatch/dispatch-arm.S
trunk/coregrind/m_dispatch/dispatch-x86.S
trunk/coregrind/pub_core_debuglog.h
trunk/coregrind/pub_core_transtab.h
Log:
Created pub_core_transtab_asm.h, killing core_asm.h in the process.
Modified: trunk/coregrind/Makefile.am
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/Makefile.am 2005-05-14 21:28:43 UTC (rev 3710)
+++ trunk/coregrind/Makefile.am 2005-05-14 21:44:20 UTC (rev 3711)
@@ -37,7 +37,6 @@
=20
noinst_HEADERS =3D \
core.h \
- core_asm.h \
pub_core_aspacemgr.h \
pub_core_debuglog.h \
pub_core_demangle.h \
@@ -55,6 +54,7 @@
pub_core_tooliface.h \
pub_core_translate.h \
pub_core_transtab.h \
+ pub_core_transtab_asm.h \
ume.h \
vg_symtab2.h \
vg_symtypes.h
Modified: trunk/coregrind/core.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/core.h 2005-05-14 21:28:43 UTC (rev 3710)
+++ trunk/coregrind/core.h 2005-05-14 21:44:20 UTC (rev 3711)
@@ -82,8 +82,8 @@
external tools.
*/
=20
-#include "core_asm.h" // asm stuff
#include "tool.h" // tool stuff
+#include "tool_asm.h" // XXX: temporary, for VG_() and friends
#include "core_arch.h" // arch-specific stuff, eg. x86/core_arch.h
=20
// Ugly: this is needed by linux/core_os.h
Deleted: trunk/coregrind/core_asm.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/core_asm.h 2005-05-14 21:28:43 UTC (rev 3710)
+++ trunk/coregrind/core_asm.h 2005-05-14 21:44:20 UTC (rev 3711)
@@ -1,50 +0,0 @@
-
-/*--------------------------------------------------------------------*/
-/*--- Asm-specific core stuff. core_asm.h ---*/
-/*--------------------------------------------------------------------*/
-
-/*
- This file is part of Valgrind, a dynamic binary instrumentation
- framework.
-
- Copyright (C) 2000-2005 Julian Seward=20
- 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 __CORE_ASM_H
-#define __CORE_ASM_H
-
-#include "tool_asm.h" // tool asm stuff
-#include "core_arch_asm.h" // arch-specific asm stuff
-
-/* This file is included in all Valgrind source files, including
- assembly ones. */
-
-
-/* Constants for the fast translation lookup cache. */
-#define VG_TT_FAST_BITS 16
-#define VG_TT_FAST_SIZE (1 << VG_TT_FAST_BITS)
-#define VG_TT_FAST_MASK ((VG_TT_FAST_SIZE) - 1)
-
-#endif /* __CORE_ASM_H */
-
-/*--------------------------------------------------------------------*/
-/*--- end ---*/
-/*--------------------------------------------------------------------*/
Modified: trunk/coregrind/m_dispatch/dispatch-amd64.S
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/m_dispatch/dispatch-amd64.S 2005-05-14 21:28:43 UTC (=
rev 3710)
+++ trunk/coregrind/m_dispatch/dispatch-amd64.S 2005-05-14 21:44:20 UTC (=
rev 3711)
@@ -31,6 +31,7 @@
=20
#include "core_asm.h"
#include "pub_core_dispatch_asm.h"
+#include "pub_core_transtab_asm.h"
#include "libvex_guest_offsets.h" /* for OFFSET_amd64_RIP */
=20
=20
Modified: trunk/coregrind/m_dispatch/dispatch-arm.S
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/m_dispatch/dispatch-arm.S 2005-05-14 21:28:43 UTC (re=
v 3710)
+++ trunk/coregrind/m_dispatch/dispatch-arm.S 2005-05-14 21:44:20 UTC (re=
v 3711)
@@ -31,6 +31,7 @@
=20
#include "core_asm.h"
#include "pub_core_dispatch_asm.h"
+#include "pub_core_transtab_asm.h"
=20
.globl VG_(run_innerloop)
VG_(run_innerloop):
Modified: trunk/coregrind/m_dispatch/dispatch-x86.S
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/m_dispatch/dispatch-x86.S 2005-05-14 21:28:43 UTC (re=
v 3710)
+++ trunk/coregrind/m_dispatch/dispatch-x86.S 2005-05-14 21:44:20 UTC (re=
v 3711)
@@ -31,6 +31,7 @@
=20
#include "core_asm.h"
#include "pub_core_dispatch_asm.h"
+#include "pub_core_transtab_asm.h"
#include "libvex_guest_offsets.h" /* for OFFSET_x86_EIP */
=20
=20
Modified: trunk/coregrind/pub_core_debuglog.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/pub_core_debuglog.h 2005-05-14 21:28:43 UTC (rev 3710=
)
+++ trunk/coregrind/pub_core_debuglog.h 2005-05-14 21:44:20 UTC (rev 3711=
)
@@ -47,7 +47,7 @@
portable way to avoid using stdarg.h. */
#include <stdarg.h>
=20
-#include "core_asm.h" /* For definition of VG_ macro */
+#include "tool_asm.h" /* For definition of VG_ macro */
=20
/* There are no tool-visible exports from m_debuglog, hence no header
file for it. */
Modified: trunk/coregrind/pub_core_transtab.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/pub_core_transtab.h 2005-05-14 21:28:43 UTC (rev 3710=
)
+++ trunk/coregrind/pub_core_transtab.h 2005-05-14 21:44:20 UTC (rev 3711=
)
@@ -37,6 +37,8 @@
// enabling fast look-ups of them.
//--------------------------------------------------------------------
=20
+#include "pub_core_transtab_asm.h"
+
/* The fast-cache for tt-lookup, and for finding counters. */
extern ULong* VG_(tt_fast) [VG_TT_FAST_SIZE];
extern UInt* VG_(tt_fastN)[VG_TT_FAST_SIZE];
Added: trunk/coregrind/pub_core_transtab_asm.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/pub_core_transtab_asm.h 2005-05-14 21:28:43 UTC (rev =
3710)
+++ trunk/coregrind/pub_core_transtab_asm.h 2005-05-14 21:44:20 UTC (rev =
3711)
@@ -0,0 +1,43 @@
+
+/*--------------------------------------------------------------------*/
+/*--- Asm-only TransTab stuff. pub_core_transtab_asm.h ---*/
+/*--------------------------------------------------------------------*/
+
+/*
+ This file is part of Valgrind, a dynamic binary instrumentation
+ framework.
+
+ Copyright (C) 2000-2005 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 __PUB_CORE_TRANSTAB_ASM_H
+#define __PUB_CORE_TRANSTAB_ASM_H
+
+/* Constants for the fast translation lookup cache. */
+#define VG_TT_FAST_BITS 16
+#define VG_TT_FAST_SIZE (1 << VG_TT_FAST_BITS)
+#define VG_TT_FAST_MASK ((VG_TT_FAST_SIZE) - 1)
+
+#endif // __PUB_CORE_TRANSTAB_ASM_H
+
+/*--------------------------------------------------------------------*/
+/*--- end ---*/
+/*--------------------------------------------------------------------*/
|
|
From: <sv...@va...> - 2005-05-14 21:28:47
|
Author: njn
Date: 2005-05-14 22:28:43 +0100 (Sat, 14 May 2005)
New Revision: 3710
Added:
trunk/coregrind/m_hashtable.c
trunk/coregrind/pub_core_hashtable.h
trunk/include/pub_tool_hashtable.h
Removed:
trunk/coregrind/vg_hashtable.c
Modified:
trunk/cachegrind/cg_main.c
trunk/coregrind/Makefile.am
trunk/helgrind/hg_main.c
trunk/include/Makefile.am
trunk/include/tool.h
trunk/massif/ms_main.c
trunk/memcheck/mac_shared.h
Log:
Modularised vg_hashtable.c as m_hashtable.
Modified: trunk/cachegrind/cg_main.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/cachegrind/cg_main.c 2005-05-14 18:42:26 UTC (rev 3709)
+++ trunk/cachegrind/cg_main.c 2005-05-14 21:28:43 UTC (rev 3710)
@@ -30,6 +30,7 @@
*/
=20
#include "tool.h"
+#include "pub_tool_hashtable.h"
#include "pub_tool_mallocfree.h"
#include "pub_tool_tooliface.h"
=20
Modified: trunk/coregrind/Makefile.am
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/Makefile.am 2005-05-14 18:42:26 UTC (rev 3709)
+++ trunk/coregrind/Makefile.am 2005-05-14 21:28:43 UTC (rev 3710)
@@ -45,6 +45,7 @@
pub_core_dispatch_asm.h \
pub_core_errormgr.h \
pub_core_execontext.h \
+ pub_core_hashtable.h \
pub_core_mallocfree.h \
pub_core_replacemalloc.h\
pub_core_sigframe.h \
@@ -76,6 +77,7 @@
m_debuglog.c \
m_errormgr.c \
m_execontext.c \
+ m_hashtable.c \
m_mallocfree.c \
m_skiplist.c \
m_stacktrace.c \
@@ -85,7 +87,6 @@
ume.c \
\
vg_scheduler.c \
- vg_hashtable.c \
vg_main.c \
vg_messages.c \
vg_mylibc.c \
Copied: trunk/coregrind/m_hashtable.c (from rev 3701, trunk/coregrind/vg_=
hashtable.c)
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/vg_hashtable.c 2005-05-13 23:14:40 UTC (rev 3701)
+++ trunk/coregrind/m_hashtable.c 2005-05-14 21:28:43 UTC (rev 3710)
@@ -0,0 +1,181 @@
+
+/*--------------------------------------------------------------------*/
+/*--- A separately chained hash table. m_hashtable.c ---*/
+/*--------------------------------------------------------------------*/
+
+/*
+ This file is part of Valgrind, a dynamic binary instrumentation
+ framework.
+
+ Copyright (C) 2000-2005 Julian Seward=20
+ 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 "core.h"
+#include "pub_core_hashtable.h"
+
+/*--------------------------------------------------------------------*/
+/*--- Declarations ---*/
+/*--------------------------------------------------------------------*/
+
+/* Holds malloc'd but not freed blocks. Static, so zero-inited by defau=
lt. */
+
+#define VG_N_CHAINS 4999 /* a prime number */
+
+#define VG_CHAIN_NO(aa) (((UWord)(aa)) % VG_N_CHAINS)
+
+/*--------------------------------------------------------------------*/
+/*--- Functions ---*/
+/*--------------------------------------------------------------------*/
+
+VgHashTable VG_(HT_construct)(void)
+{
+ /* Initialises to zero, ie. all entries NULL */
+ return VG_(calloc)(VG_N_CHAINS, sizeof(VgHashNode*));
+}
+
+Int VG_(HT_count_nodes) ( VgHashTable table )
+{
+ VgHashNode* node;
+ UInt chain;
+ Int n =3D 0;
+
+ for (chain =3D 0; chain < VG_N_CHAINS; chain++)
+ for (node =3D table[chain]; node !=3D NULL; node =3D node->next)
+ n++;
+ return n;
+}
+
+/* Puts a new, heap allocated VgHashNode, into the malloclist. */
+void VG_(HT_add_node) ( VgHashTable table, VgHashNode* node )
+{
+ UInt chain =3D VG_CHAIN_NO(node->key);
+ node->next =3D table[chain];
+ table[chain] =3D node;
+}
+
+/* Looks up a VgHashNode in the table. Also returns the address of
+ the previous node's `next' pointer which allows it to be removed from=
the
+ list later without having to look it up again. */
+VgHashNode* VG_(HT_get_node) ( VgHashTable table, UWord key,
+ /*OUT*/VgHashNode*** next_ptr )
+{
+ VgHashNode *prev, *curr;
+ Int chain;
+
+ chain =3D VG_CHAIN_NO(key);
+
+ prev =3D NULL;
+ curr =3D table[chain];
+ while (True) {
+ if (curr =3D=3D NULL)
+ break;
+ if (key =3D=3D curr->key)
+ break;
+ prev =3D curr;
+ curr =3D curr->next;
+ }
+
+ if (NULL =3D=3D prev)
+ *next_ptr =3D & table[chain];
+ else
+ *next_ptr =3D & prev->next;
+
+ return curr;
+}
+
+/* Allocates a suitably-sized array, copies all the malloc'd block
+ shadows into it, then returns both the array and the size of it. Thi=
s is
+ used by the memory-leak detector.
+*/
+VgHashNode** VG_(HT_to_array) ( VgHashTable table, /*OUT*/ UInt* n_shado=
ws )
+{
+ UInt i, j;
+ VgHashNode** arr;
+ VgHashNode* node;
+
+ *n_shadows =3D 0;
+ for (i =3D 0; i < VG_N_CHAINS; i++) {
+ for (node =3D table[i]; node !=3D NULL; node =3D node->next) {
+ (*n_shadows)++;
+ }
+ }
+ if (*n_shadows =3D=3D 0)=20
+ return NULL;
+
+ arr =3D VG_(malloc)( *n_shadows * sizeof(VgHashNode*) );
+
+ j =3D 0;
+ for (i =3D 0; i < VG_N_CHAINS; i++) {
+ for (node =3D table[i]; node !=3D NULL; node =3D node->next) {
+ arr[j++] =3D node;
+ }
+ }
+ vg_assert(j =3D=3D *n_shadows);
+
+ return arr;
+}
+
+/* Return the first VgHashNode satisfying the predicate p. */
+VgHashNode* VG_(HT_first_match) ( VgHashTable table,
+ Bool (*p) ( VgHashNode*, void* ),
+ void* d )
+{
+ UInt i;
+ VgHashNode* node;
+
+ for (i =3D 0; i < VG_N_CHAINS; i++)
+ for (node =3D table[i]; node !=3D NULL; node =3D node->next)
+ if ( p(node, d) )
+ return node;
+
+ return NULL;
+}
+
+void VG_(HT_apply_to_all_nodes)( VgHashTable table,
+ void (*f)(VgHashNode*, void*),
+ void* d )
+{
+ UInt i;
+ VgHashNode* node;
+
+ for (i =3D 0; i < VG_N_CHAINS; i++) {
+ for (node =3D table[i]; node !=3D NULL; node =3D node->next) {
+ f(node, d);
+ }
+ }
+}
+
+void VG_(HT_destruct)(VgHashTable table)
+{
+ UInt i;
+ VgHashNode* node;
+ =20
+ for (i =3D 0; i < VG_N_CHAINS; i++) {
+ for (node =3D table[i]; node !=3D NULL; node =3D node->next) {
+ VG_(free)(node);
+ }
+ }
+ VG_(free)(table);
+}
+
+/*--------------------------------------------------------------------*/
+/*--- end ---*/
+/*--------------------------------------------------------------------*/
Added: trunk/coregrind/pub_core_hashtable.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/pub_core_hashtable.h 2005-05-14 18:42:26 UTC (rev 370=
9)
+++ trunk/coregrind/pub_core_hashtable.h 2005-05-14 21:28:43 UTC (rev 371=
0)
@@ -0,0 +1,48 @@
+
+/*--------------------------------------------------------------------*/
+/*--- A separately-chained hash table. pub_core_hashtable.h ---*/
+/*--------------------------------------------------------------------*/
+
+/*
+ This file is part of Valgrind, a dynamic binary instrumentation
+ framework.
+
+ Copyright (C) 2000-2005 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 __PUB_CORE_HASHTABLE_H
+#define __PUB_CORE_HASHTABLE_H
+
+//--------------------------------------------------------------------
+// PURPOSE: A generic data structure with fairly fast lookup for not to=
o
+// many elements, eg. up to a few thousand.
+//--------------------------------------------------------------------
+
+#include "pub_tool_hashtable.h"
+
+// No core-only exports; everything in this module is visible to both
+// the core and tools.
+
+#endif // __PUB_CORE_HASHTABLE_H
+
+/*--------------------------------------------------------------------*/
+/*--- end ---*/
+/*--------------------------------------------------------------------*/
Deleted: trunk/coregrind/vg_hashtable.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/vg_hashtable.c 2005-05-14 18:42:26 UTC (rev 3709)
+++ trunk/coregrind/vg_hashtable.c 2005-05-14 21:28:43 UTC (rev 3710)
@@ -1,180 +0,0 @@
-
-/*--------------------------------------------------------------------*/
-/*--- A separately chained hash table. vg_hashtable.c ---*/
-/*--------------------------------------------------------------------*/
-
-/*
- This file is part of Valgrind, a dynamic binary instrumentation
- framework.
-
- Copyright (C) 2000-2005 Julian Seward=20
- 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 "core.h"
-
-/*--------------------------------------------------------------------*/
-/*--- Declarations ---*/
-/*--------------------------------------------------------------------*/
-
-/* Holds malloc'd but not freed blocks. Static, so zero-inited by defau=
lt. */
-
-#define VG_N_CHAINS 4999 /* a prime number */
-
-#define VG_CHAIN_NO(aa) (((UWord)(aa)) % VG_N_CHAINS)
-
-/*--------------------------------------------------------------------*/
-/*--- Functions ---*/
-/*--------------------------------------------------------------------*/
-
-VgHashTable VG_(HT_construct)(void)
-{
- /* Initialises to zero, ie. all entries NULL */
- return VG_(calloc)(VG_N_CHAINS, sizeof(VgHashNode*));
-}
-
-Int VG_(HT_count_nodes) ( VgHashTable table )
-{
- VgHashNode* node;
- UInt chain;
- Int n =3D 0;
-
- for (chain =3D 0; chain < VG_N_CHAINS; chain++)
- for (node =3D table[chain]; node !=3D NULL; node =3D node->next)
- n++;
- return n;
-}
-
-/* Puts a new, heap allocated VgHashNode, into the malloclist. */
-void VG_(HT_add_node) ( VgHashTable table, VgHashNode* node )
-{
- UInt chain =3D VG_CHAIN_NO(node->key);
- node->next =3D table[chain];
- table[chain] =3D node;
-}
-
-/* Looks up a VgHashNode in the table. Also returns the address of
- the previous node's `next' pointer which allows it to be removed from=
the
- list later without having to look it up again. */
-VgHashNode* VG_(HT_get_node) ( VgHashTable table, UWord key,
- /*OUT*/VgHashNode*** next_ptr )
-{
- VgHashNode *prev, *curr;
- Int chain;
-
- chain =3D VG_CHAIN_NO(key);
-
- prev =3D NULL;
- curr =3D table[chain];
- while (True) {
- if (curr =3D=3D NULL)
- break;
- if (key =3D=3D curr->key)
- break;
- prev =3D curr;
- curr =3D curr->next;
- }
-
- if (NULL =3D=3D prev)
- *next_ptr =3D & table[chain];
- else
- *next_ptr =3D & prev->next;
-
- return curr;
-}
-
-/* Allocates a suitably-sized array, copies all the malloc'd block
- shadows into it, then returns both the array and the size of it. Thi=
s is
- used by the memory-leak detector.
-*/
-VgHashNode** VG_(HT_to_array) ( VgHashTable table, /*OUT*/ UInt* n_shado=
ws )
-{
- UInt i, j;
- VgHashNode** arr;
- VgHashNode* node;
-
- *n_shadows =3D 0;
- for (i =3D 0; i < VG_N_CHAINS; i++) {
- for (node =3D table[i]; node !=3D NULL; node =3D node->next) {
- (*n_shadows)++;
- }
- }
- if (*n_shadows =3D=3D 0)=20
- return NULL;
-
- arr =3D VG_(malloc)( *n_shadows * sizeof(VgHashNode*) );
-
- j =3D 0;
- for (i =3D 0; i < VG_N_CHAINS; i++) {
- for (node =3D table[i]; node !=3D NULL; node =3D node->next) {
- arr[j++] =3D node;
- }
- }
- vg_assert(j =3D=3D *n_shadows);
-
- return arr;
-}
-
-/* Return the first VgHashNode satisfying the predicate p. */
-VgHashNode* VG_(HT_first_match) ( VgHashTable table,
- Bool (*p) ( VgHashNode*, void* ),
- void* d )
-{
- UInt i;
- VgHashNode* node;
-
- for (i =3D 0; i < VG_N_CHAINS; i++)
- for (node =3D table[i]; node !=3D NULL; node =3D node->next)
- if ( p(node, d) )
- return node;
-
- return NULL;
-}
-
-void VG_(HT_apply_to_all_nodes)( VgHashTable table,
- void (*f)(VgHashNode*, void*),
- void* d )
-{
- UInt i;
- VgHashNode* node;
-
- for (i =3D 0; i < VG_N_CHAINS; i++) {
- for (node =3D table[i]; node !=3D NULL; node =3D node->next) {
- f(node, d);
- }
- }
-}
-
-void VG_(HT_destruct)(VgHashTable table)
-{
- UInt i;
- VgHashNode* node;
- =20
- for (i =3D 0; i < VG_N_CHAINS; i++) {
- for (node =3D table[i]; node !=3D NULL; node =3D node->next) {
- VG_(free)(node);
- }
- }
- VG_(free)(table);
-}
-
-/*--------------------------------------------------------------------*/
-/*--- end vg_hashtable.c ---*/
-/*--------------------------------------------------------------------*/
Modified: trunk/helgrind/hg_main.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/helgrind/hg_main.c 2005-05-14 18:42:26 UTC (rev 3709)
+++ trunk/helgrind/hg_main.c 2005-05-14 21:28:43 UTC (rev 3710)
@@ -30,6 +30,7 @@
*/
=20
#include "tool.h"
+#include "pub_tool_hashtable.h"
#include "pub_tool_mallocfree.h"
#include "pub_tool_replacemalloc.h"
#include "pub_tool_tooliface.h"
Modified: trunk/include/Makefile.am
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/include/Makefile.am 2005-05-14 18:42:26 UTC (rev 3709)
+++ trunk/include/Makefile.am 2005-05-14 21:28:43 UTC (rev 3710)
@@ -14,6 +14,7 @@
tool_asm.h \
pub_tool_errormgr.h \
pub_tool_execontext.h \
+ pub_tool_hashtable.h \
pub_tool_mallocfree.h \
pub_tool_replacemalloc.h\
pub_tool_skiplist.h \
Added: trunk/include/pub_tool_hashtable.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/include/pub_tool_hashtable.h 2005-05-14 18:42:26 UTC (rev 3709)
+++ trunk/include/pub_tool_hashtable.h 2005-05-14 21:28:43 UTC (rev 3710)
@@ -0,0 +1,98 @@
+
+/*--------------------------------------------------------------------*/
+/*--- A hash table implementation. pub_tool_hashtable.h ---*/
+/*--------------------------------------------------------------------*/
+
+/*
+ This file is part of Valgrind, a dynamic binary instrumentation
+ framework.
+
+ Copyright (C) 2000-2005 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 __PUB_TOOL_HASHTABLE_H
+#define __PUB_TOOL_HASHTABLE_H
+
+/* Generic type for a separately-chained hash table. Via a kind of dodg=
y
+ C-as-C++ style inheritance, tools can extend the VgHashNode type, so =
long
+ as the first two fields match the sizes of these two fields. Require=
s
+ a bit of casting by the tool. */
+
+// Problems with this type:
+// - Table is fixed-size. =20
+// - Separate chaining gives bad cache behaviour. Hash tables with line=
ar
+// probing give better cache behaviour.
+// - It's not very abstract, eg. deleting nodes exposes more internals t=
han
+// I'd like.
+
+typedef
+ struct _VgHashNode {
+ struct _VgHashNode * next;
+ UWord key;
+ }
+ VgHashNode;
+
+typedef
+ VgHashNode**
+ VgHashTable;
+
+/* Make a new table. Allocates the memory with VG_(calloc)(), so can be=
freed
+ * with VG_(free)(). */
+extern VgHashTable VG_(HT_construct) ( void );
+
+/* Count the number of nodes in a table. */
+extern Int VG_(HT_count_nodes) ( VgHashTable table );
+
+/* Add a node to the table. */
+extern void VG_(HT_add_node) ( VgHashTable t, VgHashNode* node );
+
+/* Looks up a node in the hash table. Also returns the address of the
+ previous node's `next' pointer which allows it to be removed from the
+ list later without having to look it up again. */
+extern VgHashNode* VG_(HT_get_node) ( VgHashTable t, UWord key,
+ /*OUT*/VgHashNode*** next_ptr );
+
+/* Allocates an array of pointers to all the shadow chunks of malloc'd
+ blocks. Must be freed with VG_(free)(). */
+extern VgHashNode** VG_(HT_to_array) ( VgHashTable t, /*OUT*/ UInt* n_sh=
adows );
+
+/* Returns first node that matches predicate `p', or NULL if none do.
+ Extra arguments can be implicitly passed to `p' using `d' which is an
+ opaque pointer passed to `p' each time it is called. */
+extern VgHashNode* VG_(HT_first_match) ( VgHashTable t,
+ Bool (*p)(VgHashNode*, void*),
+ void* d );
+
+/* Applies a function f() once to each node. Again, `d' can be used
+ to pass extra information to the function. */
+extern void VG_(HT_apply_to_all_nodes)( VgHashTable t,
+ void (*f)(VgHashNode*, void*),
+ void* d );
+
+/* Destroy a table. */
+extern void VG_(HT_destruct) ( VgHashTable t );
+
+
+#endif // __PUB_TOOL_HASHTABLE_H
+
+/*--------------------------------------------------------------------*/
+/*--- end ---*/
+/*--------------------------------------------------------------------*/
Modified: trunk/include/tool.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/include/tool.h 2005-05-14 18:42:26 UTC (rev 3709)
+++ trunk/include/tool.h 2005-05-14 21:28:43 UTC (rev 3710)
@@ -579,62 +579,6 @@
extern VgSectKind VG_(seg_sect_kind)(Addr);
=20
/*=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D*/
-/*=3D=3D=3D Generic hash table =
=3D=3D=3D*/
-/*=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D*/
-
-/* Generic type for a separately-chained hash table. Via a kind of dodg=
y
- C-as-C++ style inheritance, tools can extend the VgHashNode type, so =
long
- as the first two fields match the sizes of these two fields. Require=
s
- a bit of casting by the tool. */
-typedef
- struct _VgHashNode {
- struct _VgHashNode * next;
- UWord key;
- }
- VgHashNode;
-
-typedef
- VgHashNode**
- VgHashTable;
-
-/* Make a new table. Allocates the memory with VG_(calloc)(), so can be=
freed
- * with VG_(free)(). */
-extern VgHashTable VG_(HT_construct) ( void );
-
-/* Count the number of nodes in a table. */
-extern Int VG_(HT_count_nodes) ( VgHashTable table );
-
-/* Add a node to the table. */
-extern void VG_(HT_add_node) ( VgHashTable t, VgHashNode* node );
-
-/* Looks up a node in the hash table. Also returns the address of the
- previous node's `next' pointer which allows it to be removed from the
- list later without having to look it up again. */
-extern VgHashNode* VG_(HT_get_node) ( VgHashTable t, UWord key,
- /*OUT*/VgHashNode*** next_ptr );
-
-/* Allocates an array of pointers to all the shadow chunks of malloc'd
- blocks. Must be freed with VG_(free)(). */
-extern VgHashNode** VG_(HT_to_array) ( VgHashTable t, /*OUT*/ UInt* n_sh=
adows );
-
-/* Returns first node that matches predicate `p', or NULL if none do.
- Extra arguments can be implicitly passed to `p' using `d' which is an
- opaque pointer passed to `p' each time it is called. */
-extern VgHashNode* VG_(HT_first_match) ( VgHashTable t,
- Bool (*p)(VgHashNode*, void*),
- void* d );
-
-/* Applies a function f() once to each node. Again, `d' can be used
- to pass extra information to the function. */
-extern void VG_(HT_apply_to_all_nodes)( VgHashTable t,
- void (*f)(VgHashNode*, void*),
- void* d );
-
-/* Destroy a table. */
-extern void VG_(HT_destruct) ( VgHashTable t );
-
-
-/*=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D*/
/*=3D=3D=3D Functions for shadow registers =
=3D=3D=3D*/
/*=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D*/
=20
Modified: trunk/massif/ms_main.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/massif/ms_main.c 2005-05-14 18:42:26 UTC (rev 3709)
+++ trunk/massif/ms_main.c 2005-05-14 21:28:43 UTC (rev 3710)
@@ -35,6 +35,7 @@
// structures below for more info on how things work.
=20
#include "tool.h"
+#include "pub_tool_hashtable.h"
#include "pub_tool_mallocfree.h"
#include "pub_tool_replacemalloc.h"
#include "pub_tool_stacktrace.h"
Modified: trunk/memcheck/mac_shared.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/memcheck/mac_shared.h 2005-05-14 18:42:26 UTC (rev 3709)
+++ trunk/memcheck/mac_shared.h 2005-05-14 21:28:43 UTC (rev 3710)
@@ -37,6 +37,7 @@
#define __MAC_SHARED_H
=20
#include "tool.h"
+#include "pub_tool_hashtable.h"
#include "pub_tool_mallocfree.h"
#include "pub_tool_replacemalloc.h"
#include "pub_tool_tooliface.h"
|
|
From: <sv...@va...> - 2005-05-14 18:42:28
|
Author: njn
Date: 2005-05-14 19:42:26 +0100 (Sat, 14 May 2005)
New Revision: 3709
Modified:
trunk/coregrind/core.h
trunk/coregrind/m_aspacemgr/aspacemgr.c
trunk/coregrind/pub_core_aspacemgr.h
trunk/coregrind/vg_symtab2.c
trunk/helgrind/hg_main.c
trunk/include/tool.h
Log:
Renamed the field Segment.symtab to Segment.seginfo to avoid confusion
with SegInfo.symtab. =20
Also renamed VG_(symtab_{inc,dec}ref)() as VG_(seginfo_{inc,dec}ref)()
for the same reason.
Also renamed various SegInfo variables from "seg" to "si" to avoid
confusion with the many Segment variables called "seg".
Modified: trunk/coregrind/core.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/core.h 2005-05-14 17:18:12 UTC (rev 3708)
+++ trunk/coregrind/core.h 2005-05-14 18:42:26 UTC (rev 3709)
@@ -642,8 +642,8 @@
=20
extern Bool VG_(is_object_file) ( const void *hdr );
extern SegInfo * VG_(read_seg_symbols) ( Segment *seg );
-extern void VG_(symtab_incref) ( SegInfo * );
-extern void VG_(symtab_decref) ( SegInfo *, Addr a );
+extern void VG_(seginfo_incref) ( SegInfo * );
+extern void VG_(seginfo_decref) ( SegInfo *, Addr a );
=20
extern Bool VG_(get_fnname_nodemangle)( Addr a, Char* fnname, Int n_fnna=
me );
=20
Modified: trunk/coregrind/m_aspacemgr/aspacemgr.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/m_aspacemgr/aspacemgr.c 2005-05-14 17:18:12 UTC (rev =
3708)
+++ trunk/coregrind/m_aspacemgr/aspacemgr.c 2005-05-14 18:42:26 UTC (rev =
3709)
@@ -278,7 +278,7 @@
segments[i].fnIdx =3D -1;
segments[i].dev =3D 0;
segments[i].ino =3D 0;
- segments[i].symtab =3D NULL;
+ segments[i].seginfo =3D NULL;
}
=20
=20
@@ -386,7 +386,7 @@
if (s1->prot !=3D s2->prot)
return False;
=20
- if (s1->symtab !=3D s2->symtab)
+ if (s1->seginfo !=3D s2->seginfo)
return False;
=20
if (s1->flags & SF_FILE){
@@ -520,9 +520,9 @@
static void freeseg(Segment *s)
{
recycleseg(s);
- if (s->symtab !=3D NULL) {
- VG_(symtab_decref)(s->symtab, s->addr);
- s->symtab =3D NULL;
+ if (s->seginfo !=3D NULL) {
+ VG_(seginfo_decref)(s->seginfo, s->addr);
+ s->seginfo =3D NULL;
}
=20
VG_(SkipNode_Free)(&sk_segments, s);
@@ -700,7 +700,7 @@
s->filename =3D s->fnIdx=3D=3D-1 ? NULL : &segnames[s->fnIdx].fname[0=
];
s->dev =3D dev;
s->ino =3D ino;
- s->symtab =3D NULL;
+ s->seginfo =3D NULL;
=20
/* Clean up right now */
preen_segments();
@@ -710,7 +710,7 @@
Valgrind, is at least readable and seems to contain an object
file, then try reading symbols from it.
*/
- if (s->symtab =3D=3D NULL
+ if (s->seginfo =3D=3D NULL
&& (addr+len < VG_(valgrind_base) || addr > VG_(valgrind_last))
&& (flags & (SF_MMAP|SF_NOSYMS)) =3D=3D SF_MMAP) {
if (off =3D=3D 0
@@ -718,22 +718,22 @@
&& (prot & (VKI_PROT_READ|VKI_PROT_EXEC)) =3D=3D (VKI_PROT_READ|VKI_P=
ROT_EXEC)
&& len >=3D VKI_PAGE_SIZE
&& VG_(is_object_file)((void *)addr)) {
- s->symtab =3D VG_(read_seg_symbols)(s);
- if (s->symtab !=3D NULL) {
+ s->seginfo =3D VG_(read_seg_symbols)(s);
+ if (s->seginfo !=3D NULL) {
s->flags |=3D SF_DYNLIB;
}
} else if (flags & SF_MMAP) {
#if 0
const SegInfo *info;
=20
- /* Otherwise see if an existing symtab applies to this Segment */
+ /* Otherwise see if an existing SegInfo applies to this Segment */
for(info =3D VG_(next_seginfo)(NULL);
info !=3D NULL;
info =3D VG_(next_seginfo)(info)) {
if (VG_(seg_overlaps)(s, VG_(seg_start)(info), VG_(seg_size)(info))=
)
{
- s->symtab =3D (SegInfo *)info;
- VG_(symtab_incref)((SegInfo *)info);
+ s->seginfo =3D (SegInfo *)info;
+ VG_(seginfo_incref)((SegInfo *)info);
}
}
#endif
Modified: trunk/coregrind/pub_core_aspacemgr.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/pub_core_aspacemgr.h 2005-05-14 17:18:12 UTC (rev 370=
8)
+++ trunk/coregrind/pub_core_aspacemgr.h 2005-05-14 18:42:26 UTC (rev 370=
9)
@@ -77,7 +77,7 @@
UInt dev; // device
UInt ino; // inode
=20
- SegInfo* symtab; // symbol table
+ SegInfo* seginfo; // symbol table, etc
};
=20
/* segment mapped from a file descriptor */
Modified: trunk/coregrind/vg_symtab2.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/vg_symtab2.c 2005-05-14 17:18:12 UTC (rev 3708)
+++ trunk/coregrind/vg_symtab2.c 2005-05-14 18:42:26 UTC (rev 3709)
@@ -1539,7 +1539,7 @@
continue;
=20
if (seg->symtab !=3D NULL)
- VG_(symtab_decref)(seg->symtab, seg->addr);
+ VG_(seginfo_decref)(seg->symtab, seg->addr);
=20
VG_(symtab_incref)(si);
seg->symtab =3D si;
@@ -1644,11 +1644,11 @@
else FIND(".plt", si->plt_start, si->plt_size, dummy_a=
ddr, 1, Addr)
=20
# undef FIND
- =20
- /* Check some sizes */
- vg_assert((o_dynsym_sz % sizeof(ElfXX_Sym)) =3D=3D 0);
- vg_assert((o_symtab_sz % sizeof(ElfXX_Sym)) =3D=3D 0);
}
+ =20
+ /* Check some sizes */
+ vg_assert((o_dynsym_sz % sizeof(ElfXX_Sym)) =3D=3D 0);
+ vg_assert((o_symtab_sz % sizeof(ElfXX_Sym)) =3D=3D 0);
=20
read_symtab(si, "symbol table", False,
o_symtab, o_symtab_sz,
@@ -1702,10 +1702,6 @@
else FIND(".line", dwarf1l, dwarf1l_sz, =
UChar*)
=20
# undef FIND
- =20
- /* Check some sizes */
- vg_assert((o_dynsym_sz % sizeof(ElfXX_Sym)) =3D=3D 0);
- vg_assert((o_symtab_sz % sizeof(ElfXX_Sym)) =3D=3D 0);
}
}
}
@@ -1766,7 +1762,7 @@
{
SegInfo* si;
=20
- vg_assert(seg->symtab =3D=3D NULL);
+ vg_assert(seg->seginfo =3D=3D NULL);
=20
VGP_PUSHCC(VgpReadSyms);
=20
@@ -1869,14 +1865,14 @@
return;
}
=20
-void VG_(symtab_decref)(SegInfo *si, Addr start)
+void VG_(seginfo_decref)(SegInfo *si, Addr start)
{
vg_assert(si->ref >=3D 1);
if (--si->ref =3D=3D 0)
unload_symbols(si->start, si->size);
}
=20
-void VG_(symtab_incref)(SegInfo *si)
+void VG_(seginfo_incref)(SegInfo *si)
{
vg_assert(si->ref > 0);
si->ref++;
@@ -1949,10 +1945,10 @@
=20
s =3D VG_(find_segment)(ptr);
=20
- if (s =3D=3D NULL || s->symtab =3D=3D NULL)
+ if (s =3D=3D NULL || s->seginfo =3D=3D NULL)
goto not_found;
=20
- si =3D s->symtab;
+ si =3D s->seginfo;
=20
sno =3D search_one_symtab ( si, ptr, match_anywhere_in_fun );
if (sno =3D=3D -1) goto not_found;
@@ -2522,56 +2518,56 @@
/*--- SegInfo accessor functions ---*/
/*------------------------------------------------------------*/
=20
-const SegInfo* VG_(next_seginfo)(const SegInfo* seg)
+const SegInfo* VG_(next_seginfo)(const SegInfo* si)
{
- if (seg =3D=3D NULL)
+ if (si =3D=3D NULL)
return segInfo;
- return seg->next;
+ return si->next;
}
=20
-Addr VG_(seg_start)(const SegInfo* seg)
+Addr VG_(seg_start)(const SegInfo* si)
{
- return seg->start;
+ return si->start;
}
=20
-SizeT VG_(seg_size)(const SegInfo* seg)
+SizeT VG_(seg_size)(const SegInfo* si)
{
- return seg->size;
+ return si->size;
}
=20
-const UChar* VG_(seg_filename)(const SegInfo* seg)
+const UChar* VG_(seg_filename)(const SegInfo* si)
{
- return seg->filename;
+ return si->filename;
}
=20
-ULong VG_(seg_sym_offset)(const SegInfo* seg)
+ULong VG_(seg_sym_offset)(const SegInfo* si)
{
- return seg->offset;
+ return si->offset;
}
=20
VgSectKind VG_(seg_sect_kind)(Addr a)
{
- SegInfo* seg;
+ SegInfo* si;
VgSectKind ret =3D Vg_SectUnknown;
=20
- for(seg =3D segInfo; seg !=3D NULL; seg =3D seg->next) {
- if (a >=3D seg->start && a < (seg->start + seg->size)) {
+ for(si =3D segInfo; si !=3D NULL; si =3D si->next) {
+ if (a >=3D si->start && a < (si->start + si->size)) {
if (0)
- VG_(printf)("addr=3D%p seg=3D%p %s got=3D%p %d plt=3D%p %d data=3D=
%p %d bss=3D%p %d\n",
- a, seg, seg->filename,=20
- seg->got_start, seg->got_size,
- seg->plt_start, seg->plt_size,
- seg->data_start, seg->data_size,
- seg->bss_start, seg->bss_size);
+ VG_(printf)("addr=3D%p si=3D%p %s got=3D%p %d plt=3D%p %d data=3D%=
p %d bss=3D%p %d\n",
+ a, si, si->filename,=20
+ si->got_start, si->got_size,
+ si->plt_start, si->plt_size,
+ si->data_start, si->data_size,
+ si->bss_start, si->bss_size);
ret =3D Vg_SectText;
=20
- if (a >=3D seg->data_start && a < (seg->data_start + seg->data_size))
+ if (a >=3D si->data_start && a < (si->data_start + si->data_size))
ret =3D Vg_SectData;
- else if (a >=3D seg->bss_start && a < (seg->bss_start + seg->bss_size)=
)
+ else if (a >=3D si->bss_start && a < (si->bss_start + si->bss_size))
ret =3D Vg_SectBSS;
- else if (a >=3D seg->plt_start && a < (seg->plt_start + seg->plt_size)=
)
+ else if (a >=3D si->plt_start && a < (si->plt_start + si->plt_size))
ret =3D Vg_SectPLT;
- else if (a >=3D seg->got_start && a < (seg->got_start + seg->got_size)=
)
+ else if (a >=3D si->got_start && a < (si->got_start + si->got_size))
ret =3D Vg_SectGOT;
}
}
Modified: trunk/helgrind/hg_main.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/helgrind/hg_main.c 2005-05-14 17:18:12 UTC (rev 3708)
+++ trunk/helgrind/hg_main.c 2005-05-14 18:42:26 UTC (rev 3709)
@@ -2402,14 +2402,15 @@
=20
/* Search for it in segments */
{
- const SegInfo *seg;
+ const SegInfo *si;
=20
- for(seg =3D VG_(next_seginfo)(NULL);=20
- seg !=3D NULL;=20
- seg =3D VG_(next_seginfo)(seg)) {
- Addr base =3D VG_(seg_start)(seg);
- SizeT size =3D VG_(seg_size)(seg);
- const UChar *filename =3D VG_(seg_filename)(seg);
+ for (si =3D VG_(next_seginfo)(NULL);=20
+ si !=3D NULL;=20
+ si =3D VG_(next_seginfo)(si))=20
+ {
+ Addr base =3D VG_(seg_start)(si);
+ SizeT size =3D VG_(seg_size)(si);
+ const UChar *filename =3D VG_(seg_filename)(si);
=20
if (a >=3D base && a < base+size) {
ai->akind =3D Segment;
Modified: trunk/include/tool.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/include/tool.h 2005-05-14 17:18:12 UTC (rev 3708)
+++ trunk/include/tool.h 2005-05-14 18:42:26 UTC (rev 3709)
@@ -559,11 +559,11 @@
is present or not. */
extern SegInfo* VG_(get_obj) ( Addr a );
=20
-extern const SegInfo* VG_(next_seginfo) ( const SegInfo *seg );
-extern Addr VG_(seg_start) ( const SegInfo *seg );
-extern SizeT VG_(seg_size) ( const SegInfo *seg );
-extern const UChar* VG_(seg_filename) ( const SegInfo *seg );
-extern ULong VG_(seg_sym_offset)( const SegInfo *seg );
+extern const SegInfo* VG_(next_seginfo) ( const SegInfo *si );
+extern Addr VG_(seg_start) ( const SegInfo *si );
+extern SizeT VG_(seg_size) ( const SegInfo *si );
+extern const UChar* VG_(seg_filename) ( const SegInfo *si );
+extern ULong VG_(seg_sym_offset)( const SegInfo *si );
=20
typedef
enum {
|
|
From: <sv...@va...> - 2005-05-14 17:18:14
|
Author: njn
Date: 2005-05-14 18:18:12 +0100 (Sat, 14 May 2005)
New Revision: 3708
Modified:
trunk/coregrind/core.h
trunk/coregrind/vg_redir.c
Log:
VG_(resolve_redir)() can now be made private to vg_redir.c.
Modified: trunk/coregrind/core.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/core.h 2005-05-14 17:11:06 UTC (rev 3707)
+++ trunk/coregrind/core.h 2005-05-14 17:18:12 UTC (rev 3708)
@@ -671,7 +671,6 @@
Addr to_addr);
extern void VG_(add_redirect_addr_to_addr)(Addr from_addr, Addr to_addr)=
;
extern void VG_(resolve_seg_redirs)(SegInfo *si);
-extern Bool VG_(resolve_redir)(CodeRedirect *redir, const SegInfo *si);
=20
/* Wrapping machinery */
enum return_type {
Modified: trunk/coregrind/vg_redir.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/vg_redir.c 2005-05-14 17:11:06 UTC (rev 3707)
+++ trunk/coregrind/vg_redir.c 2005-05-14 17:18:12 UTC (rev 3708)
@@ -208,7 +208,7 @@
=20
/* Resolve a redir using si if possible, and add it to the resolved
list */
-Bool VG_(resolve_redir)(CodeRedirect *redir, const SegInfo *si)
+static Bool resolve_redir(CodeRedirect *redir, const SegInfo *si)
{
Bool resolved;
=20
@@ -273,7 +273,7 @@
si !=3D NULL;=20
si =3D VG_(next_seginfo)(si))
{
- if (VG_(resolve_redir)(redir, si))
+ if (resolve_redir(redir, si))
return True;
}
return False;
@@ -297,7 +297,7 @@
for(redir =3D unresolved_redir; redir !=3D NULL; redir =3D next) {
next =3D redir->next;
=20
- if (VG_(resolve_redir)(redir, si)) {
+ if (resolve_redir(redir, si)) {
*prevp =3D next;
redir->next =3D NULL;
} else
|
|
From: <sv...@va...> - 2005-05-14 17:11:09
|
Author: njn
Date: 2005-05-14 18:11:06 +0100 (Sat, 14 May 2005)
New Revision: 3707
Modified:
trunk/coregrind/core.h
trunk/coregrind/vg_redir.c
trunk/coregrind/vg_symtab2.c
Log:
Move resolve_redir_allsegs() to vg_redir.c, the only file that uses it,
and make it private.
Modified: trunk/coregrind/core.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/core.h 2005-05-14 17:00:25 UTC (rev 3706)
+++ trunk/coregrind/core.h 2005-05-14 17:11:06 UTC (rev 3707)
@@ -649,8 +649,6 @@
=20
extern Addr VG_(reverse_search_one_symtab) ( const SegInfo* si, const Ch=
ar* name );
=20
-extern Bool VG_(resolve_redir_allsegs)(CodeRedirect *redir);
-
extern Bool VG_(use_CFI_info) ( /*MOD*/Addr* ipP,
/*MOD*/Addr* spP,
/*MOD*/Addr* fpP,
Modified: trunk/coregrind/vg_redir.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/vg_redir.c 2005-05-14 17:00:25 UTC (rev 3706)
+++ trunk/coregrind/vg_redir.c 2005-05-14 17:11:06 UTC (rev 3707)
@@ -265,6 +265,20 @@
return resolved;
}
=20
+static Bool resolve_redir_allsegs(CodeRedirect *redir)
+{
+ const SegInfo *si;
+
+ for(si =3D VG_(next_seginfo)(NULL);=20
+ si !=3D NULL;=20
+ si =3D VG_(next_seginfo)(si))
+ {
+ if (VG_(resolve_redir)(redir, si))
+ return True;
+ }
+ return False;
+}
+
/* Go through the complete redir list, resolving as much as possible wit=
h this SegInfo.
=20
This should be called when a new SegInfo symtab is loaded.
@@ -314,7 +328,7 @@
=20
/* Check against all existing segments to see if this redirection
can be resolved immediately */
- if (!VG_(resolve_redir_allsegs)(redir)) {
+ if (!resolve_redir_allsegs(redir)) {
/* nope, add to list */
redir->next =3D unresolved_redir;
unresolved_redir =3D redir;
@@ -344,7 +358,7 @@
=20
/* Check against all existing segments to see if this redirection
can be resolved immediately */
- if (!VG_(resolve_redir_allsegs)(redir)) {
+ if (!resolve_redir_allsegs(redir)) {
/* nope, add to list */
redir->next =3D unresolved_redir;
unresolved_redir =3D redir;
@@ -397,7 +411,7 @@
=20
/* Check against all existing segments to see if this redirection
can be resolved immediately */
- if (!VG_(resolve_redir_allsegs)(redir)) {
+ if (!resolve_redir_allsegs(redir)) {
/* nope, add to list */
redir->next =3D unresolved_redir;
unresolved_redir =3D redir;
Modified: trunk/coregrind/vg_symtab2.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/vg_symtab2.c 2005-05-14 17:00:25 UTC (rev 3706)
+++ trunk/coregrind/vg_symtab2.c 2005-05-14 17:11:06 UTC (rev 3707)
@@ -1058,17 +1058,6 @@
VG_(arena_free)(VG_AR_SYMTAB, lib);
}
=20
-Bool VG_(resolve_redir_allsegs)(CodeRedirect *redir)
-{
- SegInfo *si;
-
- for(si =3D segInfo; si !=3D NULL; si =3D si->next)
- if (VG_(resolve_redir)(redir, si))
- return True;
-
- return False;
-}
-
//static
//void handle_wrapper( SegInfo* si, Char* symbol, ElfXX_Sym* sym)
//{
|
|
From: <sv...@va...> - 2005-05-14 17:00:32
|
Author: njn
Date: 2005-05-14 18:00:25 +0100 (Sat, 14 May 2005)
New Revision: 3706
Modified:
trunk/coregrind/vg_signals.c
Log:
Remove a short sequence of code that was:
(a) overly complex (the parens could be added by the sprintf);
(b) buggy (buf is used uninitialised if VG_(get_fnname) fails);
(c) redundant (the VG_(core_panic_at) prints the stack trace anyway).
Modified: trunk/coregrind/vg_signals.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/vg_signals.c 2005-05-14 11:18:31 UTC (rev 3705)
+++ trunk/coregrind/vg_signals.c 2005-05-14 17:00:25 UTC (rev 3706)
@@ -1887,8 +1887,6 @@
and have it delivered. Otherwise it's a Valgrind bug. */
{ =20
Addr ips[ VG_(clo_backtrace_size) ];
- Addr context_ip;
- Char buf[1024];
ThreadState *tst =3D VG_(get_ThreadState)(VG_(get_lwp_tid)(VG_(get=
tid)()));
=20
if (VG_(sigismember)(&tst->sig_mask, sigNo)) {
@@ -1920,23 +1918,10 @@
"INTERNAL ERROR: Valgrind received a signal %d (%s) - exiting",
sigNo, signame(sigNo));
=20
- buf[0] =3D 0;
- context_ip =3D VGP_UCONTEXT_INSTR_PTR(uc);
- if (1 && !VG_(get_fnname)(context_ip, buf+2, sizeof(buf)-5)) {
- Int len;
-
- buf[0] =3D ' ';
- buf[1] =3D '(';
- len =3D VG_(strlen)(buf);
- buf[len] =3D ')';
- buf[len+1] =3D '\0';
- }
-
VG_(message)(Vg_DebugMsg,=20
- "si_code=3D%x Fault EIP: %p%s; Faulting address: %p",
- info->si_code, context_ip, buf, info->_sifields._sigfault._addr);
- VG_(message)(Vg_DebugMsg,=20
- " sp=3D%p\n", VGP_UCONTEXT_STACK_PTR(uc));
+ "si_code=3D%x; Faulting address: %p; sp: %p",
+ info->si_code, info->_sifields._sigfault._addr,
+ VGP_UCONTEXT_STACK_PTR(uc));
=20
if (0)
VG_(kill_self)(sigNo); /* generate a core dump */
|
|
From: <sv...@va...> - 2005-05-14 11:18:35
|
Author: sewardj Date: 2005-05-14 12:18:31 +0100 (Sat, 14 May 2005) New Revision: 3705 Modified: trunk/NOTES.txt trunk/none/tests/amd64/insn_sse2.def trunk/none/tests/amd64/insn_sse2.stdout.exp Log: Add test cases for MOVQ on amd64. Modified: trunk/NOTES.txt =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- trunk/NOTES.txt 2005-05-14 02:08:48 UTC (rev 3704) +++ trunk/NOTES.txt 2005-05-14 11:18:31 UTC (rev 3705) @@ -1,13 +1,14 @@ 13 May 05 ~~~~~~~~~ -ToDo: (arch)/dispatch.S: In dispatch_exceptional, there's no point testi= ng the guest code return value against VG_TRC_INNER_COUNTERZERO, as vex n= ever sets this flag. +ToDo: (arch)/dispatch.S: In dispatch_exceptional, there's no point +testing the guest code return value against VG_TRC_INNER_COUNTERZERO, +as vex never sets this flag. Need to check to see if it's possible to +completely get rid of VG_TRC_INNER_COUNTERZERO. =20 =20 11 May 05 ~~~~~~~~~ -ToDo: vex-x86: check/fix behaviour on SSE MOVQ / MOVSD insns. - vex-amd64: ditto - * check above/below the line for reg-alloc +ToDo: vex-amd64: check above/below the line for reg-alloc =20 =20 23 Apr 05 (memcheck-on-amd64 notes) Modified: trunk/none/tests/amd64/insn_sse2.def =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- trunk/none/tests/amd64/insn_sse2.def 2005-05-14 02:08:48 UTC (rev 370= 4) +++ trunk/none/tests/amd64/insn_sse2.def 2005-05-14 11:18:31 UTC (rev 370= 5) @@ -103,6 +103,9 @@ movntdq xmm.uq[0x012345678abcdef,0xfedcba9876543210] m128.uq[0x121212123= 4343434,0x5656565678787878] =3D> 1.uq[0x012345678abcdef,0xfedcba987654321= 0] movnti r32.sd[12345678] m32.sd[11111111] =3D> 1.sd[12345678] movntpd xmm.pd[1234.5678,8765.4321] m128.pd[1111.1111,2222.2222] =3D> 1.= pd[1234.5678,8765.4321] +movq xmm.pd[1234.5678,8765.4321] xmm.pd[1111.1111,2222.2222] =3D> 1.pd[1= 234.5678,0.0] +movq m64.pd[1234.5678] xmm.pd[1111.1111,2222.2222] =3D> 1.pd[1234.5678,0= .0] +movq xmm.pd[1234.5678,8765.4321] m64.pd[1111.1111] =3D> 1.pd[1234.5678] movq2dq mm.uq[0x012345678abcdef] xmm.uq[0x1212121234343434,0x56565656787= 87878] =3D> 1.uq[0x012345678abcdef,0] movsd xmm.pd[1234.5678,8765.4321] xmm.pd[1111.1111,2222.2222] =3D> 1.pd[= 1234.5678,2222.2222] movsd m64.pd[1234.5678] xmm.pd[1111.1111,2222.2222] =3D> 1.pd[1234.5678,= 0.0] Modified: trunk/none/tests/amd64/insn_sse2.stdout.exp =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- trunk/none/tests/amd64/insn_sse2.stdout.exp 2005-05-14 02:08:48 UTC (= rev 3704) +++ trunk/none/tests/amd64/insn_sse2.stdout.exp 2005-05-14 11:18:31 UTC (= rev 3705) @@ -103,6 +103,9 @@ movntdq_1 ... ok movnti_1 ... ok movntpd_1 ... ok +movq_1 ... ok +movq_2 ... ok +movq_3 ... ok movq2dq_1 ... ok movsd_1 ... ok movsd_2 ... ok |
|
From: <sv...@va...> - 2005-05-14 11:17:31
|
Author: sewardj
Date: 2005-05-14 12:17:25 +0100 (Sat, 14 May 2005)
New Revision: 1198
Modified:
trunk/priv/guest-amd64/toIR.c
trunk/priv/guest-x86/toIR.c
Log:
Fix behaviour of MOVQ on amd64.
Modified: trunk/priv/guest-amd64/toIR.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/priv/guest-amd64/toIR.c 2005-05-14 02:04:12 UTC (rev 1197)
+++ trunk/priv/guest-amd64/toIR.c 2005-05-14 11:17:25 UTC (rev 1198)
@@ -42,13 +42,6 @@
disInstr for details.
*/
=20
-/* TODO:
-
- MOVQ (sse) is wrong wrt is the upper half zeroed or not?
- It always should be if dst is a reg; not quite the same
- as MOVSD.
-*/
-
//.. /* TODO:
//..=20
//.. check flag settings for cmpxchg
@@ -8081,39 +8074,6 @@
SSE2 as a minimum so there is no point distinguishing SSE1 vs
SSE2. */
=20
- /* There are just so many damn SSE insns, and amongst them are a
- large number of data-move insns, many of which seem almost
- identical. Here's a statement of the behaviour of MOVQ, MOVSD,
- MOVD, MOVSS. It doesn't help that the Intel manuals are less
- than accurate about these. The AMD docs seem OK tho.=20
-
- The following is true for both x86 and amd64. MOVQ and MOVSD
- shunt 64-bit things around. r is an xmm register and m is
- memory.
-
- MOVQ r <- r lo64 moved; hi64 set to zero
- MOVQ m <- r lo64 moved
- MOVQ r <- m lo64 moved; hi64 set to zero
-
- MOVSD r <- r lo64 moved; hi64 unchanged
- MOVSD m <- r lo64 moved
- MOVSD r <- m lo64 moved; hi64 set to zero
-
- MOVD and MOVSS shunt 32-bit things around, and are exactly
- analogous:
-
- MOVD r <- r lo32 moved; hi96 set to zero
- MOVD m <- r lo32 moved
- MOVD r <- m lo32 moved; hi96 set to zero
-
- MOVSS r <- r lo32 moved; hi96 unchanged
- MOVSS m <- r lo32 moved
- MOVSS r <- m lo32 moved; hi96 set to zero
-
- For MOVQ and MOVD, the r <- r rules apply even if the source r
- is instead an integer register.
- */
-
insn =3D (UChar*)&guest_code[delta];
=20
//.. /* Treat fxsave specially. It should be doable even on an SSE0
@@ -10266,6 +10226,7 @@
modrm =3D getUChar(delta+2);
if (epartIsReg(modrm)) {
/* fall through, awaiting test case */
+ /* dst: lo half copied, hi half zeroed */
} else {
addr =3D disAMode ( &alen, pfx, delta+2, dis_buf, 0 );
storeLE( mkexpr(addr),=20
@@ -10296,10 +10257,10 @@
}
=20
/* F3 0F 7E =3D MOVQ -- move 64 bits from E (mem or lo half xmm) to
- G (lo half xmm). If E is mem, upper half of G is zeroed out. */
+ G (lo half xmm). Upper half of G is zeroed out. */
/* F2 0F 10 =3D MOVSD -- move 64 bits from E (mem or lo half xmm) to
G (lo half xmm). If E is mem, upper half of G is zeroed out.
- (original defn) */
+ If E is reg, upper half of G is unchanged. */
if ( (haveF2no66noF3(pfx) && sz =3D=3D 4=20
&& insn[0] =3D=3D 0x0F && insn[1] =3D=3D 0x10)
||=20
@@ -10310,6 +10271,10 @@
if (epartIsReg(modrm)) {
putXMMRegLane64( gregOfRexRM(pfx,modrm), 0,
getXMMRegLane64( eregOfRexRM(pfx,modrm), 0 ));
+ if (insn[1] =3D=3D 0x7E/*MOVQ*/) {
+ /* zero bits 127:64 */
+ putXMMRegLane64( gregOfRexRM(pfx,modrm), 1, mkU64(0) );
+ }
DIP("movsd %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
nameXMMReg(gregOfRexRM(pfx,modrm)));
delta +=3D 2+1;
Modified: trunk/priv/guest-x86/toIR.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/priv/guest-x86/toIR.c 2005-05-14 02:04:12 UTC (rev 1197)
+++ trunk/priv/guest-x86/toIR.c 2005-05-14 11:17:25 UTC (rev 1198)
@@ -35,11 +35,6 @@
=20
/* TODO:
=20
- Check the following. It afflicts the amd64 front end, not sure if
- applicable here: MOVQ (sse) is wrong wrt is the upper half zeroed
- or not? It always should be if dst is a reg; not quite the same as
- MOVSD.
-
check flag settings for cmpxchg
FUCOMI(P): what happens to A and S flags? Currently are forced
to zero.
|
|
From: <js...@ac...> - 2005-05-14 03:03:26
|
Nightly build on phoenix ( SuSE 9.1 ) started at 2005-05-14 03:50:00 BST Checking out source tree ... done Configuring ... done Building ... done Running regression tests ... done Last 20 lines of log.verbose follow insn_sse: valgrind ./insn_sse insn_sse2: (skipping, prereq failed: ../../../tests/cputest x86-sse2) int: valgrind ./int pushpopseg: valgrind ./pushpopseg rcl_assert: valgrind ./rcl_assert seg_override: valgrind ./seg_override -- Finished tests in none/tests/x86 ------------------------------------ yield: valgrind ./yield -- Finished tests in none/tests ---------------------------------------- == 201 tests, 6 stderr failures, 1 stdout failure ================= memcheck/tests/pth_once (stderr) memcheck/tests/scalar (stderr) memcheck/tests/threadederrno (stderr) memcheck/tests/writev (stderr) corecheck/tests/fdleak_fcntl (stderr) none/tests/map_unmap (stdout) none/tests/map_unmap (stderr) make: *** [regtest] Error 1 |
|
From: Tom H. <to...@co...> - 2005-05-14 02:36:05
|
Nightly build on dunsmere ( athlon, Fedora Core 3 ) started at 2005-05-14 03:30:04 BST Checking out vex source tree ... done Building vex ... done Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 175 tests, 167 stderr failures, 1 stdout failure ================= memcheck/tests/addressable (stderr) memcheck/tests/badaddrvalue (stderr) memcheck/tests/badfree-2trace (stderr) memcheck/tests/badfree (stderr) memcheck/tests/badjump (stderr) memcheck/tests/badjump2 (stderr) memcheck/tests/badloop (stderr) memcheck/tests/badpoll (stderr) memcheck/tests/badrw (stderr) memcheck/tests/brk (stderr) memcheck/tests/brk2 (stderr) memcheck/tests/buflen_check (stderr) memcheck/tests/clientperm (stderr) memcheck/tests/custom_alloc (stderr) memcheck/tests/describe-block (stderr) memcheck/tests/doublefree (stderr) memcheck/tests/errs1 (stderr) memcheck/tests/execve (stderr) memcheck/tests/execve2 (stderr) memcheck/tests/exitprog (stderr) memcheck/tests/fprw (stderr) memcheck/tests/fwrite (stderr) memcheck/tests/inits (stderr) memcheck/tests/inline (stderr) memcheck/tests/leak-0 (stderr) memcheck/tests/leak-cycle (stderr) memcheck/tests/leak-regroot (stderr) memcheck/tests/leak-tree (stderr) memcheck/tests/malloc1 (stderr) memcheck/tests/malloc2 (stderr) memcheck/tests/malloc3 (stderr) memcheck/tests/manuel1 (stderr) memcheck/tests/manuel2 (stderr) memcheck/tests/manuel3 (stderr) memcheck/tests/match-overrun (stderr) memcheck/tests/memalign2 (stderr) memcheck/tests/memalign_test (stderr) memcheck/tests/memcmptest (stderr) memcheck/tests/mempool (stderr) memcheck/tests/mismatches (stderr) memcheck/tests/mmaptest (stderr) memcheck/tests/nanoleak (stderr) memcheck/tests/nanoleak_supp (stderr) memcheck/tests/new_nothrow (stderr) memcheck/tests/new_override (stderr) memcheck/tests/null_socket (stderr) memcheck/tests/overlap (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/post-syscall (stderr) memcheck/tests/realloc1 (stderr) memcheck/tests/realloc2 (stderr) memcheck/tests/realloc3 (stderr) memcheck/tests/sigaltstack (stderr) memcheck/tests/signal2 (stderr) memcheck/tests/sigprocmask (stderr) memcheck/tests/str_tester (stderr) memcheck/tests/supp1 (stderr) memcheck/tests/supp2 (stderr) memcheck/tests/suppfree (stderr) memcheck/tests/toobig-allocs (stderr) memcheck/tests/trivialleak (stderr) memcheck/tests/vgtest_ume (stderr) memcheck/tests/weirdioctl (stderr) memcheck/tests/writev (stderr) memcheck/tests/x86/fpeflags (stderr) memcheck/tests/x86/pushfpopf (stderr) memcheck/tests/x86/scalar (stderr) memcheck/tests/x86/scalar_exit_group (stderr) memcheck/tests/x86/scalar_fork (stderr) memcheck/tests/x86/scalar_supp (stderr) memcheck/tests/x86/scalar_vfork (stderr) memcheck/tests/x86/tronical (stderr) memcheck/tests/zeropage (stderr) cachegrind/tests/chdir (stderr) cachegrind/tests/dlclose (stderr) cachegrind/tests/x86/fpu-28-108 (stderr) corecheck/tests/as_mmap (stderr) corecheck/tests/as_shm (stderr) corecheck/tests/erringfds (stderr) corecheck/tests/fdleak_cmsg (stderr) corecheck/tests/fdleak_creat (stderr) corecheck/tests/fdleak_dup (stderr) corecheck/tests/fdleak_dup2 (stderr) corecheck/tests/fdleak_fcntl (stderr) corecheck/tests/fdleak_ipv4 (stderr) corecheck/tests/fdleak_open (stderr) corecheck/tests/fdleak_pipe (stderr) corecheck/tests/fdleak_socketpair (stderr) corecheck/tests/pth_atfork1 (stderr) corecheck/tests/pth_cancel1 (stderr) corecheck/tests/pth_cancel2 (stderr) corecheck/tests/pth_cvsimple (stderr) corecheck/tests/pth_empty (stderr) corecheck/tests/pth_exit (stderr) corecheck/tests/pth_exit2 (stderr) corecheck/tests/pth_mutexspeed (stderr) corecheck/tests/pth_once (stderr) corecheck/tests/pth_rwlock (stderr) corecheck/tests/res_search (stderr) corecheck/tests/sigkill (stderr) corecheck/tests/threadederrno (stderr) corecheck/tests/vgprintf (stderr) massif/tests/toobig-allocs (stderr) massif/tests/true_html (stderr) massif/tests/true_text (stderr) lackey/tests/true (stderr) none/tests/args (stderr) none/tests/async-sigs (stderr) none/tests/bitfield1 (stderr) none/tests/blockfault (stderr) none/tests/closeall (stderr) none/tests/coolo_sigaction (stderr) none/tests/coolo_strlen (stderr) none/tests/discard (stderr) none/tests/exec-sigmask (stderr) none/tests/execve (stderr) none/tests/faultstatus (stderr) none/tests/fcntl_setown (stderr) none/tests/floored (stderr) none/tests/fork (stderr) none/tests/fucomip (stderr) none/tests/gxx304 (stderr) none/tests/manythreads (stderr) none/tests/map_unaligned (stderr) none/tests/map_unmap (stderr) none/tests/mq (stderr) none/tests/mremap (stderr) none/tests/munmap_exe (stderr) none/tests/pending (stderr) none/tests/pth_blockedsig (stderr) none/tests/pth_stackalign (stderr) none/tests/rcrl (stderr) none/tests/readline1 (stderr) none/tests/resolv (stderr) none/tests/rlimit_nofile (stderr) none/tests/selfrun (stdout) none/tests/selfrun (stderr) none/tests/sem (stderr) none/tests/semlimit (stderr) none/tests/sha1_test (stderr) none/tests/shortpush (stderr) none/tests/shorts (stderr) none/tests/sigstackgrowth (stderr) none/tests/smc1 (stderr) none/tests/stackgrowth (stderr) none/tests/syscall-restart1 (stderr) none/tests/syscall-restart2 (stderr) none/tests/system (stderr) none/tests/thread-exits (stderr) none/tests/threaded-fork (stderr) none/tests/tls (stderr) none/tests/x86/badseg (stderr) none/tests/x86/bt_everything (stderr) none/tests/x86/bt_literal (stderr) none/tests/x86/cpuid (stderr) none/tests/x86/fpu_lazy_eflags (stderr) none/tests/x86/getseg (stderr) none/tests/x86/insn_basic (stderr) none/tests/x86/insn_cmov (stderr) none/tests/x86/insn_fpu (stderr) none/tests/x86/insn_mmx (stderr) none/tests/x86/insn_mmxext (stderr) none/tests/x86/insn_sse (stderr) none/tests/x86/int (stderr) none/tests/x86/pushpopseg (stderr) none/tests/x86/seg_override (stderr) none/tests/x86/sigcontext (stderr) none/tests/yield (stderr) |
|
From: Tom H. <th...@cy...> - 2005-05-14 02:30:56
|
Nightly build on audi ( i686, Red Hat 9 ) started at 2005-05-14 03:25:01 BST Checking out vex source tree ... done Building vex ... done Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 174 tests, 3 stderr failures, 1 stdout failure ================= corecheck/tests/fdleak_cmsg (stderr) none/tests/faultstatus (stderr) none/tests/x86/int (stderr) none/tests/yield (stdout) |
|
From: Tom H. <to...@co...> - 2005-05-14 02:26:22
|
Nightly build on dunsmere ( Fedora Core 3 ) started at 2005-05-14 03:20:04 BST Checking out source tree ... done Configuring ... done Building ... done Running regression tests ... done Last 20 lines of log.verbose follow insn_mmx: valgrind ./insn_mmx insn_mmxext: valgrind ./insn_mmxext insn_sse: valgrind ./insn_sse insn_sse2: (skipping, prereq failed: ../../../tests/cputest x86-sse2) int: valgrind ./int sh: line 1: 23953 Segmentation fault VALGRINDLIB=/tmp/valgrind.30662/valgrind/.in_place /tmp/valgrind.30662/valgrind/./coregrind/valgrind --command-line-only=yes --memcheck:leak-check=no --addrcheck:leak-check=no --tool=none ./int >int.stdout.out 2>int.stderr.out pushpopseg: valgrind ./pushpopseg rcl_assert: valgrind ./rcl_assert seg_override: valgrind ./seg_override -- Finished tests in none/tests/x86 ------------------------------------ yield: valgrind ./yield -- Finished tests in none/tests ---------------------------------------- == 207 tests, 4 stderr failures, 0 stdout failures ================= memcheck/tests/execve (stderr) memcheck/tests/execve2 (stderr) memcheck/tests/scalar (stderr) memcheck/tests/scalar_supp (stderr) make: *** [regtest] Error 1 |
|
From: Tom H. <th...@cy...> - 2005-05-14 02:25:41
|
Nightly build on ginetta ( i686, Red Hat 8.0 ) started at 2005-05-14 03:20:02 BST Checking out vex source tree ... done Building vex ... done Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 173 tests, 3 stderr failures, 0 stdout failures ================= corecheck/tests/fdleak_cmsg (stderr) none/tests/faultstatus (stderr) none/tests/x86/int (stderr) |
|
From: Tom H. <th...@cy...> - 2005-05-14 02:22:29
|
Nightly build on audi ( Red Hat 9 ) started at 2005-05-14 03:15:01 BST Checking out source tree ... done Configuring ... done Building ... done Running regression tests ... done Last 20 lines of log.verbose follow fpu_lazy_eflags: valgrind ./fpu_lazy_eflags insn_basic: valgrind ./insn_basic insn_cmov: valgrind ./insn_cmov insn_fpu: valgrind ./insn_fpu insn_mmx: valgrind ./insn_mmx insn_mmxext: valgrind ./insn_mmxext insn_sse: valgrind ./insn_sse insn_sse2: (skipping, prereq failed: ../../../tests/cputest x86-sse2) int: valgrind ./int pushpopseg: valgrind ./pushpopseg rcl_assert: valgrind ./rcl_assert seg_override: valgrind ./seg_override -- Finished tests in none/tests/x86 ------------------------------------ yield: valgrind ./yield -- Finished tests in none/tests ---------------------------------------- == 206 tests, 1 stderr failure, 0 stdout failures ================= memcheck/tests/scalar (stderr) make: *** [regtest] Error 1 |
|
From: Tom H. <th...@cy...> - 2005-05-14 02:20:58
|
Nightly build on alvis ( i686, Red Hat 7.3 ) started at 2005-05-14 03:15:02 BST Checking out vex source tree ... done Building vex ... done Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 173 tests, 12 stderr failures, 0 stdout failures ================= memcheck/tests/addressable (stderr) memcheck/tests/describe-block (stderr) memcheck/tests/leak-0 (stderr) memcheck/tests/leak-cycle (stderr) memcheck/tests/leak-regroot (stderr) memcheck/tests/leak-tree (stderr) memcheck/tests/match-overrun (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/vgtest_ume (stderr) corecheck/tests/fdleak_cmsg (stderr) none/tests/faultstatus (stderr) none/tests/x86/int (stderr) |
|
From: Tom H. <th...@cy...> - 2005-05-14 02:20:34
|
Nightly build on dellow ( x86_64, Fedora Core 3 ) started at 2005-05-14 03:10:02 BST Checking out vex source tree ... done Building vex ... done Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 154 tests, 17 stderr failures, 2 stdout failures ================= memcheck/tests/brk (stderr) memcheck/tests/error_counts (stdout) memcheck/tests/sigaltstack (stderr) memcheck/tests/sigprocmask (stderr) memcheck/tests/toobig-allocs (stderr) memcheck/tests/weirdioctl (stderr) corecheck/tests/fdleak_cmsg (stderr) corecheck/tests/fdleak_creat (stderr) corecheck/tests/fdleak_dup (stderr) corecheck/tests/fdleak_dup2 (stderr) corecheck/tests/fdleak_fcntl (stderr) corecheck/tests/fdleak_ipv4 (stderr) corecheck/tests/fdleak_open (stderr) corecheck/tests/fdleak_pipe (stderr) corecheck/tests/fdleak_socketpair (stderr) massif/tests/toobig-allocs (stderr) none/tests/faultstatus (stderr) none/tests/selfrun (stdout) none/tests/selfrun (stderr) |
|
From: Tom H. <th...@cy...> - 2005-05-14 02:16:46
|
Nightly build on ginetta ( Red Hat 8.0 ) started at 2005-05-14 03:10:02 BST Checking out source tree ... done Configuring ... done Building ... done Running regression tests ... done Last 20 lines of log.verbose follow insn_cmov: valgrind ./insn_cmov insn_fpu: valgrind ./insn_fpu insn_mmx: valgrind ./insn_mmx insn_mmxext: valgrind ./insn_mmxext insn_sse: valgrind ./insn_sse insn_sse2: (skipping, prereq failed: ../../../tests/cputest x86-sse2) int: valgrind ./int pushpopseg: valgrind ./pushpopseg rcl_assert: valgrind ./rcl_assert seg_override: valgrind ./seg_override -- Finished tests in none/tests/x86 ------------------------------------ yield: valgrind ./yield -- Finished tests in none/tests ---------------------------------------- == 205 tests, 3 stderr failures, 0 stdout failures ================= memcheck/tests/pth_once (stderr) memcheck/tests/scalar (stderr) memcheck/tests/threadederrno (stderr) make: *** [regtest] Error 1 |
|
From: Tom H. <th...@cy...> - 2005-05-14 02:11:36
|
Nightly build on alvis ( Red Hat 7.3 ) started at 2005-05-14 03:05:02 BST Checking out source tree ... done Configuring ... done Building ... done Running regression tests ... done Last 20 lines of log.verbose follow == 205 tests, 17 stderr failures, 0 stdout failures ================= memcheck/tests/addressable (stderr) memcheck/tests/describe-block (stderr) memcheck/tests/distinguished-writes (stderr) memcheck/tests/leak-0 (stderr) memcheck/tests/leak-cycle (stderr) memcheck/tests/leak-regroot (stderr) memcheck/tests/leak-tree (stderr) memcheck/tests/match-overrun (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/pth_once (stderr) memcheck/tests/scalar (stderr) memcheck/tests/threadederrno (stderr) memcheck/tests/vgtest_ume (stderr) addrcheck/tests/leak-0 (stderr) addrcheck/tests/leak-cycle (stderr) addrcheck/tests/leak-regroot (stderr) addrcheck/tests/leak-tree (stderr) make: *** [regtest] Error 1 |
|
From: <sv...@va...> - 2005-05-14 02:08:52
|
Author: sewardj Date: 2005-05-14 03:08:48 +0100 (Sat, 14 May 2005) New Revision: 3704 Modified: trunk/none/tests/x86/insn_sse2.def trunk/none/tests/x86/insn_sse2.stdout.exp Log: No wonder I couldn't figure out exactly how movq was supposed to behave .. no test cases! Now fixed. Modified: trunk/none/tests/x86/insn_sse2.def =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- trunk/none/tests/x86/insn_sse2.def 2005-05-13 23:40:55 UTC (rev 3703) +++ trunk/none/tests/x86/insn_sse2.def 2005-05-14 02:08:48 UTC (rev 3704) @@ -103,6 +103,9 @@ movntdq xmm.uq[0x012345678abcdef,0xfedcba9876543210] m128.uq[0x121212123= 4343434,0x5656565678787878] =3D> 1.uq[0x012345678abcdef,0xfedcba987654321= 0] movnti r32.sd[12345678] m32.sd[11111111] =3D> 1.sd[12345678] movntpd xmm.pd[1234.5678,8765.4321] m128.pd[1111.1111,2222.2222] =3D> 1.= pd[1234.5678,8765.4321] +movq xmm.pd[1234.5678,8765.4321] xmm.pd[1111.1111,2222.2222] =3D> 1.pd[1= 234.5678,0.0] +movq m64.pd[1234.5678] xmm.pd[1111.1111,2222.2222] =3D> 1.pd[1234.5678,0= .0] +movq xmm.pd[1234.5678,8765.4321] m64.pd[1111.1111] =3D> 1.pd[1234.5678] movq2dq mm.uq[0x012345678abcdef] xmm.uq[0x1212121234343434,0x56565656787= 87878] =3D> 1.uq[0x012345678abcdef,0] movsd xmm.pd[1234.5678,8765.4321] xmm.pd[1111.1111,2222.2222] =3D> 1.pd[= 1234.5678,2222.2222] movsd m64.pd[1234.5678] xmm.pd[1111.1111,2222.2222] =3D> 1.pd[1234.5678,= 0.0] Modified: trunk/none/tests/x86/insn_sse2.stdout.exp =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- trunk/none/tests/x86/insn_sse2.stdout.exp 2005-05-13 23:40:55 UTC (re= v 3703) +++ trunk/none/tests/x86/insn_sse2.stdout.exp 2005-05-14 02:08:48 UTC (re= v 3704) @@ -103,6 +103,9 @@ movntdq_1 ... ok movnti_1 ... ok movntpd_1 ... ok +movq_1 ... ok +movq_2 ... ok +movq_3 ... ok movq2dq_1 ... ok movsd_1 ... ok movsd_2 ... ok |
|
From: Tom H. <th...@cy...> - 2005-05-14 02:05:20
|
Nightly build on gill ( x86_64, Fedora Core 2 ) started at 2005-05-14 03:00:02 BST Checking out vex source tree ... done Building vex ... done Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 154 tests, 17 stderr failures, 2 stdout failures ================= memcheck/tests/brk (stderr) memcheck/tests/error_counts (stdout) memcheck/tests/sigaltstack (stderr) memcheck/tests/sigprocmask (stderr) memcheck/tests/toobig-allocs (stderr) memcheck/tests/weirdioctl (stderr) corecheck/tests/fdleak_cmsg (stderr) corecheck/tests/fdleak_creat (stderr) corecheck/tests/fdleak_dup (stderr) corecheck/tests/fdleak_dup2 (stderr) corecheck/tests/fdleak_fcntl (stderr) corecheck/tests/fdleak_ipv4 (stderr) corecheck/tests/fdleak_open (stderr) corecheck/tests/fdleak_pipe (stderr) corecheck/tests/fdleak_socketpair (stderr) massif/tests/toobig-allocs (stderr) none/tests/faultstatus (stderr) none/tests/selfrun (stdout) none/tests/selfrun (stderr) |
|
From: <sv...@va...> - 2005-05-14 02:04:16
|
Author: sewardj
Date: 2005-05-14 03:04:12 +0100 (Sat, 14 May 2005)
New Revision: 1197
Modified:
trunk/priv/guest-x86/toIR.c
Log:
Finally fix the behaviour of MOVQ (xmm -> xmm).
Modified: trunk/priv/guest-x86/toIR.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/priv/guest-x86/toIR.c 2005-05-14 02:02:50 UTC (rev 1196)
+++ trunk/priv/guest-x86/toIR.c 2005-05-14 02:04:12 UTC (rev 1197)
@@ -9245,6 +9245,7 @@
modrm =3D getIByte(delta+2);
if (epartIsReg(modrm)) {
/* fall through, awaiting test case */
+ /* dst: lo half copied, hi half zeroed */
} else {
addr =3D disAMode ( &alen, sorb, delta+2, dis_buf );
storeLE( mkexpr(addr),=20
@@ -9274,10 +9275,10 @@
}
=20
/* F3 0F 7E =3D MOVQ -- move 64 bits from E (mem or lo half xmm) to
- G (lo half xmm). If E is mem, upper half of G is zeroed out. */
+ G (lo half xmm). Upper half of G is zeroed out. */
/* F2 0F 10 =3D MOVSD -- move 64 bits from E (mem or lo half xmm) to
G (lo half xmm). If E is mem, upper half of G is zeroed out.
- (original defn) */
+ If E is reg, upper half of G is unchanged. */
if ((insn[0] =3D=3D 0xF2 && insn[1] =3D=3D 0x0F && insn[2] =3D=3D 0x1=
0)
|| (insn[0] =3D=3D 0xF3 && insn[1] =3D=3D 0x0F && insn[2] =3D=3D =
0x7E)) {
vassert(sz =3D=3D 4);
@@ -9285,6 +9286,10 @@
if (epartIsReg(modrm)) {
putXMMRegLane64( gregOfRM(modrm), 0,
getXMMRegLane64( eregOfRM(modrm), 0 ));
+ if (insn[0] =3D=3D 0xF3/*MOVQ*/) {
+ /* zero bits 127:64 */
+ putXMMRegLane64( gregOfRM(modrm), 1, mkU64(0) );
+ }
DIP("movsd %s,%s\n", nameXMMReg(eregOfRM(modrm)),
nameXMMReg(gregOfRM(modrm)));
delta +=3D 3+1;
|
|
From: <sv...@va...> - 2005-05-14 02:02:59
|
Author: sewardj
Date: 2005-05-14 03:02:50 +0100 (Sat, 14 May 2005)
New Revision: 1196
Modified:
trunk/priv/host-x86/isel.c
Log:
Handle NegF64.
Modified: trunk/priv/host-x86/isel.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/priv/host-x86/isel.c 2005-05-13 13:54:48 UTC (rev 1195)
+++ trunk/priv/host-x86/isel.c 2005-05-14 02:02:50 UTC (rev 1196)
@@ -2305,6 +2305,24 @@
return;
}
=20
+ /* Neg64(e) */
+ case Iop_Neg64: {
+ HReg yLo, yHi;
+ HReg tLo =3D newVRegI(env);
+ HReg tHi =3D newVRegI(env);
+ /* yHi:yLo =3D arg */
+ iselInt64Expr(&yHi, &yLo, env, e->Iex.Unop.arg);
+ /* tLo =3D 0 - yLo, and set carry */
+ addInstr(env, X86Instr_Alu32R(Xalu_MOV, X86RMI_Imm(0), tLo))=
;
+ addInstr(env, X86Instr_Alu32R(Xalu_SUB, X86RMI_Reg(yLo), tLo=
));
+ /* tHi =3D 0 - yHi - carry */
+ addInstr(env, X86Instr_Alu32R(Xalu_MOV, X86RMI_Imm(0), tHi))=
;
+ addInstr(env, X86Instr_Alu32R(Xalu_SBB, X86RMI_Reg(yHi), tHi=
));
+ *rHi =3D tHi;
+ *rLo =3D tLo;
+ return;
+ }
+
/* ReinterpF64asI64(e) */
/* Given an IEEE754 double, produce an I64 with the same bit
pattern. */
|