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
(31) |
2
(27) |
|
3
(25) |
4
(21) |
5
(21) |
6
(21) |
7
(32) |
8
(23) |
9
(15) |
|
10
(12) |
11
(9) |
12
(10) |
13
(10) |
14
(9) |
15
(7) |
16
(20) |
|
17
(14) |
18
(71) |
19
(67) |
20
(50) |
21
(25) |
22
(15) |
23
(37) |
|
24
(25) |
25
(41) |
26
(34) |
27
(57) |
28
(20) |
29
(30) |
30
(13) |
|
31
(18) |
|
|
|
|
|
|
|
From: <sv...@va...> - 2005-07-08 21:55:55
|
Author: sewardj
Date: 2005-07-08 22:55:22 +0100 (Fri, 08 Jul 2005)
New Revision: 1270
Log:
Implement 8-byte-transfer cases for lwsi and stswi.
Modified:
trunk/priv/guest-ppc32/toIR.c
Modified: trunk/priv/guest-ppc32/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-ppc32/toIR.c 2005-07-08 13:34:47 UTC (rev 1269)
+++ trunk/priv/guest-ppc32/toIR.c 2005-07-08 21:55:22 UTC (rev 1270)
@@ -2124,6 +2124,21 @@
=20
switch (opc2) {
case 0x255: // lswi (Load String Word Immediate, PPC32 p455)
+
+ if (NumBytes =3D=3D 8) {
+ /* Special case hack */
+ /* Rd =3D Mem[EA]; (Rd+1)%32 =3D Mem[EA+4] */
+ DIP("lswi r%d,r%d,%d\n", Rd_addr, Ra_addr, NumBytes);
+ putIReg( Rd_addr, =20
+ loadBE(Ity_I32, mkexpr(b_EA)) );
+
+ putIReg( (Rd_addr+1) % 32,=20
+ loadBE(Ity_I32, binop(Iop_Add32, mkexpr(b_EA), mkU32(4=
))) );
+ return True;
+ }
+
+ /* else too difficult */
+ return False;
vassert(0);
=20
n_regs =3D (NumBytes / 4) + (NumBytes%4 =3D=3D 0 ? 0:1); // ceil(n=
b/4)
@@ -2166,7 +2181,8 @@
if (bit_idx =3D=3D 32) { bit_idx =3D 0; }
EA_offset++;
}
- =20
+ break; =20
+
case 0x215: // lswx (Load String Word Indexed, PPC32 p456)
vassert(0);
=20
@@ -2174,6 +2190,21 @@
return False;
=20
case 0x2D5: // stswi (Store String Word Immediate, PPC32 p528)
+
+ if (NumBytes =3D=3D 8) {
+ /* Special case hack */
+ /* Mem[EA] =3D Rd; Mem[EA+4] =3D (Rd+1)%32 */
+ DIP("stswi r%d,r%d,%d\n", Rs_addr, Ra_addr, NumBytes);
+ storeBE( mkexpr(b_EA),=20
+ getIReg(Rd_addr) );
+ storeBE( binop(Iop_Add32, mkexpr(b_EA), mkU32(4)),=20
+ getIReg((Rd_addr+1) % 32) );
+ return True;
+ }
+
+ /* else too difficult */
+ return False;
+
vassert(0);
=20
DIP("stswi r%d,r%d,%d\n", Rs_addr, Ra_addr, NumBytes);
|
|
From: Waldo B. <Wal...@in...> - 2005-07-08 20:00:34
|
Hi, At Intel we are currently looking what needs to be done in Eclipse to enable the integration of memory access checking tools such as valgrind. I was wondering if any of you have been looking into integration of valgrind into Eclipse already or whether you know anyone that is working on this or plans to in the near future. In particular I'm interested to hear about any requirements that you may have for Eclipse in this regard. Cheers, Waldo -- Linux Client Architect - Channel Software Operation - Intel Corporation |
|
From: <sv...@va...> - 2005-07-08 18:28:44
|
Author: sewardj
Date: 2005-07-08 19:28:40 +0100 (Fri, 08 Jul 2005)
New Revision: 4138
Log:
Import sigframe stuff from Paul's tree. With this and the other changes=20
today, it's possible to run bash on ppc32-linux.
Modified:
trunk/coregrind/m_sigframe/sigframe-ppc32-linux.c
Modified: trunk/coregrind/m_sigframe/sigframe-ppc32-linux.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_sigframe/sigframe-ppc32-linux.c 2005-07-08 18:27:22=
UTC (rev 4137)
+++ trunk/coregrind/m_sigframe/sigframe-ppc32-linux.c 2005-07-08 18:28:40=
UTC (rev 4138)
@@ -8,8 +8,10 @@
This file is part of Valgrind, a dynamic binary instrumentation
framework.
=20
- Copyright (C) 2005 Nicholas Nethercote
- nj...@ca...
+ Copyright (C) 2000-2005 Nicholas Nethercote
+ nj...@va...
+ Copyright (C) 2004-2005 Paul Mackerras
+ pa...@sa...
=20
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
@@ -42,6 +44,8 @@
#include "pub_core_signals.h"
#include "pub_core_tooliface.h"
#include "pub_core_trampoline.h"
+#include "pub_core_transtab.h" // VG_(discard_translations)
+#include "vki_unistd-ppc32-linux.h" // __NR_rt_sigreturn
=20
=20
/* This module creates and removes signal frames for signal deliveries
@@ -85,68 +89,157 @@
// make assumptions about the locations of various parts of the frame,
// so we need to duplicate it exactly.
=20
-/* Valgrind-specific parts of the signal frame */
-struct vg_sigframe
-{
- /* Sanity check word. */
+/* Structure containing bits of information that we want to save
+ on signal delivery. */
+struct vg_sig_private {
UInt magicPI;
+ UInt sigNo_private;
+ VexGuestPPC32State shadow;
+};
=20
- UInt handlerflags; /* flags for signal handler */
+/* Structure put on stack for signal handlers with SA_SIGINFO clear. */
+struct nonrt_sigframe {
+ UInt gap1[16];
+ struct vki_sigcontext sigcontext;
+ struct vki_mcontext mcontext;
+ struct vg_sig_private priv;
+ unsigned char abigap[224];
+};
=20
+/* Structure put on stack for signal handlers with SA_SIGINFO set. */
+struct rt_sigframe {
+ UInt gap1[20];
+ vki_siginfo_t siginfo;
+ struct vki_ucontext ucontext;
+ struct vg_sig_private priv;
+ unsigned char abigap[224];
+};
=20
- /* Safely-saved version of sigNo, as described above. */
- Int sigNo_private;
+#define SET_SIGNAL_LR(zztst, zzval) \
+ do { tst->arch.vex.guest_LR =3D (zzval); \
+ VG_TRACK( post_reg_write, Vg_CoreSignal, tst->tid, \
+ offsetof(VexGuestPPC32State,guest_LR), \
+ sizeof(UWord) ); \
+ } while (0)
=20
- /* XXX This is wrong. Surely we should store the shadow values
- into the shadow memory behind the actual values? */
- VexGuestPPC32State vex_shadow;
+#define SET_SIGNAL_GPR(zztst, zzn, zzval) \
+ do { tst->arch.vex.guest_GPR##zzn =3D (zzval); \
+ VG_TRACK( post_reg_write, Vg_CoreSignal, tst->tid, \
+ offsetof(VexGuestPPC32State,guest_GPR##zzn), \
+ sizeof(UWord) ); \
+ } while (0)
=20
- /* HACK ALERT */
- VexGuestPPC32State vex;
- /* end HACK ALERT */
=20
- /* saved signal mask to be restored when handler returns */
- vki_sigset_t mask;
-
- /* Sanity check word. Is the highest-addressed word; do not
- move!*/
- UInt magicE;
-};
-
-struct sigframe
+static=20
+void stack_mcontext ( struct vki_mcontext *mc,=20
+ ThreadState* tst,=20
+ Int ret,
+ UInt fault_addr )
{
- /* Sig handler's return address */
- Addr retaddr;
- Int sigNo;
+ VG_TRACK( pre_mem_write, Vg_CoreSignal, tst->tid, "signal frame mcont=
ext",
+ (Addr)mc, sizeof(struct vki_pt_regs) );
=20
- struct vki_sigcontext sigContext;
-//.. struct _vki_fpstate fpstate;
+# define DO(gpr) mc->mc_gregs[VKI_PT_R0+gpr] =3D tst->arch.vex.guest_G=
PR##gpr
+ DO(0); DO(1); DO(2); DO(3); DO(4); DO(5); DO(6); DO(7);
+ DO(8); DO(9); DO(10); DO(11); DO(12); DO(13); DO(14); DO(15);
+ DO(16); DO(17); DO(18); DO(19); DO(20); DO(21); DO(22); DO(23);
+ DO(24); DO(25); DO(26); DO(27); DO(28); DO(29); DO(30); DO(31);
+# undef DO
=20
- struct vg_sigframe vg;
-};
+ mc->mc_gregs[VKI_PT_NIP] =3D tst->arch.vex.guest_CIA;
+ mc->mc_gregs[VKI_PT_MSR] =3D 0xf032; /* pretty arbitrary */
+ mc->mc_gregs[VKI_PT_ORIG_R3] =3D tst->arch.vex.guest_GPR3;
+ mc->mc_gregs[VKI_PT_CTR] =3D tst->arch.vex.guest_CTR;
+ mc->mc_gregs[VKI_PT_LNK] =3D tst->arch.vex.guest_LR;
+ mc->mc_gregs[VKI_PT_XER] =3D tst->arch.vex.guest_XER;
+ mc->mc_gregs[VKI_PT_CCR] =3D LibVEX_GuestPPC32_get_cr(&tst->arch.=
vex);
+ mc->mc_gregs[VKI_PT_MQ] =3D 0;
+ mc->mc_gregs[VKI_PT_TRAP] =3D 0;
+ mc->mc_gregs[VKI_PT_DAR] =3D fault_addr;
+ mc->mc_gregs[VKI_PT_DSISR] =3D 0;
+ mc->mc_gregs[VKI_PT_RESULT] =3D 0;
+ VG_TRACK( post_mem_write, Vg_CoreSignal, tst->tid,=20
+ (Addr)mc, sizeof(struct vki_pt_regs) );
=20
-struct rt_sigframe
-{
- /* Sig handler's return address */
- Addr retaddr;
- Int sigNo;
+ /* XXX should do FP and vector regs */
=20
- /* ptr to siginfo_t. */
- Addr psigInfo;
+ /* set up signal return trampoline */
+ VG_TRACK(pre_mem_write, Vg_CoreSignal, tst->tid, "signal frame mconte=
xt",
+ (Addr)&mc->mc_pad, sizeof(mc->mc_pad));
+ mc->mc_pad[0] =3D 0x38000000U + ret; /* li 0,ret */
+ mc->mc_pad[1] =3D 0x44000002U; /* sc */
+ VG_TRACK( post_mem_write, Vg_CoreSignal, tst->tid,=20
+ (Addr)&mc->mc_pad, sizeof(mc->mc_pad) );
+ /* invalidate any translation of this area */
+ VG_(discard_translations)( (Addr64)(Addr)&mc->mc_pad,=20
+ sizeof(mc->mc_pad) ); =20
=20
- /* ptr to ucontext */
- Addr puContext;
- /* pointed to by psigInfo */
- vki_siginfo_t sigInfo;
+ /* set the signal handler to return to the trampoline */
+ SET_SIGNAL_LR(tst, (Addr) &mc->mc_pad[0]);
+}
=20
- /* pointed to by puContext */
- struct vki_ucontext uContext;
-//.. struct _vki_fpstate fpstate;
+//:: /* Valgrind-specific parts of the signal frame */
+//:: struct vg_sigframe
+//:: {
+//:: /* Sanity check word. */
+//:: UInt magicPI;
+//::=20
+//:: UInt handlerflags; /* flags for signal handler */
+//::=20
+//::=20
+//:: /* Safely-saved version of sigNo, as described above. */
+//:: Int sigNo_private;
+//::=20
+//:: /* XXX This is wrong. Surely we should store the shadow values
+//:: into the shadow memory behind the actual values? */
+//:: VexGuestPPC32State vex_shadow;
+//::=20
+//:: /* HACK ALERT */
+//:: VexGuestPPC32State vex;
+//:: /* end HACK ALERT */
+//::=20
+//:: /* saved signal mask to be restored when handler returns */
+//:: vki_sigset_t mask;
+//::=20
+//:: /* Sanity check word. Is the highest-addressed word; do not
+//:: move!*/
+//:: UInt magicE;
+//:: };
+//::=20
+//:: struct sigframe
+//:: {
+//:: /* Sig handler's return address */
+//:: Addr retaddr;
+//:: Int sigNo;
+//::=20
+//:: struct vki_sigcontext sigContext;
+//:: //.. struct _vki_fpstate fpstate;
+//::=20
+//:: struct vg_sigframe vg;
+//:: };
+//::=20
+//:: struct rt_sigframe
+//:: {
+//:: /* Sig handler's return address */
+//:: Addr retaddr;
+//:: Int sigNo;
+//::=20
+//:: /* ptr to siginfo_t. */
+//:: Addr psigInfo;
+//::=20
+//:: /* ptr to ucontext */
+//:: Addr puContext;
+//:: /* pointed to by psigInfo */
+//:: vki_siginfo_t sigInfo;
+//::=20
+//:: /* pointed to by puContext */
+//:: struct vki_ucontext uContext;
+//:: //.. struct _vki_fpstate fpstate;
+//::=20
+//:: struct vg_sigframe vg;
+//:: };
=20
- struct vg_sigframe vg;
-};
=20
-
//:: /*------------------------------------------------------------*/
//:: /*--- Signal operations ---*/
//:: /*------------------------------------------------------------*/
@@ -393,50 +486,51 @@
//.. SET_THREAD_REG(zztid, zzval, STACK_PTR, post_reg_write, \
//.. Vg_CoreSignal, zztid, VG_O_STACK_PTR, sizeof(Addr=
))
*/
-//.. /* Extend the stack segment downwards if needed so as to ensure the
-//.. new signal frames are mapped to something. Return a Bool
-//.. indicating whether or not the operation was successful.
-//.. */
-//.. static Bool extend ( ThreadState *tst, Addr addr, SizeT size )
-//.. {
-//.. ThreadId tid =3D tst->tid;
-//.. Segment *stackseg =3D NULL;
-//..=20
-//.. if (VG_(extend_stack)(addr, tst->client_stack_szB)) {
-//.. stackseg =3D VG_(find_segment)(addr);
-//.. if (0 && stackseg)
-//.. VG_(printf)("frame=3D%p seg=3D%p-%p\n",
-//.. addr, stackseg->addr, stackseg->addr+stackseg->len);
-//.. }
-//..=20
-//.. if (stackseg =3D=3D NULL=20
-//.. || (stackseg->prot & (VKI_PROT_READ|VKI_PROT_WRITE)) =3D=3D =
0) {
-//.. VG_(message)(
-//.. Vg_UserMsg,
-//.. "Can't extend stack to %p during signal delivery for threa=
d %d:",
-//.. addr, tid);
-//.. if (stackseg =3D=3D NULL)
-//.. VG_(message)(Vg_UserMsg, " no stack segment");
-//.. else
-//.. VG_(message)(Vg_UserMsg, " too small or bad protection mo=
des");
-//..=20
-//.. /* set SIGSEGV to default handler */
-//.. VG_(set_default_handler)(VKI_SIGSEGV);
-//.. VG_(synth_fault_mapping)(tid, addr);
-//..=20
-//.. /* The whole process should be about to die, since the defaul=
t
-//.. action of SIGSEGV to kill the whole process. */
-//.. return False;
-//.. }
-//..=20
-//.. /* For tracking memory events, indicate the entire frame has bee=
n
-//.. allocated. */
-//.. VG_TRACK( new_mem_stack_signal, addr, size );
-//..=20
-//.. return True;
-//.. }
=20
+/* Extend the stack segment downwards if needed so as to ensure the
+ new signal frames are mapped to something. Return a Bool
+ indicating whether or not the operation was successful.
+*/
+static Bool extend ( ThreadState *tst, Addr addr, SizeT size )
+{
+ ThreadId tid =3D tst->tid;
+ Segment *stackseg =3D NULL;
=20
+ if (VG_(extend_stack)(addr, tst->client_stack_szB)) {
+ stackseg =3D VG_(find_segment)(addr);
+ if (0 && stackseg)
+ VG_(printf)("frame=3D%p seg=3D%p-%p\n",
+ addr, stackseg->addr, stackseg->addr+stackseg->len);
+ }
+
+ if (stackseg =3D=3D NULL=20
+ || (stackseg->prot & (VKI_PROT_READ|VKI_PROT_WRITE)) =3D=3D 0) {
+ VG_(message)(
+ Vg_UserMsg,
+ "Can't extend stack to %p during signal delivery for thread %d:=
",
+ addr, tid);
+ if (stackseg =3D=3D NULL)
+ VG_(message)(Vg_UserMsg, " no stack segment");
+ else
+ VG_(message)(Vg_UserMsg, " too small or bad protection modes")=
;
+
+ /* set SIGSEGV to default handler */
+ VG_(set_default_handler)(VKI_SIGSEGV);
+ VG_(synth_fault_mapping)(tid, addr);
+
+ /* The whole process should be about to die, since the default
+ action of SIGSEGV to kill the whole process. */
+ return False;
+ }
+
+ /* For tracking memory events, indicate the entire frame has been
+ allocated. */
+ VG_TRACK( new_mem_stack_signal, addr - VG_STACK_REDZONE_SZB,
+ size + VG_STACK_REDZONE_SZB );
+
+ return True;
+}
+
//.. /* Build the Valgrind-specific part of a signal frame. */
//..=20
//.. static void build_vg_sigframe(struct vg_sigframe *frame,
@@ -566,8 +660,102 @@
const vki_sigset_t *mask,
void *restorer )
{
- I_die_here;
+ struct vg_sig_private *priv;
+ Addr sp;
+ ThreadState *tst;
+ Int sigNo =3D siginfo->si_signo;
+ Addr faultaddr;
=20
+ /* Stack must be 16-byte aligned */
+ sp_top_of_frame &=3D ~0xf;
+
+ if (flags & VKI_SA_SIGINFO) {
+ sp =3D sp_top_of_frame - sizeof(struct rt_sigframe);
+ } else {
+ sp =3D sp_top_of_frame - sizeof(struct nonrt_sigframe);
+ }
+
+ tst =3D VG_(get_ThreadState)(tid);
+
+ if (!extend(tst, sp, sp_top_of_frame - sp))
+ return;
+
+ vg_assert(VG_IS_16_ALIGNED(sp));
+
+ /* Set up the stack chain pointer */
+ VG_TRACK( pre_mem_write, Vg_CoreSignal, tid, "signal handler frame",
+ sp, sizeof(UWord) );
+ *(Addr *)sp =3D tst->arch.vex.guest_GPR1;
+ VG_TRACK( post_mem_write, Vg_CoreSignal, tid,=20
+ sp, sizeof(UWord) );
+
+ faultaddr =3D (Addr)siginfo->_sifields._sigfault._addr;
+ if (sigNo =3D=3D VKI_SIGILL && siginfo->si_code > 0)
+ faultaddr =3D tst->arch.vex.guest_CIA;
+
+ if (flags & VKI_SA_SIGINFO) {
+ struct rt_sigframe *frame =3D (struct rt_sigframe *) sp;
+ struct vki_ucontext *ucp =3D &frame->ucontext;
+
+ VG_TRACK( pre_mem_write, Vg_CoreSignal, tid, "signal frame siginfo=
",
+ (Addr)&frame->siginfo, sizeof(frame->siginfo) );
+ VG_(memcpy)(&frame->siginfo, siginfo, sizeof(*siginfo));
+ VG_TRACK( post_mem_write, Vg_CoreSignal, tid,=20
+ (Addr)&frame->siginfo, sizeof(frame->siginfo) );
+
+ VG_TRACK( pre_mem_write, Vg_CoreSignal, tid, "signal frame ucontex=
t",
+ (Addr)ucp, offsetof(struct vki_ucontext, uc_pad) );
+ ucp->uc_flags =3D 0;
+ ucp->uc_link =3D 0;
+ ucp->uc_stack =3D tst->altstack;
+ VG_TRACK( post_mem_write, Vg_CoreSignal, tid, (Addr)ucp,
+ offsetof(struct vki_ucontext, uc_pad) );
+
+ VG_TRACK( pre_mem_write, Vg_CoreSignal, tid, "signal frame ucontex=
t",
+ (Addr)&ucp->uc_regs,
+ sizeof(ucp->uc_regs) + sizeof(ucp->uc_sigmask) );
+ ucp->uc_regs =3D &ucp->uc_mcontext;
+ ucp->uc_sigmask =3D tst->sig_mask;
+ VG_TRACK( post_mem_write, Vg_CoreSignal, tid,=20
+ (Addr)&ucp->uc_regs,
+ sizeof(ucp->uc_regs) + sizeof(ucp->uc_sigmask) );
+
+ stack_mcontext(&ucp->uc_mcontext, tst, __NR_rt_sigreturn, faultadd=
r);
+ priv =3D &frame->priv;
+
+ SET_SIGNAL_GPR(tid, 4, (Addr) &frame->siginfo);
+ SET_SIGNAL_GPR(tid, 5, (Addr) ucp);
+ /* the kernel sets this, though it doesn't seem to be in the ABI *=
/
+ SET_SIGNAL_GPR(tid, 6, (Addr) &frame->siginfo);
+
+ } else {
+ /* non-RT signal delivery */
+ struct nonrt_sigframe *frame =3D (struct nonrt_sigframe *) sp;
+ struct vki_sigcontext *scp =3D &frame->sigcontext;
+
+ VG_TRACK( pre_mem_write, Vg_CoreSignal, tid, "signal frame sigcont=
ext",
+ (Addr)&scp->_unused[3], sizeof(*scp) - 3 * sizeof(UInt) =
);
+ scp->signal =3D sigNo;
+ scp->handler =3D (Addr) handler;
+ scp->oldmask =3D tst->sig_mask.sig[0];
+ scp->_unused[3] =3D tst->sig_mask.sig[1];
+ VG_TRACK( post_mem_write, Vg_CoreSignal, tid,
+ (Addr)&scp->_unused[3], sizeof(*scp) - 3 * sizeof(UInt) =
);
+
+ stack_mcontext(&frame->mcontext, tst, __NR_sigreturn, faultaddr);
+ priv =3D &frame->priv;
+
+ SET_SIGNAL_GPR(tid, 4, (Addr) scp);
+ }
+
+ priv->magicPI =3D 0x31415927;
+ priv->sigNo_private =3D sigNo;
+ priv->shadow =3D tst->arch.vex_shadow;
+
+ SET_SIGNAL_GPR(tid, 1, sp);
+ SET_SIGNAL_GPR(tid, 3, sigNo);
+ tst->arch.vex.guest_CIA =3D (Addr) handler;
+
//.. Addr esp;
//.. ThreadState* tst =3D VG_(get_ThreadState)(tid);
//..=20
@@ -586,13 +774,14 @@
//.. tst->arch.vex.guest_CIA =3D (Addr) handler;
//.. /* This thread needs to be marked runnable, but we leave that th=
e
//.. caller to do. */
-//..=20
-//.. if (0)
-//.. VG_(printf)("pushed signal frame; %%ESP now =3D %p, "
-//.. "next %%EIP =3D %p, status=3D%d\n",=20
-//.. esp, tst->arch.vex.guest_CIA, tst->status);
+
+ if (0)
+ VG_(printf)("pushed signal frame; %R1 now =3D %p, "
+ "next %%CIA =3D %p, status=3D%d\n",=20
+ sp, tst->arch.vex.guest_CIA, tst->status);
}
=20
+
/*------------------------------------------------------------*/
/*--- Destroying signal frames ---*/
/*------------------------------------------------------------*/
@@ -669,9 +858,75 @@
//.. }
=20
=20
-//.. /* EXPORTED */
-//.. void VG_(sigframe_destroy)( ThreadId tid, Bool isRT )
-//.. {
+/* EXPORTED */
+void VG_(sigframe_destroy)( ThreadId tid, Bool isRT )
+{
+ ThreadState *tst;
+ struct vg_sig_private *priv;
+ Addr sp;
+ UInt frame_size;
+ struct vki_mcontext *mc;
+ Int sigNo;
+ Bool has_siginfo =3D isRT;
+
+ vg_assert(VG_(is_valid_tid)(tid));
+ tst =3D VG_(get_ThreadState)(tid);
+
+ /* Check that the stack frame looks valid */
+ sp =3D tst->arch.vex.guest_GPR1;
+ vg_assert(VG_IS_16_ALIGNED(sp));
+ frame_size =3D *(Addr *)sp - sp;
+
+ if (has_siginfo) {
+ struct rt_sigframe *frame =3D (struct rt_sigframe *)sp;
+ vg_assert(frame_size =3D=3D sizeof(*frame));
+ mc =3D &frame->ucontext.uc_mcontext;
+ priv =3D &frame->priv;
+ tst->sig_mask =3D frame->ucontext.uc_sigmask;
+ } else {
+ struct nonrt_sigframe *frame =3D (struct nonrt_sigframe *)sp;
+ vg_assert(frame_size =3D=3D sizeof(*frame));
+ mc =3D &frame->mcontext;
+ priv =3D &frame->priv;
+ tst->sig_mask.sig[0] =3D frame->sigcontext.oldmask;
+ tst->sig_mask.sig[1] =3D frame->sigcontext._unused[3];
+ }
+ tst->tmp_sig_mask =3D tst->sig_mask;
+
+ vg_assert(priv->magicPI =3D=3D 0x31415927);
+ sigNo =3D priv->sigNo_private;
+
+# define DO(gpr) tst->arch.vex.guest_GPR##gpr =3D mc->mc_gregs[VKI_PT_=
R0+gpr]
+ DO(0); DO(1); DO(2); DO(3); DO(4); DO(5); DO(6); DO(7);
+ DO(8); DO(9); DO(10); DO(11); DO(12); DO(13); DO(14); DO(15);
+ DO(16); DO(17); DO(18); DO(19); DO(20); DO(21); DO(22); DO(23);
+ DO(24); DO(25); DO(26); DO(27); DO(28); DO(29); DO(30); DO(31);
+# undef DO
+
+ tst->arch.vex.guest_CIA =3D mc->mc_gregs[VKI_PT_NIP];
+
+ // Umm ... ? (jrs 2005 July 8)
+ // tst->arch.m_orig_gpr3 =3D mc->mc_gregs[VKI_PT_ORIG_R3];
+
+ //tst->arch.m_cr =3D mc->mc_gregs[VKI_PT_CCR];
+ LibVEX_GuestPPC32_put_cr( mc->mc_gregs[VKI_PT_CCR], &tst->arch.vex );
+
+ tst->arch.vex.guest_LR =3D mc->mc_gregs[VKI_PT_LNK];
+ tst->arch.vex.guest_CTR =3D mc->mc_gregs[VKI_PT_CTR];
+ tst->arch.vex.guest_XER =3D mc->mc_gregs[VKI_PT_XER];
+
+ tst->arch.vex_shadow =3D priv->shadow;
+
+ VG_TRACK(die_mem_stack_signal, sp, frame_size);
+
+ if (VG_(clo_trace_signals))
+ VG_(message)(Vg_DebugMsg,
+ "vg_pop_signal_frame (thread %d): isRT=3D%d valid mag=
ic; EIP=3D%p",
+ tid, has_siginfo, tst->arch.vex.guest_CIA);
+
+ /* tell the tools */
+ VG_TRACK( post_deliver_signal, tid, sigNo );
+
//.. Addr esp;
//.. ThreadState* tst;
//.. SizeT size;
@@ -697,7 +952,7 @@
//..=20
//.. /* tell the tools */
//.. VG_TRACK( post_deliver_signal, tid, sigNo );
-//.. }
+}
=20
//:: /*------------------------------------------------------------*/
//:: /*--- Making coredumps ---*/
|
|
From: <sv...@va...> - 2005-07-08 18:27:23
|
Author: sewardj Date: 2005-07-08 19:27:22 +0100 (Fri, 08 Jul 2005) New Revision: 4137 Log: Oops, this really should have been part of r4136. Modified: trunk/coregrind/vki_unistd-ppc32-linux.h Modified: trunk/coregrind/vki_unistd-ppc32-linux.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/vki_unistd-ppc32-linux.h 2005-07-08 18:26:37 UTC (rev= 4136) +++ trunk/coregrind/vki_unistd-ppc32-linux.h 2005-07-08 18:27:22 UTC (rev= 4137) @@ -38,10 +38,10 @@ #define __NR_close 6 #define __NR_waitpid 7 #define __NR_creat 8 -//#define __NR_link 9 +#define __NR_link 9 #define __NR_unlink 10 #define __NR_execve 11 -//#define __NR_chdir 12 +#define __NR_chdir 12 #define __NR_time 13 //#define __NR_mknod 14 #define __NR_chmod 15 @@ -68,7 +68,7 @@ //#define __NR_sync 36 #define __NR_kill 37 #define __NR_rename 38 -//#define __NR_mkdir 39 +#define __NR_mkdir 39 //#define __NR_rmdir 40 #define __NR_dup 41 #define __NR_pipe 42 @@ -89,13 +89,13 @@ #define __NR_setpgid 57 //#define __NR_ulimit 58 //#define __NR_oldolduname 59 -//#define __NR_umask 60 +#define __NR_umask 60 //#define __NR_chroot 61 //#define __NR_ustat 62 #define __NR_dup2 63 #define __NR_getppid 64 #define __NR_getpgrp 65 -//#define __NR_setsid 66 +#define __NR_setsid 66 //#define __NR_sigaction 67 //#define __NR_sgetmask 68 //#define __NR_ssetmask 69 @@ -109,10 +109,10 @@ //#define __NR_getrusage 77 #define __NR_gettimeofday 78 //#define __NR_settimeofday 79 -//#define __NR_getgroups 80 +#define __NR_getgroups 80 //#define __NR_setgroups 81 //#define __NR_select 82 -//#define __NR_symlink 83 +#define __NR_symlink 83 //#define __NR_oldlstat 84 #define __NR_readlink 85 //#define __NR_uselib 86 @@ -148,7 +148,7 @@ //#define __NR_sysinfo 116 #define __NR_ipc 117 //#define __NR_fsync 118 -//#define __NR_sigreturn 119 +#define __NR_sigreturn 119 #define __NR_clone 120 //#define __NR_setdomainname 121 #define __NR_uname 122 @@ -200,7 +200,7 @@ //#define __NR_nfsservctl 168 //#define __NR_setresgid 169 //#define __NR_getresgid 170 -//#define __NR_prctl 171 +#define __NR_prctl 171 #define __NR_rt_sigreturn 172 #define __NR_rt_sigaction 173 #define __NR_rt_sigprocmask 174 |
|
From: <sv...@va...> - 2005-07-08 18:26:40
|
Author: sewardj
Date: 2005-07-08 19:26:37 +0100 (Fri, 08 Jul 2005)
New Revision: 4136
Log:
Fix/reinstate a whole bunch of syscalls.
Modified:
trunk/coregrind/m_syswrap/syswrap-ppc32-linux.c
Modified: trunk/coregrind/m_syswrap/syswrap-ppc32-linux.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_syswrap/syswrap-ppc32-linux.c 2005-07-08 18:25:13 U=
TC (rev 4135)
+++ trunk/coregrind/m_syswrap/syswrap-ppc32-linux.c 2005-07-08 18:26:37 U=
TC (rev 4136)
@@ -926,6 +926,7 @@
DECL_TEMPLATE(ppc32_linux, sys_fstat64);
DECL_TEMPLATE(ppc32_linux, sys_ipc);
DECL_TEMPLATE(ppc32_linux, sys_clone);
+DECL_TEMPLATE(ppc32_linux, sys_sigreturn);
=20
PRE(sys_socketcall)
{
@@ -1513,6 +1514,43 @@
}
}
=20
+PRE(sys_sigreturn)
+{
+ ThreadState* tst;
+ PRINT("sigreturn ( )");
+
+ vg_assert(VG_(is_valid_tid)(tid));
+ vg_assert(tid >=3D 1 && tid < VG_N_THREADS);
+ vg_assert(VG_(is_running_thread)(tid));
+
+ ///* Adjust esp to point to start of frame; skip back up over
+ // sigreturn sequence's "popl %eax" and handler ret addr */
+ tst =3D VG_(get_ThreadState)(tid);
+ //tst->arch.vex.guest_ESP -=3D sizeof(Addr)+sizeof(Word);
+
+ ///* This is only so that the EIP is (might be) useful to report if
+ // something goes wrong in the sigreturn */
+ //ML_(fixup_guest_state_to_restart_syscall)(&tst->arch);
+
+ VG_(sigframe_destroy)(tid, False);
+
+ /* For unclear reasons, it appears we need the syscall to return
+ without changing %EAX. Since %EAX is the return value, and can
+ denote either success or failure, we must set up so that the
+ driver logic copies it back unchanged. Also, note %EAX is of
+ the guest registers written by VG_(sigframe_destroy). */
+ //SET_STATUS_from_SysRes( VG_(mk_SysRes_x86_linux)( tst->arch.vex.gue=
st_EAX ) );
+ SET_STATUS_from_SysRes(
+ VG_(mk_SysRes_ppc32_linux)(=20
+ tst->arch.vex.guest_GPR3,
+ (LibVEX_GuestPPC32_get_cr7( &tst->arch.vex ) >> 28) & 1
+ )
+ );
+
+ /* Check to see if some any signals arose as a result of this. */
+ *flags |=3D SfPollAfter;
+}
+
//.. PRE(sys_sigreturn, Special)
//.. {
//.. PRINT("sigreturn ( )");
@@ -1924,11 +1962,11 @@
GENXY(__NR_close, sys_close), // 6
GENXY(__NR_waitpid, sys_waitpid), // 7
GENXY(__NR_creat, sys_creat), // 8
-//.. GENX_(__NR_link, sys_link), // 9
-//..=20
+ GENX_(__NR_link, sys_link), // 9
+
GENX_(__NR_unlink, sys_unlink), // 10
GENX_(__NR_execve, sys_execve), // 11
-//.. GENX_(__NR_chdir, sys_chdir), // 12
+ GENX_(__NR_chdir, sys_chdir), // 12
GENXY(__NR_time, sys_time), // 13
//.. GENX_(__NR_mknod, sys_mknod), // 14
//..=20
@@ -1958,10 +1996,10 @@
//..=20
//.. GENX_(__NR_ftime, sys_ni_syscall), // 35
//.. GENX_(__NR_sync, sys_sync), // 36
-//.. GENX_(__NR_kill, sys_kill), // 37
-//.. GENX_(__NR_rename, sys_rename), // 38
-//.. GENX_(__NR_mkdir, sys_mkdir), // 39
-//..=20
+ GENX_(__NR_kill, sys_kill), // 37
+ GENX_(__NR_rename, sys_rename), // 38
+ GENX_(__NR_mkdir, sys_mkdir), // 39
+
//.. GENX_(__NR_rmdir, sys_rmdir), // 40
GENXY(__NR_dup, sys_dup), // 41
GENXY(__NR_pipe, sys_pipe), // 42
@@ -1985,15 +2023,15 @@
GENX_(__NR_setpgid, sys_setpgid), // 57
//.. GENX_(__NR_ulimit, sys_ni_syscall), // 58
//.. // (__NR_oldolduname, sys_olduname), // 59 Linu=
x -- obsolete
-//..=20
-//.. GENX_(__NR_umask, sys_umask), // 60
+
+ GENX_(__NR_umask, sys_umask), // 60
//.. GENX_(__NR_chroot, sys_chroot), // 61
//.. // (__NR_ustat, sys_ustat) // 62 SVr4=
-- deprecated
GENXY(__NR_dup2, sys_dup2), // 63
-//.. GENXY(__NR_getppid, sys_getppid), // 64
-//..=20
-//.. GENX_(__NR_getpgrp, sys_getpgrp), // 65
-//.. GENX_(__NR_setsid, sys_setsid), // 66
+ GENX_(__NR_getppid, sys_getppid), // 64
+
+ GENX_(__NR_getpgrp, sys_getpgrp), // 65
+ GENX_(__NR_setsid, sys_setsid), // 66
//.. PLAXY(__NR_sigaction, sys_sigaction), // 67
//.. // (__NR_sgetmask, sys_sgetmask), // 68 */* =
(ANSI C)
//.. // (__NR_ssetmask, sys_ssetmask), // 69 */* =
(ANSI C)
@@ -2010,10 +2048,10 @@
GENXY(__NR_gettimeofday, sys_gettimeofday), // 78
//.. GENX_(__NR_settimeofday, sys_settimeofday), // 79
//..=20
-//.. GENXY(__NR_getgroups, sys_getgroups16), // 80
+ GENXY(__NR_getgroups, sys_getgroups16), // 80
//.. GENX_(__NR_setgroups, sys_setgroups16), // 81
//.. PLAX_(__NR_select, old_select), // 82
-//.. GENX_(__NR_symlink, sys_symlink), // 83
+ GENX_(__NR_symlink, sys_symlink), // 83
//.. // (__NR_oldlstat, sys_lstat), // 84 -- o=
bsolete
//..=20
GENX_(__NR_readlink, sys_readlink), // 85
@@ -2056,7 +2094,7 @@
//.. LINXY(__NR_sysinfo, sys_sysinfo), // 116
PLAXY(__NR_ipc, sys_ipc), // 117
//.. GENX_(__NR_fsync, sys_fsync), // 118
-//.. PLAX_(__NR_sigreturn, sys_sigreturn), // 119 ?/L=
inux
+ PLAX_(__NR_sigreturn, sys_sigreturn), // 119 ?/Linux
//..=20
PLAX_(__NR_clone, sys_clone), // 120
//.. // (__NR_setdomainname, sys_setdomainname), // 121 */*=
(?)
@@ -2122,7 +2160,7 @@
//..=20
//.. LINX_(__NR_setresgid, sys_setresgid16), // 169
//.. LINXY(__NR_getresgid, sys_getresgid16), // 170
-//.. LINX_(__NR_prctl, sys_prctl), // 171
+ LINX_(__NR_prctl, sys_prctl), // 171
//.. PLAX_(__NR_rt_sigreturn, sys_rt_sigreturn), // 172
GENXY(__NR_rt_sigaction, sys_rt_sigaction), // 173
=20
@@ -2135,7 +2173,7 @@
GENXY(__NR_pread64, sys_pread64), // 179
GENX_(__NR_pwrite64, sys_pwrite64), // 180
GENX_(__NR_chown, sys_chown16), // 181
-//.. GENXY(__NR_getcwd, sys_getcwd), // 182
+ GENXY(__NR_getcwd, sys_getcwd), // 182
//.. GENXY(__NR_capget, sys_capget), // 183
//..=20
//.. GENX_(__NR_capset, sys_capset), // 184
|
|
From: <sv...@va...> - 2005-07-08 18:25:15
|
Author: sewardj
Date: 2005-07-08 19:25:13 +0100 (Fri, 08 Jul 2005)
New Revision: 4135
Log:
Assertion-failure-avoiding hacks from Paul's tree. I don't know why
these are necessary, but they are.
Modified:
trunk/coregrind/m_signals.c
Modified: trunk/coregrind/m_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/m_signals.c 2005-07-08 18:24:04 UTC (rev 4134)
+++ trunk/coregrind/m_signals.c 2005-07-08 18:25:13 UTC (rev 4135)
@@ -446,7 +446,9 @@
=20
ksa.ksa_handler =3D skss.skss_per_sig[sig].skss_handler;
ksa.sa_flags =3D skss.skss_per_sig[sig].skss_flags;
+# if !defined(VGP_ppc32_linux)
ksa.sa_restorer =3D my_sigreturn;
+# endif
=20
/* block all signals in handler */
VG_(sigfillset)( &ksa.sa_mask );
@@ -473,8 +475,10 @@
=3D=3D skss_old.skss_per_sig[sig].skss_handler);
vg_assert(ksa_old.sa_flags=20
=3D=3D skss_old.skss_per_sig[sig].skss_flags);
+# if !defined(VGP_ppc32_linux)
vg_assert(ksa_old.sa_restorer=20
=3D=3D my_sigreturn);
+# endif
VG_(sigaddset)( &ksa_old.sa_mask, VKI_SIGKILL );
VG_(sigaddset)( &ksa_old.sa_mask, VKI_SIGSTOP );
vg_assert(VG_(isfullsigset)( &ksa_old.sa_mask ));
|
|
From: <sv...@va...> - 2005-07-08 18:24:05
|
Author: sewardj
Date: 2005-07-08 19:24:04 +0100 (Fri, 08 Jul 2005)
New Revision: 4134
Log:
A longer gdb-attach delay for ppc
Modified:
trunk/coregrind/m_main.c
Modified: trunk/coregrind/m_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/coregrind/m_main.c 2005-07-08 18:23:40 UTC (rev 4133)
+++ trunk/coregrind/m_main.c 2005-07-08 18:24:04 UTC (rev 4134)
@@ -2622,7 +2622,7 @@
# elif defined(VGP_amd64_linux)
iters =3D 10;
# elif defined(VGP_ppc32_linux)
- iters =3D 1;
+ iters =3D 5;
# else
# error "Unknown plat"
# endif
|
|
From: <sv...@va...> - 2005-07-08 18:23:50
|
Author: sewardj
Date: 2005-07-08 19:23:40 +0100 (Fri, 08 Jul 2005)
New Revision: 4133
Log:
Check the obvious ..
Modified:
trunk/coregrind/m_threadstate.c
Modified: trunk/coregrind/m_threadstate.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_threadstate.c 2005-07-08 09:46:53 UTC (rev 4132)
+++ trunk/coregrind/m_threadstate.c 2005-07-08 18:23:40 UTC (rev 4133)
@@ -60,6 +60,7 @@
ThreadState *VG_(get_ThreadState)(ThreadId tid)
{
vg_assert(tid >=3D 0 && tid < VG_N_THREADS);
+ vg_assert(VG_(threads)[tid].tid =3D=3D tid);
return &VG_(threads)[tid];
}
=20
|
|
From: <sv...@va...> - 2005-07-08 13:35:49
|
Author: cerion
Date: 2005-07-08 14:34:47 +0100 (Fri, 08 Jul 2005)
New Revision: 1269
Log:
Added LibVEX_GuestPPC32_put_cr7(), LibVEX_GuestPPC32_put_cr()
Modified:
trunk/priv/guest-ppc32/ghelpers.c
trunk/pub/libvex_guest_ppc32.h
Modified: trunk/priv/guest-ppc32/ghelpers.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-ppc32/ghelpers.c 2005-07-08 13:10:35 UTC (rev 1268)
+++ trunk/priv/guest-ppc32/ghelpers.c 2005-07-08 13:34:47 UTC (rev 1269)
@@ -191,15 +191,23 @@
/*----------------------------------------------*/
=20
/* VISIBLE TO LIBVEX CLIENT */
-#if 0
-void LibVEX_GuestPPC32_put_cr7 ( UInt flags_native,
+void LibVEX_GuestPPC32_put_cr7 ( UInt cr7_native,
/*OUT*/VexGuestPPC32State* vex_state )
{
- vassert(0); // FIXME
+ vex_state->guest_CC_OP =3D 1; /* =3D> use immediate value DEP1 */
+ vex_state->guest_CC_DEP1 =3D (cr7_native & 0xF0000000);
+ vex_state->guest_CC_DEP2 =3D 0; /* =3Dunused */
}
-#endif
=20
/* VISIBLE TO LIBVEX CLIENT */
+void LibVEX_GuestPPC32_put_cr ( UInt cr_native,
+ /*OUT*/VexGuestPPC32State* vex_state )
+{
+ LibVEX_GuestPPC32_put_cr7( cr_native, vex_state );
+ vex_state->guest_CR0to6 =3D (cr_native & 0x0FFFFFFF);
+}
+
+/* VISIBLE TO LIBVEX CLIENT */
UInt LibVEX_GuestPPC32_get_cr7 ( /*IN*/VexGuestPPC32State* vex_state )
{
UInt flags =3D ppc32g_calculate_cr7(
Modified: trunk/pub/libvex_guest_ppc32.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/pub/libvex_guest_ppc32.h 2005-07-08 13:10:35 UTC (rev 1268)
+++ trunk/pub/libvex_guest_ppc32.h 2005-07-08 13:34:47 UTC (rev 1269)
@@ -195,6 +195,17 @@
extern
void LibVEX_GuestPPC32_initialise ( /*OUT*/VexGuestPPC32State* vex_state=
);
=20
+/* Write the given native %cr7 value to the supplied
+ VexGuestPPC32State structure */
+extern
+void LibVEX_GuestPPC32_put_cr7 ( UInt cr7_native,
+ /*OUT*/VexGuestPPC32State* vex_state );
+
+/* Ditto, but for entire %cr */
+extern
+void LibVEX_GuestPPC32_put_cr ( UInt cr_native,
+ /*OUT*/VexGuestPPC32State* vex_state );
+
/* Extract from the supplied VexGuestPPC32State structure the
corresponding native %cr7 value. */
extern
|
|
From: <sv...@va...> - 2005-07-08 13:10:48
|
Author: cerion
Date: 2005-07-08 14:10:35 +0100 (Fri, 08 Jul 2005)
New Revision: 1268
Log:
Added LibVEX_GuestPPC32_get_cr() for easy access to entire cond reg
Filled in some missing defaults in LibVEX_GuestPPC32_initialise()
Modified:
trunk/priv/guest-ppc32/ghelpers.c
trunk/pub/libvex_guest_ppc32.h
Modified: trunk/priv/guest-ppc32/ghelpers.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-ppc32/ghelpers.c 2005-07-07 14:15:35 UTC (rev 1267)
+++ trunk/priv/guest-ppc32/ghelpers.c 2005-07-08 13:10:35 UTC (rev 1268)
@@ -211,6 +211,14 @@
}
=20
/* VISIBLE TO LIBVEX CLIENT */
+UInt LibVEX_GuestPPC32_get_cr ( /*IN*/VexGuestPPC32State* vex_state )
+{
+ UInt cr7 =3D LibVEX_GuestPPC32_get_cr7( vex_state );
+ UInt cr0to6 =3D vex_state->guest_CR0to6;
+ return (cr7 & 0xF0000000) | (cr0to6 & 0x0FFFFFFF);
+}
+
+/* VISIBLE TO LIBVEX CLIENT */
void LibVEX_GuestPPC32_initialise ( /*OUT*/VexGuestPPC32State* vex_state=
)
{
vex_state->guest_GPR0 =3D 0;
@@ -246,6 +254,75 @@
vex_state->guest_GPR30 =3D 0;
vex_state->guest_GPR31 =3D 0;
=20
+ vex_state->guest_FPR0 =3D 0;
+ vex_state->guest_FPR1 =3D 0;
+ vex_state->guest_FPR2 =3D 0;
+ vex_state->guest_FPR3 =3D 0;
+ vex_state->guest_FPR4 =3D 0;
+ vex_state->guest_FPR5 =3D 0;
+ vex_state->guest_FPR6 =3D 0;
+ vex_state->guest_FPR7 =3D 0;
+ vex_state->guest_FPR8 =3D 0;
+ vex_state->guest_FPR9 =3D 0;
+ vex_state->guest_FPR10 =3D 0;
+ vex_state->guest_FPR11 =3D 0;
+ vex_state->guest_FPR12 =3D 0;
+ vex_state->guest_FPR13 =3D 0;
+ vex_state->guest_FPR14 =3D 0;
+ vex_state->guest_FPR15 =3D 0;
+ vex_state->guest_FPR16 =3D 0;
+ vex_state->guest_FPR17 =3D 0;
+ vex_state->guest_FPR18 =3D 0;
+ vex_state->guest_FPR19 =3D 0;
+ vex_state->guest_FPR20 =3D 0;
+ vex_state->guest_FPR21 =3D 0;
+ vex_state->guest_FPR22 =3D 0;
+ vex_state->guest_FPR23 =3D 0;
+ vex_state->guest_FPR24 =3D 0;
+ vex_state->guest_FPR25 =3D 0;
+ vex_state->guest_FPR26 =3D 0;
+ vex_state->guest_FPR27 =3D 0;
+ vex_state->guest_FPR28 =3D 0;
+ vex_state->guest_FPR29 =3D 0;
+ vex_state->guest_FPR30 =3D 0;
+ vex_state->guest_FPR31 =3D 0;
+
+ /* Initialise the vector state. */
+# define SSEZERO(_vr) _vr[0]=3D_vr[1]=3D_vr[2]=3D_vr[3] =3D 0;
+
+ SSEZERO(vex_state->guest_VR0 );
+ SSEZERO(vex_state->guest_VR1 );
+ SSEZERO(vex_state->guest_VR2 );
+ SSEZERO(vex_state->guest_VR3 );
+ SSEZERO(vex_state->guest_VR4 );
+ SSEZERO(vex_state->guest_VR5 );
+ SSEZERO(vex_state->guest_VR6 );
+ SSEZERO(vex_state->guest_VR7 );
+ SSEZERO(vex_state->guest_VR8 );
+ SSEZERO(vex_state->guest_VR9 );
+ SSEZERO(vex_state->guest_VR10);
+ SSEZERO(vex_state->guest_VR11);
+ SSEZERO(vex_state->guest_VR12);
+ SSEZERO(vex_state->guest_VR13);
+ SSEZERO(vex_state->guest_VR14);
+ SSEZERO(vex_state->guest_VR15);
+ SSEZERO(vex_state->guest_VR16);
+ SSEZERO(vex_state->guest_VR17);
+ SSEZERO(vex_state->guest_VR18);
+ SSEZERO(vex_state->guest_VR19);
+ SSEZERO(vex_state->guest_VR20);
+ SSEZERO(vex_state->guest_VR21);
+ SSEZERO(vex_state->guest_VR22);
+ SSEZERO(vex_state->guest_VR23);
+ SSEZERO(vex_state->guest_VR24);
+ SSEZERO(vex_state->guest_VR25);
+ SSEZERO(vex_state->guest_VR26);
+ SSEZERO(vex_state->guest_VR27);
+ SSEZERO(vex_state->guest_VR28);
+ SSEZERO(vex_state->guest_VR29);
+ SSEZERO(vex_state->guest_VR30);
+ SSEZERO(vex_state->guest_VR31);
+
vex_state->guest_CIA =3D 0;
vex_state->guest_LR =3D 0;
vex_state->guest_CTR =3D 0;
@@ -260,6 +337,10 @@
=20
vex_state->guest_XER =3D 0;
=20
+ vex_state->guest_VRSAVE =3D 0;
+
+ vex_state->guest_VSCR =3D 0;
+
vex_state->guest_EMWARN =3D EmWarn_NONE;
=20
vex_state->guest_TISTART =3D 0;
Modified: trunk/pub/libvex_guest_ppc32.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/pub/libvex_guest_ppc32.h 2005-07-07 14:15:35 UTC (rev 1267)
+++ trunk/pub/libvex_guest_ppc32.h 2005-07-08 13:10:35 UTC (rev 1268)
@@ -197,10 +197,12 @@
=20
/* Extract from the supplied VexGuestPPC32State structure the
corresponding native %cr7 value. */
-
extern
UInt LibVEX_GuestPPC32_get_cr7 ( /*IN*/VexGuestPPC32State* vex_state );
=20
+/* Ditto, but for entire %cr */
+extern
+UInt LibVEX_GuestPPC32_get_cr ( /*IN*/VexGuestPPC32State* vex_state );
=20
#endif /* ndef __LIBVEX_PUB_GUEST_PPC32_H */
=20
|
|
From: <sv...@va...> - 2005-07-08 09:47:02
|
Author: sewardj
Date: 2005-07-08 10:46:53 +0100 (Fri, 08 Jul 2005)
New Revision: 4132
Log:
Comment wibble.
Modified:
trunk/memcheck/mc_include.h
Modified: trunk/memcheck/mc_include.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/mc_include.h 2005-07-08 09:45:43 UTC (rev 4131)
+++ trunk/memcheck/mc_include.h 2005-07-08 09:46:53 UTC (rev 4132)
@@ -82,8 +82,9 @@
extern IRBB* MC_(instrument) ( IRBB* bb_in, VexGuestLayout* layout,
IRType gWordTy, IRType hWordTy );
=20
-#endif
=20
+#endif /* ndef __MC_INCLUDE_H */
+
/*--------------------------------------------------------------------*/
/*--- end ---*/
/*--------------------------------------------------------------------*/
|
|
From: <sv...@va...> - 2005-07-08 09:46:46
|
Author: sewardj
Date: 2005-07-08 10:45:43 +0100 (Fri, 08 Jul 2005)
New Revision: 4131
Log:
Don't bomb cachegrind at startup.
Modified:
trunk/cachegrind/cg-ppc32.c
Modified: trunk/cachegrind/cg-ppc32.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-ppc32.c 2005-07-08 04:08:59 UTC (rev 4130)
+++ trunk/cachegrind/cg-ppc32.c 2005-07-08 09:45:43 UTC (rev 4131)
@@ -307,24 +307,22 @@
void VG_(configure_caches)(cache_t* I1c, cache_t* D1c, cache_t* L2c,
Bool all_caches_clo_defined)
{
- tl_assert(0);
+ Int res;
+ =20
+ // Set caches to default.
+ *I1c =3D (cache_t) { 65536, 2, 64 };
+ *D1c =3D (cache_t) { 65536, 2, 64 };
+ *L2c =3D (cache_t) { 262144, 8, 64 };
=20
-//.. Int res;
-//.. =20
-//.. // Set caches to default.
-//.. *I1c =3D (cache_t) { 65536, 2, 64 };
-//.. *D1c =3D (cache_t) { 65536, 2, 64 };
-//.. *L2c =3D (cache_t) { 262144, 8, 64 };
-//..=20
-//.. // Then replace with any info we can get from CPUID.
-//.. res =3D get_caches_from_CPUID(I1c, D1c, L2c);
-//..=20
-//.. // Warn if CPUID failed and config not completely specified from=
cmd line.
-//.. if (res !=3D 0 && !all_caches_clo_defined) {
-//.. VG_(message)(Vg_DebugMsg,=20
-//.. "Warning: Couldn't auto-detect cache config, usi=
ng one "
-//.. "or more defaults ");
-//.. }
+ // Then replace with any info we can get from CPUID.
+ res =3D 1; /*get_caches_from_CPUID(I1c, D1c, L2c);*/
+
+ // Warn if CPUID failed and config not completely specified from cmd =
line.
+ if (res !=3D 0 && !all_caches_clo_defined) {
+ VG_(message)(Vg_DebugMsg,=20
+ "Warning: Couldn't auto-detect cache config, using on=
e "
+ "or more defaults ");
+ }
}
=20
/*--------------------------------------------------------------------*/
|
|
From: <js...@ac...> - 2005-07-08 07:20:30
|
Nightly build on g5 ( YDL 4.0, ppc970 ) started at 2005-07-08 04:40:01 CEST 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 == 153 tests, 101 stderr failures, 32 stdout failures ================= memcheck/tests/addressable (stderr) memcheck/tests/badaddrvalue (stdout) 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 (stdout) memcheck/tests/clientperm (stderr) memcheck/tests/custom_alloc (stderr) memcheck/tests/describe-block (stderr) memcheck/tests/doublefree (stderr) memcheck/tests/erringfds (stderr) memcheck/tests/error_counts (stdout) memcheck/tests/errs1 (stderr) memcheck/tests/execve (stderr) memcheck/tests/execve2 (stderr) memcheck/tests/exitprog (stderr) memcheck/tests/fprw (stderr) memcheck/tests/fwrite (stdout) memcheck/tests/fwrite (stderr) memcheck/tests/inits (stderr) memcheck/tests/inline (stdout) 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/leakotron (stdout) memcheck/tests/malloc1 (stderr) memcheck/tests/malloc2 (stderr) memcheck/tests/malloc3 (stdout) memcheck/tests/malloc3 (stderr) memcheck/tests/manuel1 (stderr) memcheck/tests/manuel2 (stdout) 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 (stdout) 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 (stdout) memcheck/tests/new_override (stderr) memcheck/tests/null_socket (stderr) memcheck/tests/overlap (stdout) memcheck/tests/overlap (stderr) memcheck/tests/partiallydefinedeq (stdout) memcheck/tests/partiallydefinedeq (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/post-syscall (stdout) memcheck/tests/post-syscall (stderr) memcheck/tests/realloc1 (stderr) memcheck/tests/realloc2 (stderr) memcheck/tests/realloc3 (stderr) memcheck/tests/sigaltstack (stderr) memcheck/tests/sigkill (stderr) memcheck/tests/signal2 (stdout) memcheck/tests/signal2 (stderr) memcheck/tests/sigprocmask (stderr) memcheck/tests/stack_changes (stdout) memcheck/tests/stack_changes (stderr) memcheck/tests/str_tester (stderr) memcheck/tests/strchr (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/xml1 (stdout) memcheck/tests/xml1 (stderr) memcheck/tests/zeropage (stderr) cachegrind/tests/chdir (stderr) cachegrind/tests/dlclose (stdout) cachegrind/tests/dlclose (stderr) massif/tests/toobig-allocs (stderr) massif/tests/true_html (stderr) massif/tests/true_text (stderr) none/tests/async-sigs (stdout) none/tests/async-sigs (stderr) none/tests/blockfault (stderr) none/tests/coolo_sigaction (stdout) none/tests/coolo_sigaction (stderr) none/tests/faultstatus (stderr) none/tests/fdleak_cmsg (stderr) none/tests/fdleak_creat (stderr) none/tests/fdleak_dup (stderr) none/tests/fdleak_dup2 (stderr) none/tests/fdleak_fcntl (stderr) none/tests/fdleak_ipv4 (stderr) none/tests/fdleak_open (stderr) none/tests/fdleak_pipe (stderr) none/tests/fdleak_socketpair (stderr) none/tests/nestedfns (stdout) none/tests/nestedfns (stderr) none/tests/pending (stdout) none/tests/pending (stderr) none/tests/pth_atfork1 (stdout) none/tests/pth_atfork1 (stderr) none/tests/pth_blockedsig (stdout) none/tests/pth_blockedsig (stderr) none/tests/pth_cancel1 (stdout) none/tests/pth_cancel1 (stderr) none/tests/pth_cvsimple (stdout) none/tests/pth_once (stdout) none/tests/pth_once (stderr) none/tests/pth_stackalign (stdout) none/tests/pth_stackalign (stderr) none/tests/res_search (stdout) none/tests/sigstackgrowth (stdout) none/tests/sigstackgrowth (stderr) none/tests/syscall-restart1 (stderr) none/tests/syscall-restart2 (stderr) none/tests/system (stderr) none/tests/thread-exits (stdout) none/tests/threadederrno (stdout) none/tests/tls (stdout) none/tests/tls (stderr) |
|
From: <sv...@va...> - 2005-07-08 04:09:39
|
Author: njn
Date: 2005-07-08 05:08:59 +0100 (Fri, 08 Jul 2005)
New Revision: 4130
Log:
Add a simple random number generator to m_libcbase so we don't have
to use the one from glibc.
Modified:
trunk/coregrind/m_libcbase.c
trunk/coregrind/m_skiplist.c
trunk/include/pub_tool_libcbase.h
Modified: trunk/coregrind/m_libcbase.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_libcbase.c 2005-07-08 01:29:33 UTC (rev 4129)
+++ trunk/coregrind/m_libcbase.c 2005-07-08 04:08:59 UTC (rev 4130)
@@ -471,6 +471,21 @@
#undef SORT
}
=20
+static UInt seed =3D 0;
+
+void VG_(srandom)(UInt s)
+{
+ seed =3D s;
+}
+
+// This random number generator is based on the one suggested in Kernigh=
an
+// and Ritchie's "The C Programming Language".
+UInt VG_(random)(void)
+{
+ seed =3D (1103515245*seed + 12345);
+ return seed;
+}
+
/*--------------------------------------------------------------------*/
/*--- end ---*/
/*--------------------------------------------------------------------*/
Modified: trunk/coregrind/m_skiplist.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_skiplist.c 2005-07-08 01:29:33 UTC (rev 4129)
+++ trunk/coregrind/m_skiplist.c 2005-07-08 04:08:59 UTC (rev 4130)
@@ -93,8 +93,6 @@
#include "pub_core_mallocfree.h"
#include "pub_core_skiplist.h"
=20
-#include <stdlib.h>
-
#define SKIPLIST_DEBUG 0
=20
#define SK_MAXHEIGHT 20 /* 2^20 elements */
@@ -121,7 +119,7 @@
{
UInt ret =3D 0;
=20
- while((ret < SK_MAXHEIGHT - 1) && (random() & 1))
+ while((ret < SK_MAXHEIGHT - 1) && (VG_(random)() & 1))
ret++;
=20
return ret;
Modified: trunk/include/pub_tool_libcbase.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_libcbase.h 2005-07-08 01:29:33 UTC (rev 4129)
+++ trunk/include/pub_tool_libcbase.h 2005-07-08 04:08:59 UTC (rev 4130)
@@ -114,6 +114,11 @@
/* Returns the base-2 logarithm of x. */
extern Int VG_(log2) ( Int x );
=20
+// A pseudo-random number generator returning a random UInt, and its
+// seed function.
+extern void VG_(srandom) ( UInt seed );
+extern UInt VG_(random) ( void );
+
#endif // __PUB_TOOL_LIBCBASE_H
=20
/*--------------------------------------------------------------------*/
|
|
From: Tom H. <th...@cy...> - 2005-07-08 03:03:37
|
Nightly build on audi ( i686, Red Hat 9 ) started at 2005-07-08 03:25: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 == 180 tests, 7 stderr failures, 1 stdout failure ================= memcheck/tests/sigaltstack (stderr) memcheck/tests/xml1 (stderr) none/tests/faultstatus (stderr) none/tests/pth_blockedsig (stderr) none/tests/pth_cancel1 (stdout) none/tests/pth_cancel1 (stderr) none/tests/pth_cancel2 (stderr) none/tests/x86/int (stderr) |
|
From: <js...@ac...> - 2005-07-08 02:41:54
|
Nightly build on phoenix ( SuSE 9.1 ) started at 2005-07-08 03:30: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 == 178 tests, 2 stderr failures, 0 stdout failures ================= none/tests/faultstatus (stderr) none/tests/x86/int (stderr) |
|
From: Tom H. <to...@co...> - 2005-07-08 02:35:50
|
Nightly build on dunsmere ( athlon, Fedora Core 4 ) started at 2005-07-08 03:30:03 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 == 180 tests, 5 stderr failures, 0 stdout failures ================= memcheck/tests/leak-tree (stderr) memcheck/tests/weirdioctl (stderr) memcheck/tests/xml1 (stderr) none/tests/faultstatus (stderr) none/tests/x86/int (stderr) |
|
From: Tom H. <th...@cy...> - 2005-07-08 02:20:49
|
Nightly build on alvis ( i686, Red Hat 7.3 ) started at 2005-07-08 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 == 179 tests, 14 stderr failures, 0 stdout failures ================= memcheck/tests/addressable (stderr) memcheck/tests/describe-block (stderr) memcheck/tests/erringfds (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/partiallydefinedeq (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/sigkill (stderr) memcheck/tests/stack_changes (stderr) none/tests/faultstatus (stderr) none/tests/x86/int (stderr) |
|
From: Tom H. <th...@cy...> - 2005-07-08 02:15:15
|
Nightly build on dellow ( x86_64, Fedora Core 4 ) started at 2005-07-08 03:10:09 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 == 158 tests, 7 stderr failures, 0 stdout failures ================= memcheck/tests/sigaltstack (stderr) memcheck/tests/sigprocmask (stderr) memcheck/tests/strchr (stderr) memcheck/tests/vgtest_ume (stderr) memcheck/tests/weirdioctl (stderr) memcheck/tests/xml1 (stderr) none/tests/faultstatus (stderr) |
|
From: Tom H. <th...@cy...> - 2005-07-08 02:11:32
|
Nightly build on aston ( x86_64, Fedora Core 3 ) started at 2005-07-08 03:05:08 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 == 158 tests, 7 stderr failures, 0 stdout failures ================= memcheck/tests/sigaltstack (stderr) memcheck/tests/sigprocmask (stderr) memcheck/tests/strchr (stderr) memcheck/tests/vgtest_ume (stderr) memcheck/tests/weirdioctl (stderr) memcheck/tests/xml1 (stderr) none/tests/faultstatus (stderr) |
|
From: Tom H. <th...@cy...> - 2005-07-08 02:04:07
|
Nightly build on gill ( x86_64, Fedora Core 2 ) started at 2005-07-08 03:00:03 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 == 158 tests, 8 stderr failures, 0 stdout failures ================= memcheck/tests/sigaltstack (stderr) memcheck/tests/sigprocmask (stderr) memcheck/tests/strchr (stderr) memcheck/tests/vgtest_ume (stderr) memcheck/tests/weirdioctl (stderr) memcheck/tests/xml1 (stderr) none/tests/faultstatus (stderr) none/tests/fdleak_fcntl (stderr) |
|
From: <sv...@va...> - 2005-07-08 01:29:41
|
Author: sewardj
Date: 2005-07-08 02:29:33 +0100 (Fri, 08 Jul 2005)
New Revision: 4129
Log:
Create and use bigendian versions of MC_(helperc_{LOAD,STORE}V{2,4,8}).
This involved some serious nastyness from the Department of Cpp Abuse.
Memcheck still bombs on ppc32 for unknown reasons.
There are still endianness issues within these functions, I think.
Modified:
trunk/memcheck/mc_include.h
trunk/memcheck/mc_main.c
trunk/memcheck/mc_translate.c
Modified: trunk/memcheck/mc_include.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/mc_include.h 2005-07-08 00:18:25 UTC (rev 4128)
+++ trunk/memcheck/mc_include.h 2005-07-08 01:29:33 UTC (rev 4129)
@@ -60,15 +60,21 @@
extern void MC_(helperc_value_check1_fail) ( void );
extern void MC_(helperc_value_check0_fail) ( void );
=20
+extern VG_REGPARM(1) void MC_(helperc_STOREV8be) ( Addr, ULong );
extern VG_REGPARM(1) void MC_(helperc_STOREV8le) ( Addr, ULong );
+extern VG_REGPARM(2) void MC_(helperc_STOREV4be) ( Addr, UWord );
extern VG_REGPARM(2) void MC_(helperc_STOREV4le) ( Addr, UWord );
+extern VG_REGPARM(2) void MC_(helperc_STOREV2be) ( Addr, UWord );
extern VG_REGPARM(2) void MC_(helperc_STOREV2le) ( Addr, UWord );
-extern VG_REGPARM(2) void MC_(helperc_STOREV1le) ( Addr, UWord );
+extern VG_REGPARM(2) void MC_(helperc_STOREV1) ( Addr, UWord );
=20
-extern VG_REGPARM(1) UWord MC_(helperc_LOADV1le) ( Addr );
-extern VG_REGPARM(1) UWord MC_(helperc_LOADV2le) ( Addr );
-extern VG_REGPARM(1) UWord MC_(helperc_LOADV4le) ( Addr );
-extern VG_REGPARM(1) ULong MC_(helperc_LOADV8le) ( Addr );
+extern VG_REGPARM(1) ULong MC_(helperc_LOADV8be) ( Addr );
+extern VG_REGPARM(1) ULong MC_(helperc_LOADV8le) ( Addr );
+extern VG_REGPARM(1) UWord MC_(helperc_LOADV4be) ( Addr );
+extern VG_REGPARM(1) UWord MC_(helperc_LOADV4le) ( Addr );
+extern VG_REGPARM(1) UWord MC_(helperc_LOADV2be) ( Addr );
+extern VG_REGPARM(1) UWord MC_(helperc_LOADV2le) ( Addr );
+extern VG_REGPARM(1) UWord MC_(helperc_LOADV1) ( Addr );
=20
extern void MC_(helperc_MAKE_STACK_UNINIT) ( Addr base, UWord len );
=20
Modified: trunk/memcheck/mc_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/memcheck/mc_main.c 2005-07-08 00:18:25 UTC (rev 4128)
+++ trunk/memcheck/mc_main.c 2005-07-08 01:29:33 UTC (rev 4129)
@@ -1472,296 +1472,320 @@
=20
/* ------------------------ Size =3D 8 ------------------------ */
=20
-VG_REGPARM(1)
-ULong MC_(helperc_LOADV8le) ( Addr aA )
-{
- PROF_EVENT(200, "helperc_LOADV8le");
-
-# if VG_DEBUG_MEMORY >=3D 2
- return mc_LOADVn_slow( aA, 8, False/*littleendian*/ );
-# else
-
- const UWord mask =3D ~((0x10000-8) | ((N_PRIMARY_MAP-1) << 16));
- UWord a =3D (UWord)aA;
-
- /* If any part of 'a' indicated by the mask is 1, either 'a' is not
- naturally aligned, or 'a' exceeds the range covered by the
- primary map. Either way we defer to the slow-path case. */
- if (EXPECTED_NOT_TAKEN(a & mask)) {
- PROF_EVENT(201, "helperc_LOADV8le-slow1");
- return (UWord)mc_LOADVn_slow( aA, 8, False/*littleendian*/ );
+#define MAKE_LOADV8(nAME,iS_BIGENDIAN) =
\
+ =
\
+ VG_REGPARM(1) \
+ ULong nAME ( Addr aA ) \
+ { \
+ PROF_EVENT(200, #nAME); \
+ \
+ if (VG_DEBUG_MEMORY >=3D 2) \
+ return mc_LOADVn_slow( aA, 8, iS_BIGENDIAN ); \
+ \
+ const UWord mask =3D ~((0x10000-8) | ((N_PRIMARY_MAP-1) << 16)); \
+ UWord a =3D (UWord)aA; \
+ \
+ /* If any part of 'a' indicated by the mask is 1, either */ \
+ /* 'a' is not naturally aligned, or 'a' exceeds the range */ \
+ /* covered by the primary map. Either way we defer to the */ \
+ /* slow-path case. */ \
+ if (EXPECTED_NOT_TAKEN(a & mask)) { \
+ PROF_EVENT(201, #nAME"-slow1"); \
+ return (UWord)mc_LOADVn_slow( aA, 8, iS_BIGENDIAN ); \
+ } \
+ \
+ UWord sec_no =3D (UWord)(a >> 16); \
+ \
+ if (VG_DEBUG_MEMORY >=3D 1) \
+ tl_assert(sec_no < N_PRIMARY_MAP); \
+ \
+ SecMap* sm =3D primary_map[sec_no]; \
+ UWord v_off =3D a & 0xFFFF; \
+ UWord a_off =3D v_off >> 3; \
+ UWord abits =3D (UWord)(sm->abits[a_off]); \
+ \
+ if (EXPECTED_TAKEN(abits =3D=3D VGM_BYTE_VALID)) { \
+ /* Handle common case quickly: a is suitably aligned, */ \
+ /* is mapped, and is addressible. */ \
+ return ((ULong*)(sm->vbyte))[ v_off >> 3 ]; \
+ } else { \
+ /* Slow but general case. */ \
+ PROF_EVENT(202, #nAME"-slow2"); \
+ return mc_LOADVn_slow( a, 8, iS_BIGENDIAN ); \
+ } \
}
=20
- UWord sec_no =3D (UWord)(a >> 16);
+MAKE_LOADV8( MC_(helperc_LOADV8be), True /*bigendian*/ );
+MAKE_LOADV8( MC_(helperc_LOADV8le), False/*littleendian*/ );
=20
-# if VG_DEBUG_MEMORY >=3D 1
- tl_assert(sec_no < N_PRIMARY_MAP);
-# endif
=20
- SecMap* sm =3D primary_map[sec_no];
- UWord v_off =3D a & 0xFFFF;
- UWord a_off =3D v_off >> 3;
- UWord abits =3D (UWord)(sm->abits[a_off]);
-
- if (EXPECTED_TAKEN(abits =3D=3D VGM_BYTE_VALID)) {
- /* Handle common case quickly: a is suitably aligned, is mapped,
- and is addressible. */
- return ((ULong*)(sm->vbyte))[ v_off >> 3 ];
- } else {
- /* Slow but general case. */
- PROF_EVENT(202, "helperc_LOADV8le-slow2");
- return mc_LOADVn_slow( a, 8, False/*littleendian*/ );
+#define MAKE_STOREV8(nAME,iS_BIGENDIAN) =
\
+ =
\
+ VG_REGPARM(1) \
+ void nAME ( Addr aA, ULong vbytes ) \
+ { \
+ PROF_EVENT(210, #nAME); \
+ \
+ if (VG_DEBUG_MEMORY >=3D 2) \
+ mc_STOREVn_slow( aA, 8, vbytes, iS_BIGENDIAN ); \
+ \
+ const UWord mask =3D ~((0x10000-8) | ((N_PRIMARY_MAP-1) << 16)); \
+ UWord a =3D (UWord)aA; \
+ \
+ /* If any part of 'a' indicated by the mask is 1, either */ \
+ /* 'a' is not naturally aligned, or 'a' exceeds the range */ \
+ /* covered by the primary map. Either way we defer to the */ \
+ /* slow-path case. */ \
+ if (EXPECTED_NOT_TAKEN(a & mask)) { \
+ PROF_EVENT(211, #nAME"-slow1"); \
+ mc_STOREVn_slow( aA, 8, vbytes, iS_BIGENDIAN ); \
+ return; \
+ } \
+ \
+ UWord sec_no =3D (UWord)(a >> 16); \
+ \
+ if (VG_DEBUG_MEMORY >=3D 1) \
+ tl_assert(sec_no < N_PRIMARY_MAP); \
+ \
+ SecMap* sm =3D primary_map[sec_no]; \
+ UWord v_off =3D a & 0xFFFF; \
+ UWord a_off =3D v_off >> 3; \
+ UWord abits =3D (UWord)(sm->abits[a_off]); \
+ \
+ if (EXPECTED_TAKEN(!is_distinguished_sm(sm) \
+ && abits =3D=3D VGM_BYTE_VALID)) { \
+ /* Handle common case quickly: a is suitably aligned, */ \
+ /* is mapped, and is addressible. */ \
+ ((ULong*)(sm->vbyte))[ v_off >> 3 ] =3D vbytes; \
+ } else { \
+ /* Slow but general case. */ \
+ PROF_EVENT(212, #nAME"-slow2"); \
+ mc_STOREVn_slow( aA, 8, vbytes, iS_BIGENDIAN ); \
+ } \
}
=20
-# endif
-}
+MAKE_STOREV8( MC_(helperc_STOREV8be), True /*bigendian*/ );
+MAKE_STOREV8( MC_(helperc_STOREV8le), False/*littleendian*/ );
=20
-VG_REGPARM(1)
-void MC_(helperc_STOREV8le) ( Addr aA, ULong vbytes )
-{
- PROF_EVENT(210, "helperc_STOREV8le");
=20
-# if VG_DEBUG_MEMORY >=3D 2
- mc_STOREVn_slow( aA, 8, vbytes, False/*littleendian*/ );
-# else
-
- const UWord mask =3D ~((0x10000-8) | ((N_PRIMARY_MAP-1) << 16));
- UWord a =3D (UWord)aA;
-
- /* If any part of 'a' indicated by the mask is 1, either 'a' is not
- naturally aligned, or 'a' exceeds the range covered by the
- primary map. Either way we defer to the slow-path case. */
- if (EXPECTED_NOT_TAKEN(a & mask)) {
- PROF_EVENT(211, "helperc_STOREV8le-slow1");
- mc_STOREVn_slow( aA, 8, vbytes, False/*littleendian*/ );
- return;
- }
-
- UWord sec_no =3D (UWord)(a >> 16);
-
-# if VG_DEBUG_MEMORY >=3D 1
- tl_assert(sec_no < N_PRIMARY_MAP);
-# endif
-
- SecMap* sm =3D primary_map[sec_no];
- UWord v_off =3D a & 0xFFFF;
- UWord a_off =3D v_off >> 3;
- UWord abits =3D (UWord)(sm->abits[a_off]);
-
- if (EXPECTED_TAKEN(!is_distinguished_sm(sm)=20
- && abits =3D=3D VGM_BYTE_VALID)) {
- /* Handle common case quickly: a is suitably aligned, is mapped,
- and is addressible. */
- ((ULong*)(sm->vbyte))[ v_off >> 3 ] =3D vbytes;
- } else {
- /* Slow but general case. */
- PROF_EVENT(212, "helperc_STOREV8le-slow2");
- mc_STOREVn_slow( aA, 8, vbytes, False/*littleendian*/ );
- }
-# endif
-}
-
/* ------------------------ Size =3D 4 ------------------------ */
=20
-VG_REGPARM(1)
-UWord MC_(helperc_LOADV4le) ( Addr aA )
-{
- PROF_EVENT(220, "helperc_LOADV4le");
-
-# if VG_DEBUG_MEMORY >=3D 2
- return (UWord)mc_LOADVn_slow( aA, 4, False/*littleendian*/ );
-# else
-
- const UWord mask =3D ~((0x10000-4) | ((N_PRIMARY_MAP-1) << 16));
- UWord a =3D (UWord)aA;
-
- /* If any part of 'a' indicated by the mask is 1, either 'a' is not
- naturally aligned, or 'a' exceeds the range covered by the
- primary map. Either way we defer to the slow-path case. */
- if (EXPECTED_NOT_TAKEN(a & mask)) {
- PROF_EVENT(221, "helperc_LOADV4le-slow1");
- return (UWord)mc_LOADVn_slow( aA, 4, False/*littleendian*/ );
+#define MAKE_LOADV4(nAME,iS_BIGENDIAN) =
\
+ =
\
+ VG_REGPARM(1) \
+ UWord nAME ( Addr aA ) \
+ { \
+ PROF_EVENT(220, #nAME); \
+ \
+ if (VG_DEBUG_MEMORY >=3D 2) \
+ return (UWord)mc_LOADVn_slow( aA, 4, iS_BIGENDIAN ); \
+ \
+ const UWord mask =3D ~((0x10000-4) | ((N_PRIMARY_MAP-1) << 16)); \
+ UWord a =3D (UWord)aA; \
+ \
+ /* If any part of 'a' indicated by the mask is 1, either */ \
+ /* 'a' is not naturally aligned, or 'a' exceeds the range */ \
+ /* covered by the primary map. Either way we defer to the */ \
+ /* slow-path case. */ \
+ if (EXPECTED_NOT_TAKEN(a & mask)) { \
+ PROF_EVENT(221, #nAME"-slow1"); \
+ return (UWord)mc_LOADVn_slow( aA, 4, iS_BIGENDIAN ); \
+ } \
+ \
+ UWord sec_no =3D (UWord)(a >> 16); \
+ \
+ if (VG_DEBUG_MEMORY >=3D 1) \
+ tl_assert(sec_no < N_PRIMARY_MAP); \
+ \
+ SecMap* sm =3D primary_map[sec_no]; \
+ UWord v_off =3D a & 0xFFFF; \
+ UWord a_off =3D v_off >> 3; \
+ UWord abits =3D (UWord)(sm->abits[a_off]); \
+ abits >>=3D (a & 4); \
+ abits &=3D 15; \
+ if (EXPECTED_TAKEN(abits =3D=3D VGM_NIBBLE_VALID)) { \
+ /* Handle common case quickly: a is suitably aligned, */ \
+ /* is mapped, and is addressible. */ \
+ /* On a 32-bit platform, simply hoick the required 32 */ \
+ /* bits out of the vbyte array. On a 64-bit platform, */ \
+ /* also set the upper 32 bits to 1 ("undefined"), just */ \
+ /* in case. This almost certainly isn't necessary, */ \
+ /* but be paranoid. */ \
+ UWord ret =3D (UWord)0xFFFFFFFF00000000ULL; \
+ ret |=3D (UWord)( ((UInt*)(sm->vbyte))[ v_off >> 2 ] ); \
+ return ret; \
+ } else { \
+ /* Slow but general case. */ \
+ PROF_EVENT(222, #nAME"-slow2"); \
+ return (UWord)mc_LOADVn_slow( a, 4, iS_BIGENDIAN ); \
+ } \
}
=20
- UWord sec_no =3D (UWord)(a >> 16);
+MAKE_LOADV4( MC_(helperc_LOADV4be), True /*bigendian*/ );
+MAKE_LOADV4( MC_(helperc_LOADV4le), False/*littleendian*/ );
=20
-# if VG_DEBUG_MEMORY >=3D 1
- tl_assert(sec_no < N_PRIMARY_MAP);
-# endif
=20
- SecMap* sm =3D primary_map[sec_no];
- UWord v_off =3D a & 0xFFFF;
- UWord a_off =3D v_off >> 3;
- UWord abits =3D (UWord)(sm->abits[a_off]);
- abits >>=3D (a & 4);
- abits &=3D 15;
- if (EXPECTED_TAKEN(abits =3D=3D VGM_NIBBLE_VALID)) {
- /* Handle common case quickly: a is suitably aligned, is mapped,
- and is addressible. */
- /* On a 32-bit platform, simply hoick the required 32 bits out of
- the vbyte array. On a 64-bit platform, also set the upper 32
- bits to 1 ("undefined"), just in case. This almost certainly
- isn't necessary, but be paranoid. */
- UWord ret =3D (UWord)0xFFFFFFFF00000000ULL;
- ret |=3D (UWord)( ((UInt*)(sm->vbyte))[ v_off >> 2 ] );
- return ret;
- } else {
- /* Slow but general case. */
- PROF_EVENT(222, "helperc_LOADV4le-slow2");
- return (UWord)mc_LOADVn_slow( a, 4, False/*littleendian*/ );
+#define MAKE_STOREV4(nAME,iS_BIGENDIAN) =
\
+ =
\
+ VG_REGPARM(2) \
+ void nAME ( Addr aA, UWord vbytes ) \
+ { \
+ PROF_EVENT(230, #nAME); \
+ \
+ if (VG_DEBUG_MEMORY >=3D 2) \
+ mc_STOREVn_slow( aA, 4, (ULong)vbytes, iS_BIGENDIAN ); \
+ \
+ const UWord mask =3D ~((0x10000-4) | ((N_PRIMARY_MAP-1) << 16)); \
+ UWord a =3D (UWord)aA; \
+ \
+ /* If any part of 'a' indicated by the mask is 1, either */ \
+ /* 'a' is not naturally aligned, or 'a' exceeds the range */ \
+ /* covered by the primary map. Either way we defer to the */ \
+ /* slow-path case. */ \
+ if (EXPECTED_NOT_TAKEN(a & mask)) { \
+ PROF_EVENT(231, #nAME"-slow1"); \
+ mc_STOREVn_slow( aA, 4, (ULong)vbytes, iS_BIGENDIAN ); \
+ return; \
+ } \
+ \
+ UWord sec_no =3D (UWord)(a >> 16); \
+ \
+ if (VG_DEBUG_MEMORY >=3D 1) \
+ tl_assert(sec_no < N_PRIMARY_MAP); \
+ \
+ SecMap* sm =3D primary_map[sec_no]; \
+ UWord v_off =3D a & 0xFFFF; \
+ UWord a_off =3D v_off >> 3; \
+ UWord abits =3D (UWord)(sm->abits[a_off]); \
+ abits >>=3D (a & 4); \
+ abits &=3D 15; \
+ if (EXPECTED_TAKEN(!is_distinguished_sm(sm) \
+ && abits =3D=3D VGM_NIBBLE_VALID)) { \
+ /* Handle common case quickly: a is suitably aligned, */ \
+ /* is mapped, and is addressible. */ \
+ ((UInt*)(sm->vbyte))[ v_off >> 2 ] =3D (UInt)vbytes; \
+ } else { \
+ /* Slow but general case. */ \
+ PROF_EVENT(232, #nAME"-slow2"); \
+ mc_STOREVn_slow( aA, 4, (ULong)vbytes, iS_BIGENDIAN ); \
+ } \
}
=20
-# endif
-}
+MAKE_STOREV4( MC_(helperc_STOREV4be), True /*bigendian*/ );
+MAKE_STOREV4( MC_(helperc_STOREV4le), False/*littleendian*/ );
=20
-VG_REGPARM(2)
-void MC_(helperc_STOREV4le) ( Addr aA, UWord vbytes )
-{
- PROF_EVENT(230, "helperc_STOREV4le");
=20
-# if VG_DEBUG_MEMORY >=3D 2
- mc_STOREVn_slow( aA, 4, (ULong)vbytes, False/*littleendian*/ );
-# else
-
- const UWord mask =3D ~((0x10000-4) | ((N_PRIMARY_MAP-1) << 16));
- UWord a =3D (UWord)aA;
-
- /* If any part of 'a' indicated by the mask is 1, either 'a' is not
- naturally aligned, or 'a' exceeds the range covered by the
- primary map. Either way we defer to the slow-path case. */
- if (EXPECTED_NOT_TAKEN(a & mask)) {
- PROF_EVENT(231, "helperc_STOREV4le-slow1");
- mc_STOREVn_slow( aA, 4, (ULong)vbytes, False/*littleendian*/ );
- return;
- }
-
- UWord sec_no =3D (UWord)(a >> 16);
-
-# if VG_DEBUG_MEMORY >=3D 1
- tl_assert(sec_no < N_PRIMARY_MAP);
-# endif
-
- SecMap* sm =3D primary_map[sec_no];
- UWord v_off =3D a & 0xFFFF;
- UWord a_off =3D v_off >> 3;
- UWord abits =3D (UWord)(sm->abits[a_off]);
- abits >>=3D (a & 4);
- abits &=3D 15;
- if (EXPECTED_TAKEN(!is_distinguished_sm(sm)=20
- && abits =3D=3D VGM_NIBBLE_VALID)) {
- /* Handle common case quickly: a is suitably aligned, is mapped,
- and is addressible. */
- ((UInt*)(sm->vbyte))[ v_off >> 2 ] =3D (UInt)vbytes;
- } else {
- /* Slow but general case. */
- PROF_EVENT(232, "helperc_STOREV4le-slow2");
- mc_STOREVn_slow( aA, 4, (ULong)vbytes, False/*littleendian*/ );
- }
-# endif
-}
-
/* ------------------------ Size =3D 2 ------------------------ */
=20
-VG_REGPARM(1)
-UWord MC_(helperc_LOADV2le) ( Addr aA )
-{
- PROF_EVENT(240, "helperc_LOADV2le");
-
-# if VG_DEBUG_MEMORY >=3D 2
- return (UWord)mc_LOADVn_slow( aA, 2, False/*littleendian*/ );
-# else
-
- const UWord mask =3D ~((0x10000-2) | ((N_PRIMARY_MAP-1) << 16));
- UWord a =3D (UWord)aA;
-
- /* If any part of 'a' indicated by the mask is 1, either 'a' is not
- naturally aligned, or 'a' exceeds the range covered by the
- primary map. Either way we defer to the slow-path case. */
- if (EXPECTED_NOT_TAKEN(a & mask)) {
- PROF_EVENT(241, "helperc_LOADV2le-slow1");
- return (UWord)mc_LOADVn_slow( aA, 2, False/*littleendian*/ );
+#define MAKE_LOADV2(nAME,iS_BIGENDIAN) =
\
+ =
\
+ VG_REGPARM(1) \
+ UWord nAME ( Addr aA ) \
+ { \
+ PROF_EVENT(240, #nAME); \
+ \
+ if (VG_DEBUG_MEMORY >=3D 2) \
+ return (UWord)mc_LOADVn_slow( aA, 2, iS_BIGENDIAN ); \
+ \
+ const UWord mask =3D ~((0x10000-2) | ((N_PRIMARY_MAP-1) << 16)); \
+ UWord a =3D (UWord)aA; \
+ \
+ /* If any part of 'a' indicated by the mask is 1, either */ \
+ /* 'a' is not naturally aligned, or 'a' exceeds the range */ \
+ /* covered by the primary map. Either way we defer to the */ \
+ /* slow-path case. */ \
+ if (EXPECTED_NOT_TAKEN(a & mask)) { \
+ PROF_EVENT(241, #nAME"-slow1"); \
+ return (UWord)mc_LOADVn_slow( aA, 2, iS_BIGENDIAN ); \
+ } \
+ \
+ UWord sec_no =3D (UWord)(a >> 16); \
+ \
+ if (VG_DEBUG_MEMORY >=3D 1) \
+ tl_assert(sec_no < N_PRIMARY_MAP); \
+ \
+ SecMap* sm =3D primary_map[sec_no]; \
+ UWord v_off =3D a & 0xFFFF; \
+ UWord a_off =3D v_off >> 3; \
+ UWord abits =3D (UWord)(sm->abits[a_off]); \
+ if (EXPECTED_TAKEN(abits =3D=3D VGM_BYTE_VALID)) { \
+ /* Handle common case quickly: a is mapped, and the */ \
+ /* entire word32 it lives in is addressible. */ \
+ /* Set the upper 16/48 bits of the result to 1 */ \
+ /* ("undefined"), just in case. This almost certainly */ \
+ /* isn't necessary, but be paranoid. */ \
+ return (~(UWord)0xFFFF) \
+ | \
+ (UWord)( ((UShort*)(sm->vbyte))[ v_off >> 1 ] ); \
+ } else { \
+ /* Slow but general case. */ \
+ PROF_EVENT(242, #nAME"-slow2"); \
+ return (UWord)mc_LOADVn_slow( aA, 2, iS_BIGENDIAN ); \
+ } \
}
=20
- UWord sec_no =3D (UWord)(a >> 16);
+MAKE_LOADV2( MC_(helperc_LOADV2be), True /*bigendian*/ );
+MAKE_LOADV2( MC_(helperc_LOADV2le), False/*littleendian*/ );
=20
-# if VG_DEBUG_MEMORY >=3D 1
- tl_assert(sec_no < N_PRIMARY_MAP);
-# endif
=20
- SecMap* sm =3D primary_map[sec_no];
- UWord v_off =3D a & 0xFFFF;
- UWord a_off =3D v_off >> 3;
- UWord abits =3D (UWord)(sm->abits[a_off]);
- if (EXPECTED_TAKEN(abits =3D=3D VGM_BYTE_VALID)) {
- /* Handle common case quickly: a is mapped, and the entire
- word32 it lives in is addressible. */
- /* Set the upper 16/48 bits of the result to 1 ("undefined"),
- just in case. This almost certainly isn't necessary, but be
- paranoid. */
- return (~(UWord)0xFFFF)
- |
- (UWord)( ((UShort*)(sm->vbyte))[ v_off >> 1 ] );
- } else {
- /* Slow but general case. */
- PROF_EVENT(242, "helperc_LOADV2le-slow2");
- return (UWord)mc_LOADVn_slow( aA, 2, False/*littleendian*/ );
+#define MAKE_STOREV2(nAME,iS_BIGENDIAN) =
\
+ =
\
+ VG_REGPARM(2) \
+ void nAME ( Addr aA, UWord vbytes ) \
+ { \
+ PROF_EVENT(250, #nAME); \
+ \
+ if (VG_DEBUG_MEMORY >=3D 2) \
+ mc_STOREVn_slow( aA, 2, (ULong)vbytes, iS_BIGENDIAN ); \
+ \
+ const UWord mask =3D ~((0x10000-2) | ((N_PRIMARY_MAP-1) << 16)); \
+ UWord a =3D (UWord)aA; \
+ \
+ /* If any part of 'a' indicated by the mask is 1, either */ \
+ /* 'a' is not naturally aligned, or 'a' exceeds the range */ \
+ /* covered by the primary map. Either way we defer to the */ \
+ /* slow-path case. */ \
+ if (EXPECTED_NOT_TAKEN(a & mask)) { \
+ PROF_EVENT(251, #nAME"-slow1"); \
+ mc_STOREVn_slow( aA, 2, (ULong)vbytes, iS_BIGENDIAN ); \
+ return; \
+ } \
+ \
+ UWord sec_no =3D (UWord)(a >> 16); \
+ \
+ if (VG_DEBUG_MEMORY >=3D 1) \
+ tl_assert(sec_no < N_PRIMARY_MAP); \
+ \
+ SecMap* sm =3D primary_map[sec_no]; \
+ UWord v_off =3D a & 0xFFFF; \
+ UWord a_off =3D v_off >> 3; \
+ UWord abits =3D (UWord)(sm->abits[a_off]); \
+ if (EXPECTED_TAKEN(!is_distinguished_sm(sm) \
+ && abits =3D=3D VGM_BYTE_VALID)) { \
+ /* Handle common case quickly. */ \
+ ((UShort*)(sm->vbyte))[ v_off >> 1 ] =3D (UShort)vbytes; \
+ } else { \
+ /* Slow but general case. */ \
+ PROF_EVENT(252, #nAME"-slow2"); \
+ mc_STOREVn_slow( aA, 2, (ULong)vbytes, iS_BIGENDIAN ); \
+ } \
}
=20
-# endif
-}
=20
-VG_REGPARM(2)
-void MC_(helperc_STOREV2le) ( Addr aA, UWord vbytes )
-{
- PROF_EVENT(250, "helperc_STOREV2le");
+MAKE_STOREV2( MC_(helperc_STOREV2be), True /*bigendian*/ );
+MAKE_STOREV2( MC_(helperc_STOREV2le), False/*littleendian*/ );
=20
-# if VG_DEBUG_MEMORY >=3D 2
- mc_STOREVn_slow( aA, 2, (ULong)vbytes, False/*littleendian*/ );
-# else
=20
- const UWord mask =3D ~((0x10000-2) | ((N_PRIMARY_MAP-1) << 16));
- UWord a =3D (UWord)aA;
-
- /* If any part of 'a' indicated by the mask is 1, either 'a' is not
- naturally aligned, or 'a' exceeds the range covered by the
- primary map. Either way we defer to the slow-path case. */
- if (EXPECTED_NOT_TAKEN(a & mask)) {
- PROF_EVENT(251, "helperc_STOREV2le-slow1");
- mc_STOREVn_slow( aA, 2, (ULong)vbytes, False/*littleendian*/ );
- return;
- }
-
- UWord sec_no =3D (UWord)(a >> 16);
-
-# if VG_DEBUG_MEMORY >=3D 1
- tl_assert(sec_no < N_PRIMARY_MAP);
-# endif
-
- SecMap* sm =3D primary_map[sec_no];
- UWord v_off =3D a & 0xFFFF;
- UWord a_off =3D v_off >> 3;
- UWord abits =3D (UWord)(sm->abits[a_off]);
- if (EXPECTED_TAKEN(!is_distinguished_sm(sm)=20
- && abits =3D=3D VGM_BYTE_VALID)) {
- /* Handle common case quickly. */
- ((UShort*)(sm->vbyte))[ v_off >> 1 ] =3D (UShort)vbytes;
- } else {
- /* Slow but general case. */
- PROF_EVENT(252, "helperc_STOREV2le-slow2");
- mc_STOREVn_slow( aA, 2, (ULong)vbytes, False/*littleendian*/ );
- }
-# endif
-}
-
/* ------------------------ Size =3D 1 ------------------------ */
+/* Note: endianness is irrelevant for size =3D=3D 1 */
=20
VG_REGPARM(1)
-UWord MC_(helperc_LOADV1le) ( Addr aA )
+UWord MC_(helperc_LOADV1) ( Addr aA )
{
- PROF_EVENT(260, "helperc_LOADV1le");
+ PROF_EVENT(260, "helperc_LOADV1");
=20
# if VG_DEBUG_MEMORY >=3D 2
- return (UWord)mc_LOADVn_slow( aA, 1, False/*littleendian*/ );
+ return (UWord)mc_LOADVn_slow( aA, 1, False/*irrelevant*/ );
# else
=20
const UWord mask =3D ~((0x10000-1) | ((N_PRIMARY_MAP-1) << 16));
@@ -1771,8 +1795,8 @@
exceeds the range covered by the primary map. In which case we
defer to the slow-path case. */
if (EXPECTED_NOT_TAKEN(a & mask)) {
- PROF_EVENT(261, "helperc_LOADV1le-slow1");
- return (UWord)mc_LOADVn_slow( aA, 1, False/*littleendian*/ );
+ PROF_EVENT(261, "helperc_LOADV1-slow1");
+ return (UWord)mc_LOADVn_slow( aA, 1, False/*irrelevant*/ );
}
=20
UWord sec_no =3D (UWord)(a >> 16);
@@ -1796,20 +1820,20 @@
(UWord)( ((UChar*)(sm->vbyte))[ v_off ] );
} else {
/* Slow but general case. */
- PROF_EVENT(262, "helperc_LOADV1le-slow2");
- return (UWord)mc_LOADVn_slow( aA, 1, False/*littleendian*/ );
+ PROF_EVENT(262, "helperc_LOADV1-slow2");
+ return (UWord)mc_LOADVn_slow( aA, 1, False/*irrelevant*/ );
}
# endif
}
=20
=20
VG_REGPARM(2)
-void MC_(helperc_STOREV1le) ( Addr aA, UWord vbyte )
+void MC_(helperc_STOREV1) ( Addr aA, UWord vbyte )
{
- PROF_EVENT(270, "helperc_STOREV1le");
+ PROF_EVENT(270, "helperc_STOREV1");
=20
# if VG_DEBUG_MEMORY >=3D 2
- mc_STOREVn_slow( aA, 1, (ULong)vbyte, False/*littleendian*/ );
+ mc_STOREVn_slow( aA, 1, (ULong)vbyte, False/*irrelevant*/ );
# else
=20
const UWord mask =3D ~((0x10000-1) | ((N_PRIMARY_MAP-1) << 16));
@@ -1818,8 +1842,8 @@
exceeds the range covered by the primary map. In which case we
defer to the slow-path case. */
if (EXPECTED_NOT_TAKEN(a & mask)) {
- PROF_EVENT(271, "helperc_STOREV1le-slow1");
- mc_STOREVn_slow( aA, 1, (ULong)vbyte, False/*littleendian*/ );
+ PROF_EVENT(271, "helperc_STOREV1-slow1");
+ mc_STOREVn_slow( aA, 1, (ULong)vbyte, False/*irrelevant*/ );
return;
}
=20
@@ -1839,8 +1863,8 @@
lives in is addressible. */
((UChar*)(sm->vbyte))[ v_off ] =3D (UChar)vbyte;
} else {
- PROF_EVENT(272, "helperc_STOREV1le-slow2");
- mc_STOREVn_slow( aA, 1, (ULong)vbyte, False/*littleendian*/ );
+ PROF_EVENT(272, "helperc_STOREV1-slow2");
+ mc_STOREVn_slow( aA, 1, (ULong)vbyte, False/*irrelevant*/ );
}
=20
# endif
@@ -2220,7 +2244,7 @@
Addr start;
SizeT size;
ExeContext* where;
- Char* desc;
+ Char* desc;
}=20
CGenBlock;
=20
@@ -2332,7 +2356,7 @@
ai->blksize =3D cgbs[i].size;
ai->rwoffset =3D (Int)(a) - (Int)(cgbs[i].start);
ai->lastchange =3D cgbs[i].where;
- ai->desc =3D cgbs[i].desc;
+ ai->desc =3D cgbs[i].desc;
return True;
}
}
@@ -2361,7 +2385,7 @@
mc_record_user_error ( tid, bad_addr, /*isWrite*/True,
/*isUnaddr*/True );
*ret =3D ok ? (UWord)NULL : bad_addr;
- break;
+ break;
=20
case VG_USERREQ__CHECK_READABLE: { /* check readable */
MC_ReadResult res;
@@ -2373,56 +2397,56 @@
mc_record_user_error ( tid, bad_addr, /*isWrite*/False,
/*isUnaddr*/False );
*ret =3D ( res=3D=3DMC_Ok ? (UWord)NULL : bad_addr );
- break;
+ break;
}
=20
case VG_USERREQ__DO_LEAK_CHECK:
mc_detect_memory_leaks(tid, arg[1] ? LC_Summary : LC_Full);
- *ret =3D 0; /* return value is meaningless */
- break;
+ *ret =3D 0; /* return value is meaningless */
+ break;
=20
case VG_USERREQ__MAKE_NOACCESS: /* make no access */
mc_make_noaccess ( arg[1], arg[2] );
- *ret =3D -1;
- break;
+ *ret =3D -1;
+ break;
=20
case VG_USERREQ__MAKE_WRITABLE: /* make writable */
mc_make_writable ( arg[1], arg[2] );
*ret =3D -1;
- break;
+ break;
=20
case VG_USERREQ__MAKE_READABLE: /* make readable */
mc_make_readable ( arg[1], arg[2] );
- *ret =3D -1;
+ *ret =3D -1;
break;
=20
case VG_USERREQ__CREATE_BLOCK: /* describe a block */
- if (arg[1] !=3D 0 && arg[2] !=3D 0) {
- i =3D alloc_client_block();
- /* VG_(printf)("allocated %d %p\n", i, cgbs); */
- cgbs[i].start =3D arg[1];
- cgbs[i].size =3D arg[2];
- cgbs[i].desc =3D VG_(strdup)((Char *)arg[3]);
- cgbs[i].where =3D VG_(record_ExeContext) ( tid );
+ if (arg[1] !=3D 0 && arg[2] !=3D 0) {
+ i =3D alloc_client_block();
+ /* VG_(printf)("allocated %d %p\n", i, cgbs); */
+ cgbs[i].start =3D arg[1];
+ cgbs[i].size =3D arg[2];
+ cgbs[i].desc =3D VG_(strdup)((Char *)arg[3]);
+ cgbs[i].where =3D VG_(record_ExeContext) ( tid );
=20
- *ret =3D i;
- } else
- *ret =3D -1;
- break;
+ *ret =3D i;
+ } else
+ *ret =3D -1;
+ break;
=20
case VG_USERREQ__DISCARD: /* discard */
if (cgbs =3D=3D NULL=20
|| arg[2] >=3D cgb_used ||
- (cgbs[arg[2]].start =3D=3D 0 && cgbs[arg[2]].size =3D=3D 0)) {
+ (cgbs[arg[2]].start =3D=3D 0 && cgbs[arg[2]].size =3D=3D 0)=
) {
*ret =3D 1;
- } else {
- tl_assert(arg[2] >=3D 0 && arg[2] < cgb_used);
- cgbs[arg[2]].start =3D cgbs[arg[2]].size =3D 0;
- VG_(free)(cgbs[arg[2]].desc);
- cgb_discards++;
- *ret =3D 0;
- }
- break;
+ } else {
+ tl_assert(arg[2] >=3D 0 && arg[2] < cgb_used);
+ cgbs[arg[2]].start =3D cgbs[arg[2]].size =3D 0;
+ VG_(free)(cgbs[arg[2]].desc);
+ cgb_discards++;
+ *ret =3D 0;
+ }
+ break;
=20
//zz case VG_USERREQ__GET_VBITS:
//zz /* Returns: 1 =3D=3D OK, 2 =3D=3D alignment error, 3 =3D=3D=
addressing
Modified: trunk/memcheck/mc_translate.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/memcheck/mc_translate.c 2005-07-08 00:18:25 UTC (rev 4128)
+++ trunk/memcheck/mc_translate.c 2005-07-08 01:29:33 UTC (rev 4129)
@@ -1990,14 +1990,29 @@
case Ity_I16: helper =3D &MC_(helperc_LOADV2le);
hname =3D "MC_(helperc_LOADV2le)";
break;
- case Ity_I8: helper =3D &MC_(helperc_LOADV1le);
- hname =3D "MC_(helperc_LOADV1le)";
+ case Ity_I8: helper =3D &MC_(helperc_LOADV1);
+ hname =3D "MC_(helperc_LOADV1)";
break;
default: ppIRType(ty);
VG_(tool_panic)("memcheck:do_shadow_Load(LE)");
}
} else {
- VG_(tool_panic)("memcheck:do_shadow_Load(BE):bigendian not impleme=
nted");
+ switch (ty) {
+ case Ity_I64: helper =3D &MC_(helperc_LOADV8be);
+ hname =3D "MC_(helperc_LOADV8be)";
+ break;
+ case Ity_I32: helper =3D &MC_(helperc_LOADV4be);
+ hname =3D "MC_(helperc_LOADV4be)";
+ break;
+ case Ity_I16: helper =3D &MC_(helperc_LOADV2be);
+ hname =3D "MC_(helperc_LOADV2be)";
+ break;
+ case Ity_I8: helper =3D &MC_(helperc_LOADV1);
+ hname =3D "MC_(helperc_LOADV1)";
+ break;
+ default: ppIRType(ty);
+ VG_(tool_panic)("memcheck:do_shadow_Load(BE)");
+ }
}
=20
/* Generate the actual address into addrAct. */
@@ -2238,13 +2253,28 @@
case Ity_I16: helper =3D &MC_(helperc_STOREV2le);
hname =3D "MC_(helperc_STOREV2le)";
break;
- case Ity_I8: helper =3D &MC_(helperc_STOREV1le);
- hname =3D "MC_(helperc_STOREV1le)";
+ case Ity_I8: helper =3D &MC_(helperc_STOREV1);
+ hname =3D "MC_(helperc_STOREV1)";
break;
default: VG_(tool_panic)("memcheck:do_shadow_Store(LE)");
}
} else {
- VG_(tool_panic)("memcheck:do_shadow_Store(BE):bigendian not implem=
ented");
+ switch (ty) {
+ case Ity_V128: /* we'll use the helper twice */
+ case Ity_I64: helper =3D &MC_(helperc_STOREV8be);
+ hname =3D "MC_(helperc_STOREV8be)";
+ break;
+ case Ity_I32: helper =3D &MC_(helperc_STOREV4be);
+ hname =3D "MC_(helperc_STOREV4be)";
+ break;
+ case Ity_I16: helper =3D &MC_(helperc_STOREV2be);
+ hname =3D "MC_(helperc_STOREV2be)";
+ break;
+ case Ity_I8: helper =3D &MC_(helperc_STOREV1);
+ hname =3D "MC_(helperc_STOREV1)";
+ break;
+ default: VG_(tool_panic)("memcheck:do_shadow_Store(BE)");
+ }
}
=20
if (ty =3D=3D Ity_V128) {
@@ -2258,7 +2288,6 @@
offLo64 =3D 0;
offHi64 =3D 8;
} else {
- tl_assert(0 /* awaiting test case */);
offLo64 =3D 8;
offHi64 =3D 0;
}
|
|
From: <sv...@va...> - 2005-07-08 00:18:40
|
Author: sewardj
Date: 2005-07-08 01:18:25 +0100 (Fri, 08 Jul 2005)
New Revision: 4128
Log:
Enable a couple more syscalls.
Modified:
trunk/coregrind/m_syswrap/syswrap-ppc32-linux.c
trunk/coregrind/vki_unistd-ppc32-linux.h
Modified: trunk/coregrind/m_syswrap/syswrap-ppc32-linux.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_syswrap/syswrap-ppc32-linux.c 2005-07-07 14:29:21 U=
TC (rev 4127)
+++ trunk/coregrind/m_syswrap/syswrap-ppc32-linux.c 2005-07-08 00:18:25 U=
TC (rev 4128)
@@ -1915,45 +1915,45 @@
=20
const SyscallTableEntry ML_(syscall_table)[] =3D {
//.. (restart_syscall) // 0
- GENX_(__NR_exit, sys_exit), // 1
+ GENX_(__NR_exit, sys_exit), // 1
//.. GENX_(__NR_fork, sys_fork), // 2
- GENXY(__NR_read, sys_read), // 3
- GENX_(__NR_write, sys_write), // 4
+ GENXY(__NR_read, sys_read), // 3
+ GENX_(__NR_write, sys_write), // 4
=20
- GENXY(__NR_open, sys_open), // 5
- GENXY(__NR_close, sys_close), // 6
- GENXY(__NR_waitpid, sys_waitpid), // 7
- GENXY(__NR_creat, sys_creat), // 8
+ GENXY(__NR_open, sys_open), // 5
+ GENXY(__NR_close, sys_close), // 6
+ GENXY(__NR_waitpid, sys_waitpid), // 7
+ GENXY(__NR_creat, sys_creat), // 8
//.. GENX_(__NR_link, sys_link), // 9
//..=20
- GENX_(__NR_unlink, sys_unlink), // 10
- GENX_(__NR_execve, sys_execve), // 11
+ GENX_(__NR_unlink, sys_unlink), // 10
+ GENX_(__NR_execve, sys_execve), // 11
//.. GENX_(__NR_chdir, sys_chdir), // 12
- GENXY(__NR_time, sys_time), // 13
+ GENXY(__NR_time, sys_time), // 13
//.. GENX_(__NR_mknod, sys_mknod), // 14
//..=20
- GENX_(__NR_chmod, sys_chmod), // 15
+ GENX_(__NR_chmod, sys_chmod), // 15
//.. // (__NR_lchown, sys_lchown16), // 16 ## P
//.. GENX_(__NR_break, sys_ni_syscall), // 17
//.. // (__NR_oldstat, sys_stat), // 18 (obs=
olete)
//.. GENX_(__NR_lseek, sys_lseek), // 19
//..=20
- GENX_(__NR_getpid, sys_getpid), // 20
+ GENX_(__NR_getpid, sys_getpid), // 20
//.. LINX_(__NR_mount, sys_mount), // 21
//.. LINX_(__NR_umount, sys_oldumount), // 22
- GENX_(__NR_setuid, sys_setuid16), // 23 ## P
- GENX_(__NR_getuid, sys_getuid16), // 24 ## P
+ GENX_(__NR_setuid, sys_setuid16), // 23 ## P
+ GENX_(__NR_getuid, sys_getuid16), // 24 ## P
//..=20
//.. // (__NR_stime, sys_stime), // 25 * (S=
Vr4,SVID,X/OPEN)
//.. PLAXY(__NR_ptrace, sys_ptrace), // 26
//.. GENX_(__NR_alarm, sys_alarm), // 27
//.. // (__NR_oldfstat, sys_fstat), // 28 * L =
-- obsolete
-//.. GENX_(__NR_pause, sys_pause), // 29
+ GENX_(__NR_pause, sys_pause), // 29
//..=20
GENX_(__NR_utime, sys_utime), // 30
//.. GENX_(__NR_stty, sys_ni_syscall), // 31
//.. GENX_(__NR_gtty, sys_ni_syscall), // 32
- GENX_(__NR_access, sys_access), // 33
+ GENX_(__NR_access, sys_access), // 33
//.. GENX_(__NR_nice, sys_nice), // 34
//..=20
//.. GENX_(__NR_ftime, sys_ni_syscall), // 35
@@ -1963,33 +1963,33 @@
//.. GENX_(__NR_mkdir, sys_mkdir), // 39
//..=20
//.. GENX_(__NR_rmdir, sys_rmdir), // 40
- GENXY(__NR_dup, sys_dup), // 41
- GENXY(__NR_pipe, sys_pipe), // 42
+ GENXY(__NR_dup, sys_dup), // 41
+ GENXY(__NR_pipe, sys_pipe), // 42
//.. GENXY(__NR_times, sys_times), // 43
//.. GENX_(__NR_prof, sys_ni_syscall), // 44
//..=20
- GENX_(__NR_brk, sys_brk), // 45
- GENX_(__NR_setgid, sys_setgid16), // 46
- GENX_(__NR_getgid, sys_getgid16), // 47
+ GENX_(__NR_brk, sys_brk), // 45
+ GENX_(__NR_setgid, sys_setgid16), // 46
+ GENX_(__NR_getgid, sys_getgid16), // 47
//.. // (__NR_signal, sys_signal), // 48 */* =
(ANSI C)
- GENX_(__NR_geteuid, sys_geteuid16), // 49
+ GENX_(__NR_geteuid, sys_geteuid16), // 49
=20
- GENX_(__NR_getegid, sys_getegid16), // 50
+ GENX_(__NR_getegid, sys_getegid16), // 50
//.. GENX_(__NR_acct, sys_acct), // 51
//.. LINX_(__NR_umount2, sys_umount), // 52
//.. GENX_(__NR_lock, sys_ni_syscall), // 53
- GENXY(__NR_ioctl, sys_ioctl), // 54
+ GENXY(__NR_ioctl, sys_ioctl), // 54
//..=20
//.. GENXY(__NR_fcntl, sys_fcntl), // 55
//.. GENX_(__NR_mpx, sys_ni_syscall), // 56
- GENX_(__NR_setpgid, sys_setpgid), // 57
+ GENX_(__NR_setpgid, sys_setpgid), // 57
//.. GENX_(__NR_ulimit, sys_ni_syscall), // 58
//.. // (__NR_oldolduname, sys_olduname), // 59 Linu=
x -- obsolete
//..=20
//.. GENX_(__NR_umask, sys_umask), // 60
//.. GENX_(__NR_chroot, sys_chroot), // 61
//.. // (__NR_ustat, sys_ustat) // 62 SVr4=
-- deprecated
- GENXY(__NR_dup2, sys_dup2), // 63
+ GENXY(__NR_dup2, sys_dup2), // 63
//.. GENXY(__NR_getppid, sys_getppid), // 64
//..=20
//.. GENX_(__NR_getpgrp, sys_getpgrp), // 65
@@ -2016,7 +2016,7 @@
//.. GENX_(__NR_symlink, sys_symlink), // 83
//.. // (__NR_oldlstat, sys_lstat), // 84 -- o=
bsolete
//..=20
- GENX_(__NR_readlink, sys_readlink), // 85
+ GENX_(__NR_readlink, sys_readlink), // 85
//.. // (__NR_uselib, sys_uselib), // 86 */Li=
nux
//.. // (__NR_swapon, sys_swapon), // 87 */Li=
nux
//.. // (__NR_reboot, sys_reboot), // 88 */Li=
nux
@@ -2036,12 +2036,12 @@
//..=20
//.. GENXY(__NR_fstatfs, sys_fstatfs), // 100
//.. LINX_(__NR_ioperm, sys_ioperm), // 101
- PLAXY(__NR_socketcall, sys_socketcall), // 102
+ PLAXY(__NR_socketcall, sys_socketcall), // 102
//.. LINXY(__NR_syslog, sys_syslog), // 103
- GENXY(__NR_setitimer, sys_setitimer), // 104
+ GENXY(__NR_setitimer, sys_setitimer), // 104
//..=20
//.. GENXY(__NR_getitimer, sys_getitimer), // 105
- GENXY(__NR_stat, sys_newstat), // 106
+ GENXY(__NR_stat, sys_newstat), // 106
//.. GENXY(__NR_lstat, sys_newlstat), // 107
//.. GENXY(__NR_fstat, sys_newfstat), // 108
//.. // (__NR_olduname, sys_uname), // 109 -- =
obsolete
@@ -2054,17 +2054,17 @@
//..=20
//.. // (__NR_swapoff, sys_swapoff), // 115 */L=
inux=20
//.. LINXY(__NR_sysinfo, sys_sysinfo), // 116
- PLAXY(__NR_ipc, sys_ipc), // 117
+ PLAXY(__NR_ipc, sys_ipc), // 117
//.. GENX_(__NR_fsync, sys_fsync), // 118
//.. PLAX_(__NR_sigreturn, sys_sigreturn), // 119 ?/L=
inux
//..=20
- PLAX_(__NR_clone, sys_clone), // 120
+ PLAX_(__NR_clone, sys_clone), // 120
//.. // (__NR_setdomainname, sys_setdomainname), // 121 */*=
(?)
- GENXY(__NR_uname, sys_newuname), // 122
+ GENXY(__NR_uname, sys_newuname), // 122
//.. PLAX_(__NR_modify_ldt, sys_modify_ldt), // 123
//.. LINXY(__NR_adjtimex, sys_adjtimex), // 124
//..=20
- GENXY(__NR_mprotect, sys_mprotect), // 125
+ GENXY(__NR_mprotect, sys_mprotect), // 125
//.. GENXY(__NR_sigprocmask, sys_sigprocmask), // 126
//.. // Nb: create_module() was removed 2.4-->2.6
//.. GENX_(__NR_create_module, sys_ni_syscall), // 127
@@ -2074,7 +2074,7 @@
//.. // Nb: get_kernel_syms() was removed 2.4-->2.6
//.. GENX_(__NR_get_kernel_syms, sys_ni_syscall), // 130
//.. GENX_(__NR_quotactl, sys_quotactl), // 131
- GENX_(__NR_getpgid, sys_getpgid), // 132
+ GENX_(__NR_getpgid, sys_getpgid), // 132
//.. GENX_(__NR_fchdir, sys_fchdir), // 133
//.. // (__NR_bdflush, sys_bdflush), // 134 */L=
inux
//..=20
@@ -2084,17 +2084,17 @@
//.. LINX_(__NR_setfsuid, sys_setfsuid16), // 138
//.. LINX_(__NR_setfsgid, sys_setfsgid16), // 139
//..=20
- LINXY(__NR__llseek, sys_llseek), // 140
+ LINXY(__NR__llseek, sys_llseek), // 140
//.. GENXY(__NR_getdents, sys_getdents), // 141
- GENX_(__NR__newselect, sys_select), // 142
+ GENX_(__NR__newselect, sys_select), // 142
//.. GENX_(__NR_flock, sys_flock), // 143
//.. GENX_(__NR_msync, sys_msync), // 144
//..=20
- GENXY(__NR_readv, sys_readv), // 145
- GENX_(__NR_writev, sys_writev), // 146
+ GENXY(__NR_readv, sys_readv), // 145
+ GENX_(__NR_writev, sys_writev), // 146
//.. GENX_(__NR_getsid, sys_getsid), // 147
//.. GENX_(__NR_fdatasync, sys_fdatasync), // 148
- LINXY(__NR__sysctl, sys_sysctl), // 149
+ LINXY(__NR__sysctl, sys_sysctl), // 149
//..=20
//.. GENX_(__NR_mlock, sys_mlock), // 150
//.. GENX_(__NR_munlock, sys_munlock), // 151
@@ -2110,8 +2110,8 @@
//..=20
//.. GENX_(__NR_sched_get_priority_min, sys_sched_get_priority_min),/=
/ 160
//.. // (__NR_sched_rr_get_interval, sys_sched_rr_get_interval), /=
/ 161 */*
-//.. GENXY(__NR_nanosleep, sys_nanosleep), // 162
- GENX_(__NR_mremap, sys_mremap), // 163
+ GENXY(__NR_nanosleep, sys_nanosleep), // 162
+ GENX_(__NR_mremap, sys_mremap), // 163
//.. LINX_(__NR_setresuid, sys_setresuid16), // 164
//..=20
//.. LINXY(__NR_getresuid, sys_getresuid16), // 165
@@ -2124,17 +2124,17 @@
//.. LINXY(__NR_getresgid, sys_getresgid16), // 170
//.. LINX_(__NR_prctl, sys_prctl), // 171
//.. PLAX_(__NR_rt_sigreturn, sys_rt_sigreturn), // 172
- GENXY(__NR_rt_sigaction, sys_rt_sigaction), // 173
+ GENXY(__NR_rt_sigaction, sys_rt_sigaction), // 173
=20
- GENXY(__NR_rt_sigprocmask, sys_rt_sigprocmask), // 174
+ GENXY(__NR_rt_sigprocmask, sys_rt_sigprocmask), // 174
//.. GENXY(__NR_rt_sigpending, sys_rt_sigpending), // 175
//.. GENXY(__NR_rt_sigtimedwait, sys_rt_sigtimedwait), // 176
//.. GENXY(__NR_rt_sigqueueinfo, sys_rt_sigqueueinfo), // 177
//.. GENX_(__NR_rt_sigsuspend, sys_rt_sigsuspend), // 178
//..=20
- GENXY(__NR_pread64, sys_pread64), // 179
- GENX_(__NR_pwrite64, sys_pwrite64), // 180
- GENX_(__NR_chown, sys_chown16), // 181
+ GENXY(__NR_pread64, sys_pread64), // 179
+ GENX_(__NR_pwrite64, sys_pwrite64), // 180
+ GENX_(__NR_chown, sys_chown16), // 181
//.. GENXY(__NR_getcwd, sys_getcwd), // 182
//.. GENXY(__NR_capget, sys_capget), // 183
//..=20
@@ -2143,28 +2143,28 @@
//.. LINXY(__NR_sendfile, sys_sendfile), // 186
//.. GENXY(__NR_getpmsg, sys_getpmsg), // 187
//.. GENX_(__NR_putpmsg, sys_putpmsg), // 188
-//..=20
-//.. // Nb: we treat vfork as fork
-//.. GENX_(__NR_vfork, sys_fork), // 189
- GENXY(__NR_ugetrlimit, sys_getrlimit), // 190
+
+ // Nb: we treat vfork as fork
+ GENX_(__NR_vfork, sys_fork), // 189
+ GENXY(__NR_ugetrlimit, sys_getrlimit), // 190
//__NR_readahead // 191 ppc/Linux only?
- GENXY(__NR_mmap2, sys_mmap2), // 192
+ GENXY(__NR_mmap2, sys_mmap2), // 192
//.. GENX_(__NR_truncate64, sys_truncate64), // 193
//.. GENX_(__NR_ftruncate64, sys_ftruncate64), // 194
//.. =20
=20
- PLAXY(__NR_stat64, sys_stat64), // 195
- PLAXY(__NR_lstat64, sys_lstat64), // 196
- PLAXY(__NR_fstat64, sys_fstat64), // 197
+ PLAXY(__NR_stat64, sys_stat64), // 195
+ PLAXY(__NR_lstat64, sys_lstat64), // 196
+ PLAXY(__NR_fstat64, sys_fstat64), // 197
=20
// __NR_pciconfig_read // 198
// __NR_pciconfig_write // 199
// __NR_pciconfig_iobase // 200
// __NR_multiplexer // 201
=20
- GENXY(__NR_getdents64, sys_getdents64), // 202
+ GENXY(__NR_getdents64, sys_getdents64), // 202
//.. // (__NR_pivot_root, sys_pivot_root), // 203 */L=
inux
- GENXY(__NR_fcntl64, sys_fcntl64), // 204
+ GENXY(__NR_fcntl64, sys_fcntl64), // 204
//.. GENX_(__NR_madvise, sys_madvise), // 205
//.. GENXY(__NR_mincore, sys_mincore), // 206
//.. LINX_(__NR_gettid, sys_gettid), // 207
@@ -2197,10 +2197,10 @@
//.. LINX_(__NR_io_submit, sys_io_submit), // 230
//.. LINXY(__NR_io_cancel, sys_io_cancel), // 231
//..=20
- LINX_(__NR_set_tid_address, sys_set_tid_address), // 232
+ LINX_(__NR_set_tid_address, sys_set_tid_address), // 232
=20
//.. LINX_(__NR_fadvise64, sys_fadvise64), // 233 */(=
Linux?)
- LINX_(__NR_exit_group, sys_exit_group), // 234
+ LINX_(__NR_exit_group, sys_exit_group), // 234
//.. GENXY(__NR_lookup_dcookie, sys_lookup_dcookie), // 235
//.. LINXY(__NR_epoll_create, sys_epoll_create), // 236
//.. LINX_(__NR_epoll_ctl, sys_epoll_ctl), // 237
@@ -2213,7 +2213,7 @@
//.. GENX_(__NR_timer_getoverrun, sys_timer_getoverrun), // 243
//.. GENX_(__NR_timer_delete, sys_timer_delete), // 244
//.. GENX_(__NR_clock_settime, sys_clock_settime), // 245
- GENXY(__NR_clock_gettime, sys_clock_gettime), // 246
+ GENXY(__NR_clock_gettime, sys_clock_gettime), // 246
//.. GENXY(__NR_clock_getres, sys_clock_getres), // 247
//.. // (__NR_clock_nanosleep, sys_clock_nanosleep), // 248
=20
Modified: trunk/coregrind/vki_unistd-ppc32-linux.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/vki_unistd-ppc32-linux.h 2005-07-07 14:29:21 UTC (rev=
4127)
+++ trunk/coregrind/vki_unistd-ppc32-linux.h 2005-07-08 00:18:25 UTC (rev=
4128)
@@ -58,7 +58,7 @@
//#define __NR_ptrace 26
//#define __NR_alarm 27
//#define __NR_oldfstat 28
-//#define __NR_pause 29
+#define __NR_pause 29
#define __NR_utime 30
//#define __NR_stty 31
//#define __NR_gtty 32
@@ -218,7 +218,7 @@
//#define __NR_sendfile 186
//#define __NR_getpmsg 187 /* some people actually want streams */
//#define __NR_putpmsg 188 /* some people actually want streams */
-//#define __NR_vfork 189
+#define __NR_vfork 189
#define __NR_ugetrlimit 190 /* SuS compliant getrlimit */
//#define __NR_readahead 191
#define __NR_mmap2 192
|