[66719] trunk/dports/devel
raimue at macports.org
raimue at macports.org
Wed Apr 21 07:08:34 PDT 2010
Revision: 66719
http://trac.macports.org/changeset/66719
Author: raimue at macports.org
Date: 2010-04-21 07:08:30 -0700 (Wed, 21 Apr 2010)
Log Message:
-----------
devel/valgrind-devel:
New port, valgrind trunk version with patches for Snow Leopard
Modified Paths:
--------------
trunk/dports/devel/valgrind-devel/Portfile
Added Paths:
-----------
trunk/dports/devel/valgrind-devel/
trunk/dports/devel/valgrind-devel/files/
trunk/dports/devel/valgrind-devel/files/patch-arc4random.diff
trunk/dports/devel/valgrind-devel/files/patch-sidt.diff
trunk/dports/devel/valgrind-devel/files/patch-signal.diff
trunk/dports/devel/valgrind-devel/files/patch-snow-leopard.diff
Modified: trunk/dports/devel/valgrind-devel/Portfile
===================================================================
--- trunk/dports/devel/valgrind/Portfile 2010-04-20 10:55:10 UTC (rev 66684)
+++ trunk/dports/devel/valgrind-devel/Portfile 2010-04-21 14:08:30 UTC (rev 66719)
@@ -2,8 +2,9 @@
PortSystem 1.0
-name valgrind
-version 3.5.0
+name valgrind-devel
+svn.tag 11104
+version 3.6.0-r${svn.tag}
categories devel
platforms darwin
maintainers raimue
@@ -14,19 +15,36 @@
attached to a program, it intercepts calls to malloc/new/free/delete and \
all memory operations are checked for invalid read or write.
homepage http://valgrind.org
-master_sites http://valgrind.org/downloads/
-use_bzip2 yes
depends_build bin:perl:perl5
# Ignore trace reports about boost, Qt and OpenMP
# as they are only used for tests
+fetch.type svn
+svn.url svn://svn.valgrind.org/valgrind/trunk
+svn.args --ignore-externals
+worksrcdir trunk
+
+post-fetch {
+ system "cd ${worksrcpath} && ${svn.cmd} ${svn.pre_args} ${svn.method} svn://svn.valgrind.org/vex/trunk@1965 VEX"
+}
+
+patchfiles patch-snow-leopard.diff \
+ patch-arc4random.diff \
+ patch-sidt.diff \
+ patch-signal.diff
+
+post-patch {
+ system "cd ${worksrcpath} && touch darwin10.supp darwin10-drd.supp"
+}
+
+use_autoreconf yes
configure.args --mandir=${prefix}/share/man \
--without-mpicc
-checksums md5 f03522a4687cf76c676c9494fcc0a517 \
- sha1 76678c2617278cc9fbda1232e4e56fb2a96b0eb8 \
- rmd160 dd0ca80d73daac774b9352fe7a07ab72aae767c9
+# valgrind sets up -arch by itself, adding our own interferes with the build
+configure.cc_archflags {}
+configure.ld_archflags {}
variant mpich2 description {Use mpich2 for MPI support} {
depends_lib-append port:mpich2
@@ -40,6 +58,4 @@
configure.args-append --with-mpicc=${prefix}/bin/mpicc
}
-livecheck.type regex
-livecheck.url ${homepage}
-livecheck.regex ${name}-(\\d(?:\\.\\d)+)
+livecheck.check none
Added: trunk/dports/devel/valgrind-devel/files/patch-arc4random.diff
===================================================================
--- trunk/dports/devel/valgrind-devel/files/patch-arc4random.diff (rev 0)
+++ trunk/dports/devel/valgrind-devel/files/patch-arc4random.diff 2010-04-21 14:08:30 UTC (rev 66719)
@@ -0,0 +1,26 @@
+--- coregrind/vg_preloaded.c
++++ coregrind/vg_preloaded.c
+@@ -151,17 +151,18 @@ static void vg_cleanup_env(void)
+ Darwin arc4random (rdar://6166275)
+ ------------------------------------------------------------------ */
+
+-#include <stdio.h>
++#include <fcntl.h>
++#include <unistd.h>
+
+ int VG_REPLACE_FUNCTION_ZU(libSystemZdZaZddylib, arc4random)(void);
+ int VG_REPLACE_FUNCTION_ZU(libSystemZdZaZddylib, arc4random)(void)
+ {
+- static FILE *rnd = 0;
++ static int rnd = -1;
+ int result;
+
+- if (!rnd) rnd = fopen("/dev/random", "r");
+-
+- fread(&result, sizeof(result), 1, rnd);
++ if (rnd < 0) rnd = open("/dev/random", O_RDONLY);
++
++ read(rnd, &result, sizeof(result));
+ return result;
+ }
+
Added: trunk/dports/devel/valgrind-devel/files/patch-sidt.diff
===================================================================
--- trunk/dports/devel/valgrind-devel/files/patch-sidt.diff (rev 0)
+++ trunk/dports/devel/valgrind-devel/files/patch-sidt.diff 2010-04-21 14:08:30 UTC (rev 66719)
@@ -0,0 +1,173 @@
+Index: priv/guest_x86_defs.h
+===================================================================
+--- VEX/priv/guest_x86_defs.h (revision 1965)
++++ VEX/priv/guest_x86_defs.h (working copy)
+@@ -164,6 +164,8 @@
+ extern void x86g_dirtyhelper_OUT ( UInt portno, UInt data,
+ UInt sz/*1,2 or 4*/ );
+
++void x86g_dirtyhelper_SxDT ( void* address, ULong op /* 0 or 1 */ );
++
+ extern VexEmWarn
+ x86g_dirtyhelper_FXRSTOR ( VexGuestX86State*, HWord );
+
+Index: priv/guest_amd64_helpers.c
+===================================================================
+--- VEX/priv/guest_amd64_helpers.c (revision 1965)
++++ VEX/priv/guest_amd64_helpers.c (working copy)
+@@ -2229,6 +2229,28 @@
+ # endif
+ }
+
++/* CALLED FROM GENERATED CODE */
++/* DIRTY HELPER (non-referentially-transparent) */
++/* Horrible hack. On non-amd64 platforms, do nothing. */
++/* op = 0: call the native SGDT instruction.
++ op = 1: call the native SIDT instruction.
++*/
++void amd64g_dirtyhelper_SxDT ( void *address, ULong op ) {
++# if defined(__x86_64__)
++ switch (op) {
++ case 0:
++ __asm__ __volatile__("sgdt %0" : "=m" (*address));
++ break;
++ case 1:
++ __asm__ __volatile__("sidt %0" : "=m" (*address));
++ break;
++ default:
++ break;
++ }
++# else
++ /* do nothing */
++# endif
++}
+
+ /*---------------------------------------------------------------*/
+ /*--- Helpers for MMX/SSE/SSE2. ---*/
+Index: priv/guest_amd64_toIR.c
+===================================================================
+--- VEX/priv/guest_amd64_toIR.c (revision 1965)
++++ VEX/priv/guest_amd64_toIR.c (working copy)
+@@ -16752,6 +16752,36 @@
+ DIP("{f}emms\n");
+ break;
+
++ /* =-=-=-=-=-=-=-=-=- SGDT and SIDT =-=-=-=-=-=-=-=-=-=-= */
++ case 0x01: /* 0F 01 /0 -- SGDT */
++ /* 0F 01 /1 -- SIDT */
++
++ modrm = getUChar(delta);
++ addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
++ delta += alen;
++ if (epartIsReg(modrm)) goto decode_failure;
++ if (gregLO3ofRM(modrm) != 0 && gregLO3ofRM(modrm) != 1)
++ goto decode_failure;
++ switch (gregLO3ofRM(modrm)) {
++ case 0: DIP("sgdt %p\n", addr); break;
++ case 1: DIP("sidt %p\n", addr); break;
++ default: vassert(0); /*NOTREACHED*/
++ }
++
++ IRDirty* d = unsafeIRDirty_0_N (
++ 0/*regparms*/,
++ "amd64g_dirtyhelper_SxDT",
++ &amd64g_dirtyhelper_SxDT,
++ mkIRExprVec_2( mkexpr(addr),
++ mkU64(gregLO3ofRM(modrm)) )
++ );
++ /* declare we're writing memory */
++ d->mFx = Ifx_Write;
++ d->mAddr = mkexpr(addr);
++ d->mSize = 6;
++ stmt( IRStmt_Dirty(d) );
++ break;
++
+ /* =-=-=-=-=-=-=-=-=- unimp2 =-=-=-=-=-=-=-=-=-=-= */
+
+ default:
+Index: priv/guest_amd64_defs.h
+===================================================================
+--- VEX/priv/guest_amd64_defs.h (revision 1965)
++++ VEX/priv/guest_amd64_defs.h (working copy)
+@@ -164,6 +164,7 @@
+ extern void amd64g_dirtyhelper_OUT ( ULong portno, ULong data,
+ ULong sz/*1,2 or 4*/ );
+
++void amd64g_dirtyhelper_SxDT ( void* address, ULong op /* 0 or 1 */ );
+ //extern void amd64g_dirtyhelper_CPUID_sse0 ( VexGuestAMD64State* );
+ //extern void amd64g_dirtyhelper_CPUID_sse1 ( VexGuestAMD64State* );
+ //extern void amd64g_dirtyhelper_CPUID_sse2 ( VexGuestAMD64State* );
+Index: priv/guest_x86_helpers.c
+===================================================================
+--- VEX/priv/guest_x86_helpers.c (revision 1965)
++++ VEX/priv/guest_x86_helpers.c (working copy)
+@@ -2364,6 +2364,28 @@
+ # endif
+ }
+
++/* CALLED FROM GENERATED CODE */
++/* DIRTY HELPER (non-referentially-transparent) */
++/* Horrible hack. On non-x86 platforms, do nothing. */
++/* op = 0: call the native SGDT instruction.
++ op = 1: call the native SIDT instruction.
++*/
++void x86g_dirtyhelper_SxDT ( void *address, ULong op ) {
++# if defined(__i386__)
++ switch (op) {
++ case 0:
++ __asm__ __volatile__("sgdt %0" : "=m" (*address));
++ break;
++ case 1:
++ __asm__ __volatile__("sidt %0" : "=m" (*address));
++ break;
++ default:
++ break;
++ }
++# else
++ /* do nothing */
++# endif
++}
+
+ /*---------------------------------------------------------------*/
+ /*--- Helpers for MMX/SSE/SSE2. ---*/
+Index: priv/guest_x86_toIR.c
+===================================================================
+--- VEX/priv/guest_x86_toIR.c (revision 1965)
++++ VEX/priv/guest_x86_toIR.c (working copy)
+@@ -14777,6 +14777,36 @@
+ DIP("emms\n");
+ break;
+
++ /* =-=-=-=-=-=-=-=-=- SGDT and SIDT =-=-=-=-=-=-=-=-=-=-= */
++ case 0x01: /* 0F 01 /0 -- SGDT */
++ /* 0F 01 /1 -- SIDT */
++
++ modrm = getUChar(delta);
++ addr = disAMode ( &alen, sorb, delta, dis_buf );
++ delta += alen;
++ if (epartIsReg(modrm)) goto decode_failure;
++ if (gregOfRM(modrm) != 0 && gregOfRM(modrm) != 1)
++ goto decode_failure;
++ switch (gregOfRM(modrm)) {
++ case 0: DIP("sgdt %p\n", addr); break;
++ case 1: DIP("sidt %p\n", addr); break;
++ default: vassert(0); /*NOTREACHED*/
++ }
++
++ IRDirty* d = unsafeIRDirty_0_N (
++ 0/*regparms*/,
++ "x86g_dirtyhelper_SxDT",
++ &x86g_dirtyhelper_SxDT,
++ mkIRExprVec_2( mkexpr(addr),
++ mkU64(gregOfRM(modrm)) )
++ );
++ /* declare we're writing memory */
++ d->mFx = Ifx_Write;
++ d->mAddr = mkexpr(addr);
++ d->mSize = 6;
++ stmt( IRStmt_Dirty(d) );
++ break;
++
+ /* =-=-=-=-=-=-=-=-=- unimp2 =-=-=-=-=-=-=-=-=-=-= */
+
+ default:
Added: trunk/dports/devel/valgrind-devel/files/patch-signal.diff
===================================================================
--- trunk/dports/devel/valgrind-devel/files/patch-signal.diff (rev 0)
+++ trunk/dports/devel/valgrind-devel/files/patch-signal.diff 2010-04-21 14:08:30 UTC (rev 66719)
@@ -0,0 +1,12 @@
+diff -Naur valgrind_ori/coregrind/m_signals.c valgrind/coregrind/m_signals.c
+--- coregrind/m_signals.c 2010-04-19 14:02:22.000000000 +0200
++++ coregrind/m_signals.c 2010-04-19 14:03:50.000000000 +0200
+@@ -2546,7 +2546,7 @@
+ /* Get the old host action */
+ ret = VG_(sigaction)(i, NULL, &sa);
+
+-# if defined(VGP_x86_darwin)
++# if defined(VGP_x86_darwin) || defined(VGP_amd64_darwin)
+ /* apparently we may not even ask about the disposition of these
+ signals, let alone change them */
+ if (ret != 0 && (i == VKI_SIGKILL || i == VKI_SIGSTOP))
Added: trunk/dports/devel/valgrind-devel/files/patch-snow-leopard.diff
===================================================================
--- trunk/dports/devel/valgrind-devel/files/patch-snow-leopard.diff (rev 0)
+++ trunk/dports/devel/valgrind-devel/files/patch-snow-leopard.diff 2010-04-21 14:08:30 UTC (rev 66719)
@@ -0,0 +1,1053 @@
+Index: Makefile.all.am
+===================================================================
+--- Makefile.all.am (revision 11026)
++++ Makefile.all.am (working copy)
+@@ -88,6 +88,7 @@
+ -Wpointer-arith \
+ -Wstrict-prototypes \
+ -Wmissing-declarations \
++ -Wno-pointer-sign \
+ @FLAG_W_NO_FORMAT_ZERO_LENGTH@ \
+ -fno-strict-aliasing
+
+Index: mpi/Makefile.am
+===================================================================
+--- mpi/Makefile.am (revision 11026)
++++ mpi/Makefile.am (working copy)
+@@ -56,15 +56,15 @@
+
+
+ if BUILD_MPIWRAP_PRI
+-libmpiwrap_ at VGCONF_ARCH_PRI@_ at VGCONF_OS@_so_SOURCES = libmpiwrap.c
+-libmpiwrap_ at VGCONF_ARCH_PRI@_ at VGCONF_OS@_so_CPPFLAGS = -I../include
++libmpiwrap_ at VGCONF_ARCH_PRI@_ at VGCONF_OS@_so_SOURCES = $(srcdir)/libmpiwrap.c
++libmpiwrap_ at VGCONF_ARCH_PRI@_ at VGCONF_OS@_so_CPPFLAGS = -I$(srcdir)/../include
+ libmpiwrap_ at VGCONF_ARCH_PRI@_ at VGCONF_OS@_so_CFLAGS = \
+ $(CFLAGS_MPI) $(MPI_FLAG_M3264_PRI)
+ libmpiwrap_ at VGCONF_ARCH_PRI@_ at VGCONF_OS@_so_LDFLAGS = $(LDFLAGS_MPI)
+ endif
+ if BUILD_MPIWRAP_SEC
+-libmpiwrap_ at VGCONF_ARCH_SEC@_ at VGCONF_OS@_so_SOURCES = libmpiwrap.c
+-libmpiwrap_ at VGCONF_ARCH_SEC@_ at VGCONF_OS@_so_CPPFLAGS = -I../include
++libmpiwrap_ at VGCONF_ARCH_SEC@_ at VGCONF_OS@_so_SOURCES = $(srcdir)/libmpiwrap.c
++libmpiwrap_ at VGCONF_ARCH_SEC@_ at VGCONF_OS@_so_CPPFLAGS = -I$(srcdir)/../include
+ libmpiwrap_ at VGCONF_ARCH_SEC@_ at VGCONF_OS@_so_CFLAGS = \
+ $(CFLAGS_MPI) $(MPI_FLAG_M3264_SEC)
+ libmpiwrap_ at VGCONF_ARCH_SEC@_ at VGCONF_OS@_so_LDFLAGS = $(LDFLAGS_MPI)
+Index: include/vki/vki-darwin.h
+===================================================================
+--- include/vki/vki-darwin.h (revision 11026)
++++ include/vki/vki-darwin.h (working copy)
+@@ -792,6 +792,11 @@
+ typedef struct eventreq vki_eventreq;
+
+
++#include <sys/acl.h>
++
++#define vki_kauth_filesec kauth_filesec
++
++
+ #include <sys/ptrace.h>
+
+ #define VKI_PTRACE_TRACEME PT_TRACE_ME
+@@ -1021,6 +1026,10 @@
+ #define VKI_A_GETPINFO_ADDR A_GETPINFO_ADDR
+ #define VKI_A_GETKAUDIT A_GETKAUDIT
+ #define VKI_A_SETKAUDIT A_SETKAUDIT
++#if DARWIN_VERS >= DARWIN_10_6
++#define VKI_A_SENDTRIGGER A_SENDTRIGGER
++#define VKI_A_GETSINFO_ADDR A_GETSINFO_ADDR
++#endif
+
+
+ #include <sys/aio.h>
+Index: include/vki/vki-scnums-darwin.h
+===================================================================
+--- include/vki/vki-scnums-darwin.h (revision 11026)
++++ include/vki/vki-scnums-darwin.h (working copy)
+@@ -32,6 +32,9 @@
+ #define __VKI_SCNUMS_DARWIN_H
+
+
++// need DARWIN_10_x definitions
++#include "config.h"
++
+ // osfmk/mach/i386/syscall_sw.h
+
+ // There are two syscall number encodings in Darwin.
+@@ -376,7 +379,11 @@
+ #define __NR_sigreturn VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(184)
+ #define __NR_chud VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(185)
+ /* 186 */
++#if DARWIN_VERS >= DARWIN_10_6
++#define __NR_fdatasync VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(187)
++#else
+ /* 187 */
++#endif
+ #define __NR_stat VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(188)
+ #define __NR_fstat VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(189)
+ #define __NR_lstat VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(190)
+@@ -403,8 +410,13 @@
+ #define __NR_ATPgetreq VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(211)
+ #define __NR_ATPgetrsp VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(212)
+ /* 213 Reserved for AppleTalk */
+-#define __NR_kqueue_from_portset_np VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(214)
+-#define __NR_kqueue_portset_np VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(215)
++#if DARWIN_VERS >= DARWIN_10_6
++ /* 214 old kqueue_from_portset_np*/
++ /* 215 old kqueue_portset_np*/
++#else
++#define __NR_kqueue_from_portset_np VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(214)
++#define __NR_kqueue_portset_np VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(215)
++#endif
+ #define __NR_mkcomplex VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(216)
+ #define __NR_statv VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(217)
+ #define __NR_lstatv VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(218)
+@@ -413,12 +425,17 @@
+ #define __NR_setattrlist VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(221)
+ #define __NR_getdirentriesattr VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(222)
+ #define __NR_exchangedata VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(223)
+- /* 224 checkuseraccess */
++ /* 224 old checkuseraccess */
+ #define __NR_searchfs VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(225)
+ #define __NR_delete VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(226)
+ #define __NR_copyfile VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(227)
++#if DARWIN_VERS >= DARWIN_10_6
++#define __NR_fgetattrlist VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(228)
++#define __NR_fsetattrlist VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(229)
++#else
+ /* 228 */
+ /* 229 */
++#endif
+ #define __NR_poll VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(230)
+ #define __NR_watchevent VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(231)
+ #define __NR_waitevent VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(232)
+@@ -434,7 +451,11 @@
+ #define __NR_fsctl VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(242)
+ #define __NR_initgroups VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(243)
+ #define __NR_posix_spawn VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(244)
++#if DARWIN_VERS >= DARWIN_10_6
++#define __NR_ffsctl VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(245)
++#else
+ /* 245 */
++#endif
+ /* 246 */
+ #define __NR_nfsclnt VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(247)
+ #define __NR_fhopen VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(248)
+@@ -485,23 +506,27 @@
+ #define __NR_identitysvc VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(293)
+ #define __NR_shared_region_check_np VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(294)
+ #define __NR_shared_region_map_np VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(295)
++#if DARWIN_VERS >= DARWIN_10_6
++#define __NR_vm_pressure_monitor VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(296)
++#else
+ /* 296 old load_shared_file */
++#endif
+ /* 297 old reset_shared_file */
+ /* 298 old new_system_shared_regions */
+ /* 299 old shared_region_map_file_np */
+ /* 300 old shared_region_make_private_np */
+-#define __NR___pthread_mutex_destroy VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(301)
+-#define __NR___pthread_mutex_init VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(302)
+-#define __NR___pthread_mutex_lock VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(303)
+-#define __NR___pthread_mutex_trylock VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(304)
+-#define __NR___pthread_mutex_unlock VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(305)
+-#define __NR___pthread_cond_init VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(306)
+-#define __NR___pthread_cond_destroy VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(307)
+-#define __NR___pthread_cond_broadcast VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(308)
+-#define __NR___pthread_cond_signal VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(309)
++ /* 301 */
++ /* 302 */
++ /* 303 */
++ /* 304 */
++ /* 305 */
++ /* 306 */
++ /* 307 */
++ /* 308 */
++ /* 309 */
+ #define __NR_getsid VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(310)
+ #define __NR_settid_with_pid VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(311)
+-#define __NR___pthread_cond_timedwait VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(312)
++ /* 312 */
+ #define __NR_aio_fsync VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(313)
+ #define __NR_aio_return VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(314)
+ #define __NR_aio_suspend VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(315)
+@@ -510,7 +535,7 @@
+ #define __NR_aio_read VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(318)
+ #define __NR_aio_write VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(319)
+ #define __NR_lio_listio VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(320)
+-#define __NR___pthread_cond_wait VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(321)
++ /* 321 */
+ #define __NR_iopolicysys VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(322)
+ /* 323 */
+ #define __NR_mlockall VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(324)
+@@ -559,10 +584,18 @@
+ #define __NR_bsdthread_register VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(366)
+ #define __NR_workq_open VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(367)
+ #define __NR_workq_ops VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(368)
++#if DARWIN_VERS >= DARWIN_10_6
++#define __NR_kevent64 VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(369)
++#else
+ /* 369 */
++#endif
+ /* 370 */
+ /* 371 */
++#if DARWIN_VERS >= DARWIN_10_6
++#define __NR___thread_selfid VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(372) // was UX64
++#else
+ /* 372 */
++#endif
+ /* 373 */
+ /* 374 */
+ /* 375 */
+@@ -617,7 +650,19 @@
+ #define __NR___mac_mount VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(424)
+ #define __NR___mac_get_mount VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(425)
+ #define __NR___mac_getfsstat VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(426)
++#if DARWIN_VERS >= DARWIN_10_6
++#define __NR_fsgetpath VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(427)
++#define __NR_audit_session_self VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(428)
++#define __NR_audit_session_join VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(429)
++#endif
++
++#if DARWIN_VERS < DARWIN_10_6
+ #define __NR_MAXSYSCALL VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(427)
++#elif DARWIN_VERSION < DARWIN_10_7
++#define __NR_MAXSYSCALL VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(430)
++#else
++#error unknown darwin version
++#endif
+
+ #define __NR_DARWIN_FAKE_SIGRETURN (1 + __NR_MAXSYSCALL)
+
+Index: configure.in
+===================================================================
+--- configure.in (revision 11026)
++++ configure.in (working copy)
+@@ -252,6 +252,9 @@
+ *darwin*)
+ AC_MSG_RESULT([ok (${host_os})])
+ VGCONF_OS="darwin"
++ AC_DEFINE([DARWIN_10_5], 100500, [DARWIN_VERS value for Mac OS X 10.5])
++ AC_DEFINE([DARWIN_10_6], 100600, [DARWIN_VERS value for Mac OS X 10.6])
++ AC_DEFINE([DARWIN_10_7], 100700, [DARWIN_VERS value for Mac OS X 10.7])
+
+ AC_MSG_CHECKING([for the kernel version])
+ kernel=`uname -r`
+@@ -259,21 +262,27 @@
+ # Nb: for Darwin we set DEFAULT_SUPP here. That's because Darwin
+ # has only one relevant version, the OS version. The `uname` check
+ # is a good way to get that version (i.e. "Darwin 9.6.0" is Mac OS
+- # X 10.5.6, and "Darwin 10.x" would presumably be Mac OS X 10.6.x
+- # Snow Leopard and darwin10.supp), and we don't know of an macros
+- # similar to __GLIBC__ to get that info.
++ # X 10.5.6, and "Darwin 10.x" is Mac OS X 10.6.x Snow Leopard),
++ # and we don't know of an macros similar to __GLIBC__ to get that info.
+ #
+ # XXX: `uname -r` won't do the right thing for cross-compiles, but
+ # that's not a problem yet.
+ case "${kernel}" in
+ 9.*)
+ AC_MSG_RESULT([Darwin 9.x (${kernel}) / Mac OS X 10.5 Leopard])
++ AC_DEFINE([DARWIN_VERS], DARWIN_10_5, [Darwin / Mac OS X version])
+ DEFAULT_SUPP="darwin9.supp ${DEFAULT_SUPP}"
+ DEFAULT_SUPP="darwin9-drd.supp ${DEFAULT_SUPP}"
+ ;;
++ 10.*)
++ AC_MSG_RESULT([Darwin 10.x (${kernel}) / Mac OS X 10.6 Snow Leopard])
++ AC_DEFINE([DARWIN_VERS], DARWIN_10_6, [Darwin / Mac OS X version])
++ DEFAULT_SUPP="darwin10.supp ${DEFAULT_SUPP}"
++ DEFAULT_SUPP="darwin10-drd.supp ${DEFAULT_SUPP}"
++ ;;
+ *)
+ AC_MSG_RESULT([unsupported (${kernel})])
+- AC_MSG_ERROR([Valgrind works on Darwin 9.x (Mac OS X 10.5)])
++ AC_MSG_ERROR([Valgrind works on Darwin 9.x and 10.x (Mac OS X 10.5 and 10.6)])
+ ;;
+ esac
+ ;;
+Index: auxprogs/Makefile.am
+===================================================================
+--- auxprogs/Makefile.am (revision 11026)
++++ auxprogs/Makefile.am (working copy)
+@@ -29,4 +29,3 @@
+ valgrind_listener_CFLAGS = $(AM_CFLAGS_PRI)
+ valgrind_listener_CCASFLAGS = $(AM_CCASFLAGS_PRI)
+ valgrind_listener_LDFLAGS = $(AM_CFLAGS_PRI)
+-
+Index: Makefile.am
+===================================================================
+--- Makefile.am (revision 11026)
++++ Makefile.am (working copy)
+@@ -26,6 +26,8 @@
+
+ # Put docs last because building the HTML is slow and we want to get
+ # everything else working before we try it.
++# GrP SnowLeopard:
++# mpi
+ SUBDIRS = \
+ include \
+ VEX \
+@@ -36,7 +38,6 @@
+ tests \
+ perf \
+ auxprogs \
+- mpi \
+ docs
+ DIST_SUBDIRS = $(SUBDIRS)
+
+@@ -48,7 +49,8 @@
+ glibc-2.2-LinuxThreads-helgrind.supp \
+ glibc-2.X-drd.supp \
+ exp-ptrcheck.supp \
+- darwin9.supp darwin9-drd.supp
++ darwin9.supp darwin9-drd.supp \
++ darwin10.supp darwin10-drd.supp
+ DEFAULT_SUPP_FILES = @DEFAULT_SUPP@
+
+ # We include all the base .supp files in the distribution, but not
+@@ -63,10 +65,10 @@
+ BUILT_SOURCES = default.supp valgrind.pc
+ CLEANFILES = default.supp
+
+-default.supp: $(DEFAULT_SUPP_FILES)
++default.supp: $(addprefix $(srcdir)/,$(DEFAULT_SUPP_FILES))
+ echo "# This is a generated file, composed of the following suppression rules:" > default.supp
+ echo "# " $(DEFAULT_SUPP_FILES) >> default.supp
+- cat $(DEFAULT_SUPP_FILES) >> default.supp
++ cat $(addprefix $(srcdir)/,$(DEFAULT_SUPP_FILES)) >> default.supp
+
+ ## Preprend @PERL@ because tests/vg_regtest isn't executable
+ regtest: check
+Index: darwin9-drd.supp
+===================================================================
+--- darwin9-drd.supp (revision 11026)
++++ darwin9-drd.supp (working copy)
+@@ -1,3 +1,6 @@
++
++# DRD suppressions for Darwin 9.x / Mac OS X 10.5 Leopard
++
+ #
+ # Suppression patterns for dyld, the dynamic loader.
+ #
+Index: coregrind/m_syswrap/priv_syswrap-darwin.h
+===================================================================
+--- coregrind/m_syswrap/priv_syswrap-darwin.h (revision 11026)
++++ coregrind/m_syswrap/priv_syswrap-darwin.h (working copy)
+@@ -429,7 +429,7 @@
+ // 369
+ // 370
+ // 371
+-// 372
++DECL_TEMPLATE(darwin, __thread_selfid); // 372
+ // 373
+ // 374
+ // 375
+@@ -484,6 +484,9 @@
+ // NYI __mac_mount 424
+ // NYI __mac_get_mount 425
+ // NYI __mac_getfsstat 426
++DECL_TEMPLATE(darwin, fsgetpath); // 427
++// NYI audit_session_self 428
++// NYI audit_session_join 429
+
+ // Mach message helpers
+ DECL_TEMPLATE(darwin, host_info);
+@@ -498,9 +501,11 @@
+ DECL_TEMPLATE(darwin, mach_port_get_refs);
+ DECL_TEMPLATE(darwin, mach_port_mod_refs);
+ DECL_TEMPLATE(darwin, mach_port_get_set_status);
++DECL_TEMPLATE(darwin, mach_port_move_member);
+ DECL_TEMPLATE(darwin, mach_port_destroy);
+ DECL_TEMPLATE(darwin, mach_port_request_notification);
+ DECL_TEMPLATE(darwin, mach_port_insert_right);
++DECL_TEMPLATE(darwin, mach_port_extract_right);
+ DECL_TEMPLATE(darwin, mach_port_get_attributes);
+ DECL_TEMPLATE(darwin, mach_port_set_attributes);
+ DECL_TEMPLATE(darwin, mach_port_insert_member);
+@@ -537,6 +542,7 @@
+ DECL_TEMPLATE(darwin, thread_suspend);
+ DECL_TEMPLATE(darwin, thread_get_state);
+ DECL_TEMPLATE(darwin, thread_policy);
++DECL_TEMPLATE(darwin, thread_policy_set);
+ DECL_TEMPLATE(darwin, thread_info);
+ DECL_TEMPLATE(darwin, bootstrap_register);
+ DECL_TEMPLATE(darwin, bootstrap_look_up);
+Index: coregrind/m_syswrap/syswrap-amd64-darwin.c
+===================================================================
+--- coregrind/m_syswrap/syswrap-amd64-darwin.c (revision 11026)
++++ coregrind/m_syswrap/syswrap-amd64-darwin.c (working copy)
+@@ -378,7 +378,23 @@
+ VexGuestAMD64State *vex;
+ Addr stack;
+ SizeT stacksize;
++ vki_sigset_t blockall;
+
++ /* When we enter here we hold no lock (!), so we better acquire it
++ pronto. Why do we hold no lock? Because (presumably) the only
++ way to get here is as a result of a SfMayBlock syscall
++ "workq_ops(WQOPS_THREAD_RETURN)", which will have dropped the
++ lock. At least that's clear for the 'reuse' case. The
++ non-reuse case? Dunno, perhaps it's a new thread the kernel
++ pulled out of a hat. In any case we still need to take a
++ lock. */
++ VG_(acquire_BigLock_LL)("wqthread_hijack");
++
++ /* Start the thread with all signals blocked. VG_(scheduler) will
++ set the mask correctly when we finally get there. */
++ VG_(sigfillset)(&blockall);
++ VG_(sigprocmask)(VKI_SIG_SETMASK, &blockall, NULL);
++
+ if (reuse) {
+ // This thread already exists; we're merely re-entering
+ // after leaving via workq_ops(WQOPS_THREAD_RETURN).
+@@ -418,6 +434,15 @@
+ if (reuse) {
+ // Continue V's thread back in the scheduler.
+ // The client thread is of course in another location entirely.
++
++ /* Drop the lock before going into
++ ML_(wqthread_continue_NORETURN). The latter will immediately
++ attempt to reacquire it in non-LL mode, which is a bit
++ wasteful but I don't think is harmful. A better solution
++ would be to not drop the lock but instead "upgrade" it from a
++ LL lock to a full lock, but that's too much like hard work
++ right now. */
++ VG_(release_BigLock_LL)("wqthread_hijack(1)");
+ ML_(wqthread_continue_NORETURN)(tst->tid);
+ }
+ else {
+@@ -450,6 +475,16 @@
+ VG_(am_do_sync_check)("after", "wqthread_hijack", 0);
+
+ // Go!
++ /* Same comments as the 'release' in the then-clause.
++ start_thread_NORETURN calls run_thread_NORETURN calls
++ thread_wrapper which acquires the lock before continuing.
++ Let's hope nothing non-thread-local happens until that point.
++
++ DDD: I think this is plain wrong .. if we get to
++ thread_wrapper not holding the lock, and someone has recycled
++ this thread slot in the meantime, we're hosed. Is that
++ possible, though? */
++ VG_(release_BigLock_LL)("wqthread_hijack(2)");
+ call_on_new_stack_0_1(tst->os_state.valgrind_stack_init_SP, 0,
+ start_thread_NORETURN, (Word)tst);
+ }
+Index: coregrind/m_syswrap/priv_syswrap-generic.h
+===================================================================
+--- coregrind/m_syswrap/priv_syswrap-generic.h (revision 11026)
++++ coregrind/m_syswrap/priv_syswrap-generic.h (working copy)
+@@ -200,7 +200,7 @@
+ DECL_TEMPLATE(generic, sys_getrlimit); // * (?)
+ DECL_TEMPLATE(generic, sys_truncate64); // %% (P?)
+ DECL_TEMPLATE(generic, sys_ftruncate64); // %% (P?)
+-DECL_TEMPLATE(generic, sys_lchown); // * (L?)
++DECL_TEMPLATE(generic, sys_lchown); // * (L?) FreeBSD 3.0
+ DECL_TEMPLATE(generic, sys_mincore); // * L?
+ DECL_TEMPLATE(generic, sys_getdents64); // * (SVr4,SVID?)
+ DECL_TEMPLATE(generic, sys_statfs64); // * (?)
+Index: coregrind/m_syswrap/syswrap-darwin.c
+===================================================================
+--- coregrind/m_syswrap/syswrap-darwin.c (revision 11026)
++++ coregrind/m_syswrap/syswrap-darwin.c (working copy)
+@@ -66,7 +66,6 @@
+ #include <mach/mach.h>
+ #include <mach/mach_vm.h>
+ #include <semaphore.h>
+-#include <sys/acl.h> /* struct kauth_filesec */
+ /* --- !!! --- EXTERNAL HEADERS end --- !!! --- */
+
+ #define msgh_request_port msgh_remote_port
+@@ -1240,7 +1239,9 @@
+ {
+ PRINT("futimes ( %ld, %#lx )", ARG1,ARG2);
+ PRE_REG_READ2(long, "futimes", int, fd, struct timeval *, tvp);
+- if (ARG2 != 0) {
++ if (!ML_(fd_allowed)(ARG1, "futimes", tid, False)) {
++ SET_STATUS_Failure( VKI_EBADF );
++ } else if (ARG2 != 0) {
+ PRE_timeval_READ( "futimes(tvp[0])", ARG2 );
+ PRE_timeval_READ( "futimes(tvp[1])", ARG2+sizeof(struct vki_timeval) );
+ }
+@@ -1635,10 +1636,12 @@
+ {
+ PRINT("kdebug_trace(%ld, %ld, %ld, %ld, %ld, %ld)",
+ ARG1, ARG2, ARG3, ARG4, ARG5, ARG6);
++ /*
++ Don't check anything - some clients pass fewer arguments.
+ PRE_REG_READ6(long, "kdebug_trace",
+ int,"code", int,"arg1", int,"arg2",
+ int,"arg3", int,"arg4", int,"arg5");
+- // GrP fixme anything else?
++ */
+ }
+
+
+@@ -2018,7 +2021,7 @@
+ is just way wrong. [The trouble is with the size, which depends on a
+ non-trival kernel computation] */
+ PRE_MEM_READ( "fchmod_extended(xsecurity)", ARG5,
+- sizeof(struct kauth_filesec) );
++ sizeof(struct vki_kauth_filesec) );
+ }
+
+ PRE(chmod_extended)
+@@ -2038,7 +2041,7 @@
+ is just way wrong. [The trouble is with the size, which depends on a
+ non-trival kernel computation] */
+ PRE_MEM_READ( "chmod_extended(xsecurity)", ARG5,
+- sizeof(struct kauth_filesec) );
++ sizeof(struct vki_kauth_filesec) );
+ }
+
+
+@@ -2241,6 +2244,9 @@
+ } attrspec;
+ static const attrspec commonattr[] = {
+ // This order is important.
++#if DARWIN_VERS >= DARWIN_10_6
++ { ATTR_CMN_RETURNED_ATTRS, sizeof(attribute_set_t) },
++#endif
+ { ATTR_CMN_NAME, -1 },
+ { ATTR_CMN_DEVID, sizeof(dev_t) },
+ { ATTR_CMN_FSID, sizeof(fsid_t) },
+@@ -2263,8 +2269,14 @@
+ { ATTR_CMN_NAMEDATTRLIST, -1 },
+ { ATTR_CMN_FLAGS, sizeof(uint32_t) },
+ { ATTR_CMN_USERACCESS, sizeof(uint32_t) },
++ { ATTR_CMN_EXTENDED_SECURITY, -1 },
++ { ATTR_CMN_UUID, sizeof(guid_t) },
++ { ATTR_CMN_GRPUUID, sizeof(guid_t) },
+ { ATTR_CMN_FILEID, sizeof(uint64_t) },
+ { ATTR_CMN_PARENTID, sizeof(uint64_t) },
++#if DARWIN_VERS >= DARWIN_10_6
++ { ATTR_CMN_FULLPATH, -1 },
++#endif
+ { 0, 0 }
+ };
+ static const attrspec volattr[] = {
+@@ -2288,6 +2300,9 @@
+ { ATTR_VOL_MOUNTEDDEVICE, -1 },
+ { ATTR_VOL_ENCODINGSUSED, sizeof(uint64_t) },
+ { ATTR_VOL_CAPABILITIES, sizeof(vol_capabilities_attr_t) },
++#if DARWIN_VERS >= DARWIN_10_6
++ { ATTR_VOL_UUID, sizeof(uuid_t) },
++#endif
+ { ATTR_VOL_ATTRIBUTES, sizeof(vol_attributes_attr_t) },
+ { 0, 0 }
+ };
+@@ -2336,6 +2351,16 @@
+ d = attrBuf;
+ dend = d + attrBufSize;
+
++#if DARWIN_VERS >= DARWIN_10_6
++ // ATTR_CMN_RETURNED_ATTRS tells us what's really here, if set
++ if (a[0] & ATTR_CMN_RETURNED_ATTRS) {
++ // fixme range check this?
++ a[0] &= ~ATTR_CMN_RETURNED_ATTRS;
++ fn(tid, d, sizeof(attribute_set_t));
++ VG_(memcpy)(a, d, sizeof(a));
++ }
++#endif
++
+ for (g = 0; g < 5; g++) {
+ for (i = 0; attrdefs[g][i].attrBit; i++) {
+ uint32_t bit = attrdefs[g][i].attrBit;
+@@ -2398,10 +2423,15 @@
+ POST(getattrlist)
+ {
+ if (ARG4 > sizeof(vki_uint32_t)) {
+- // attrBuf is uint32_t bytes written followed by attr data
++ // attrBuf is uint32_t size followed by attr data
+ vki_uint32_t *sizep = (vki_uint32_t *)ARG3;
+ POST_MEM_WRITE(ARG3, sizeof(vki_uint32_t));
+- scan_attrlist(tid, (struct vki_attrlist *)ARG2, sizep+1, *sizep, &get1attr);
++ if (ARG5 & FSOPT_REPORT_FULLSIZE) {
++ // *sizep is bytes required for return value, including *sizep
++ } else {
++ // *sizep is actual bytes returned, including *sizep
++ }
++ scan_attrlist(tid, (struct vki_attrlist *)ARG2, sizep+1, MIN(*sizep, ARG4), &get1attr);
+ }
+ }
+
+@@ -2457,10 +2487,36 @@
+
+ POST_MEM_WRITE(ARG3, p - (char *)ARG3);
+
+- PRINT("got %d records, %d/%lu bytes\n", count, p-(char *)ARG3, ARG4);
++ PRINT("got %d records, %ld/%lu bytes\n", count, p-(char *)ARG3, ARG4);
+ }
+
+
++PRE(fsgetpath)
++{
++#if VG_WORDSIZE == 4
++ PRINT("fsgetpath(%#lx, %ld, %#lx {%lu,%lu}, %llu)",
++ ARG1, ARG2, ARG3, ((unsigned int *)ARG3)[0], ((unsigned int *)ARG3)[1], LOHI64(ARG4, ARG5));
++ PRE_REG_READ5(ssize_t, "fsgetpath",
++ void*,"buf", size_t,"bufsize",
++ fsid_t *,"fsid",
++ vki_uint32_t, "objid_low32", vki_uint32_t, "objid_high32");
++#else
++ PRINT("fsgetpath(%#lx, %ld, %#lx {%u,%u}, %llu)",
++ ARG1, ARG2, ARG3, ((unsigned int *)ARG3)[0], ((unsigned int *)ARG3)[1], ARG4);
++ PRE_REG_READ4(ssize_t, "fsgetpath",
++ void*,"buf", size_t,"bufsize",
++ fsid_t *,"fsid", uint64_t,"objid");
++#endif
++ PRE_MEM_READ("fsgetpath(fsid)", ARG3, sizeof(fsid_t));
++ PRE_MEM_WRITE("fsgetpath(buf)", ARG1, ARG2);
++}
++
++POST(fsgetpath)
++{
++ POST_MEM_WRITE(ARG1, RES);
++}
++
++
+ PRE(exchangedata)
+ {
+ PRINT("exchangedata(%#lx(%s), %#lx(%s), %lu)",
+@@ -3248,6 +3304,9 @@
+ case VKI_A_SETCLASS:
+ case VKI_A_SETPMASK:
+ case VKI_A_SETFSIZE:
++#if DARWIN_VERS >= DARWIN_10_6
++ case VKI_A_SENDTRIGGER:
++#endif
+ // kernel reads data..data+length
+ PRE_MEM_READ("auditon(data)", ARG2, ARG3);
+ break;
+@@ -3266,6 +3325,9 @@
+ case VKI_A_GETCLASS:
+ case VKI_A_GETPINFO:
+ case VKI_A_GETPINFO_ADDR:
++#if DARWIN_VERS >= DARWIN_10_6
++ case VKI_A_GETSINFO_ADDR:
++#endif
+ // kernel reads and writes data..data+length
+ // GrP fixme be precise about what gets read and written
+ PRE_MEM_READ("auditon(data)", ARG2, ARG3);
+@@ -3299,6 +3361,9 @@
+ case VKI_A_SETCLASS:
+ case VKI_A_SETPMASK:
+ case VKI_A_SETFSIZE:
++#if DARWIN_VERS >= DARWIN_10_6
++ case VKI_A_SENDTRIGGER:
++#endif
+ // kernel reads data..data+length
+ break;
+
+@@ -3316,6 +3381,9 @@
+ case VKI_A_GETCLASS:
+ case VKI_A_GETPINFO:
+ case VKI_A_GETPINFO_ADDR:
++#if DARWIN_VERS >= DARWIN_10_6
++ case VKI_A_GETSINFO_ADDR:
++#endif
+ // kernel reads and writes data..data+length
+ // GrP fixme be precise about what gets read and written
+ POST_MEM_WRITE(ARG2, ARG3);
+@@ -4384,6 +4452,51 @@
+ }
+
+
++PRE(mach_port_move_member)
++{
++#pragma pack(4)
++ typedef struct {
++ mach_msg_header_t Head;
++ NDR_record_t NDR;
++ mach_port_name_t member;
++ mach_port_name_t after;
++ } Request;
++#pragma pack()
++
++ Request *req = (Request *)ARG1;
++
++ PRINT("mach_port_move_member(%s, %s, %s)",
++ name_for_port(MACH_REMOTE),
++ name_for_port(req->member),
++ name_for_port(req->after));
++ /*
++ MACH_ARG(mach_port_move_member.member) = req->member;
++ MACH_ARG(mach_port_move_member.after) = req->after;
++ */
++ AFTER = POST_FN(mach_port_move_member);
++}
++
++POST(mach_port_move_member)
++{
++#pragma pack(4)
++ typedef struct {
++ mach_msg_header_t Head;
++ NDR_record_t NDR;
++ kern_return_t RetCode;
++ mach_msg_trailer_t trailer;
++ } Reply;
++#pragma pack()
++
++ Reply *reply = (Reply *)ARG1;
++
++ if (!reply->RetCode) {
++ // fixme port set tracker?
++ } else {
++ PRINT("mig return %d", reply->RetCode);
++ }
++}
++
++
+ PRE(mach_port_destroy)
+ {
+ #pragma pack(4)
+@@ -4504,6 +4617,34 @@
+ }
+
+
++PRE(mach_port_extract_right)
++{
++#pragma pack(4)
++ typedef struct {
++ mach_msg_header_t Head;
++ NDR_record_t NDR;
++ mach_port_name_t name;
++ mach_msg_type_name_t msgt_name;
++ } Request;
++#pragma pack()
++
++ Request *req = (Request *)ARG1;
++
++ PRINT("mach_port_extract_right(%s, %s, %d)",
++ name_for_port(MACH_REMOTE),
++ name_for_port(req->name), req->msgt_name);
++
++ AFTER = POST_FN(mach_port_extract_right);
++
++ // fixme port tracker?
++}
++
++POST(mach_port_extract_right)
++{
++ // fixme import_complex_message handles the returned result, right?
++}
++
++
+ PRE(mach_port_get_attributes)
+ {
+ #pragma pack(4)
+@@ -6092,6 +6233,7 @@
+
+ // GrP fixme semaphore destroy needed when thread creation fails
+ // GrP fixme probably other cleanup too
++ // GrP fixme spinlocks might be good enough?
+
+ // DDD: I'm not at all sure this is the right spot for this. It probably
+ // should be in pthread_hijack instead, just before the call to
+@@ -6210,10 +6352,6 @@
+ }
+
+
+-POST(thread_policy)
+-{
+-}
+-
+ PRE(thread_policy)
+ {
+ mach_msg_header_t *mh = (mach_msg_header_t *)ARG1;
+@@ -6228,7 +6366,25 @@
+ AFTER = POST_FN(thread_policy);
+ }
+
++POST(thread_policy)
++{
++}
+
++
++PRE(thread_policy_set)
++{
++ mach_msg_header_t *mh = (mach_msg_header_t *)ARG1;
++
++ PRINT("thread_policy_set(%s, ...)", name_for_port(mh->msgh_request_port));
++
++ AFTER = POST_FN(thread_policy_set);
++}
++
++POST(thread_policy_set)
++{
++}
++
++
+ PRE(thread_info)
+ {
+ mach_msg_header_t *mh = (mach_msg_header_t *)ARG1;
+@@ -6455,12 +6611,18 @@
+ case 3211:
+ CALL_PRE(mach_port_get_set_status);
+ return;
++ case 3212:
++ CALL_PRE(mach_port_move_member);
++ return;
+ case 3213:
+ CALL_PRE(mach_port_request_notification);
+ return;
+ case 3214:
+ CALL_PRE(mach_port_insert_right);
+ return;
++ case 3215:
++ CALL_PRE(mach_port_extract_right);
++ return;
+ case 3217:
+ CALL_PRE(mach_port_get_attributes);
+ return;
+@@ -6602,6 +6764,9 @@
+ case 3616:
+ CALL_PRE(thread_policy);
+ return;
++ case 3617:
++ CALL_PRE(thread_policy_set);
++ return;
+ default:
+ // unknown message to a thread
+ VG_(printf)("UNKNOWN thread message [id %d, to %s, reply 0x%x]\n",
+@@ -6766,7 +6931,7 @@
+
+ POST(mach_msg_unhandled)
+ {
+- ML_(sync_mappings)("after", "mach_msg_unhandled", 0);
++ ML_(sync_mappings)("after", "mach_msg_receive (unhandled)", 0);
+ }
+
+
+@@ -6906,11 +7071,12 @@
+ }
+
+
++#if DARWIN_VERS <= DARWIN_10_5
+ PRE(__semwait_signal)
+ {
+- /* args: int cond_sem, int mutex_sem,
+- int timeout, int relative,
+- time_t tv_sec, time_t tv_nsec */
++ /* 10.5 args: int cond_sem, int mutex_sem,
++ int timeout, int relative,
++ time_t tv_sec, time_t tv_nsec */
+ PRINT("__semwait_signal(wait %s, signal %s, %ld, %ld, %lds:%ldns)",
+ name_for_port(ARG1), name_for_port(ARG2), ARG3, ARG4, ARG5, ARG6);
+ PRE_REG_READ6(long, "__semwait_signal",
+@@ -6920,8 +7086,33 @@
+
+ *flags |= SfMayBlock;
+ }
++#else
++PRE(__semwait_signal)
++{
++ /* 10.5 args: int cond_sem, int mutex_sem,
++ int timeout, int relative,
++ const timespec *ts */
++ PRINT("__semwait_signal(wait %s, signal %s, %ld, %ld, %#lx)",
++ name_for_port(ARG1), name_for_port(ARG2), ARG3, ARG4, ARG5);
++ PRE_REG_READ5(int, "__semwait_signal",
++ int,cond_sem, int,mutex_sem,
++ int,timeout, int,relative,
++ const struct vki_timespec *,ts);
++
++ if (ARG5) PRE_MEM_READ ("__semwait_signal(ts)",
++ ARG5, sizeof(struct vki_timespec));
++
++ *flags |= SfMayBlock;
++}
++#endif
+
+
++PRE(__thread_selfid)
++{
++ PRINT("__thread_selfid ()");
++ PRE_REG_READ0(vki_uint64_t, "__thread_selfid");
++}
++
+ PRE(task_for_pid)
+ {
+ PRINT("task_for_pid(%s, %ld, %#lx)", name_for_port(ARG1), ARG2, ARG3);
+@@ -7474,7 +7665,11 @@
+ MACX_(__NR_sigreturn, sigreturn),
+ // _____(__NR_chud),
+ _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(186)), // ???
++#if DARWIN_VERS >= DARWIN_10_6
++// _____(__NR_fdatasync),
++#else
+ _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(187)), // ???
++#endif
+ GENXY(__NR_stat, sys_newstat),
+ GENXY(__NR_fstat, sys_newfstat),
+ GENXY(__NR_lstat, sys_newlstat),
+@@ -7501,8 +7696,13 @@
+ // _____(__NR_ATPgetreq),
+ // _____(__NR_ATPgetrsp),
+ _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(213)), // Reserved for AppleTalk
++#if DARWIN_VERS >= DARWIN_10_6
++ _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(214)), // old kqueue_from_portset_np
++ _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(215)), // old kqueue_portset_np
++#else
+ // _____(__NR_kqueue_from_portset_np),
+ // _____(__NR_kqueue_portset_np),
++#endif
+ // _____(__NR_mkcomplex),
+ // _____(__NR_statv),
+ // _____(__NR_lstatv),
+@@ -7515,8 +7715,13 @@
+ // _____(__NR_searchfs),
+ GENX_(__NR_delete, sys_unlink),
+ // _____(__NR_copyfile),
++#if DARWIN_VERS >= DARWIN_10_6
++// _____(__NR_fgetattrlist),
++// _____(__NR_fsetattrlist),
++#else
+ _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(228)), // ??
+ _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(229)), // ??
++#endif
+ GENXY(__NR_poll, sys_poll),
+ MACX_(__NR_watchevent, watchevent),
+ MACXY(__NR_waitevent, waitevent),
+@@ -7532,7 +7737,11 @@
+ MACXY(__NR_fsctl, fsctl),
+ MACX_(__NR_initgroups, initgroups),
+ MACXY(__NR_posix_spawn, posix_spawn),
++#if DARWIN_VERS >= DARWIN_10_6
++// _____(__NR_ffsctl),
++#else
+ _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(245)), // ???
++#endif
+ _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(246)), // ???
+ // _____(__NR_nfsclnt),
+ // _____(__NR_fhopen),
+@@ -7583,23 +7792,27 @@
+ // _____(__NR_identitysvc),
+ // _____(__NR_shared_region_check_np),
+ // _____(__NR_shared_region_map_np),
++#if DARWIN_VERS >= DARWIN_10_6
++// _____(__NR_vm_pressure_monitor),
++#else
+ _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(296)), // old load_shared_file
++#endif
+ _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(297)), // old reset_shared_file
+ _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(298)), // old new_system_shared_regions
+ _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(299)), // old shared_region_map_file_np
+ _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(300)), // old shared_region_make_private_np
+-// _____(__NR___pthread_mutex_destroy),
+-// _____(__NR___pthread_mutex_init),
+-// _____(__NR___pthread_mutex_lock),
+-// _____(__NR___pthread_mutex_trylock),
+-// _____(__NR___pthread_mutex_unlock),
+-// _____(__NR___pthread_cond_init),
+-// _____(__NR___pthread_cond_destroy),
+-// _____(__NR___pthread_cond_broadcast),
+-// _____(__NR___pthread_cond_signal),
++ _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(301)), // ???
++ _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(302)), // ???
++ _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(303)), // ???
++ _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(304)), // ???
++ _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(305)), // ???
++ _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(306)), // ???
++ _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(307)), // ???
++ _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(308)), // ???
++ _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(309)), // ???
+ // _____(__NR_getsid),
+ // _____(__NR_settid_with_pid),
+-// _____(__NR___pthread_cond_timedwait),
++ _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(312)), // ???
+ // _____(__NR_aio_fsync),
+ MACXY(__NR_aio_return, aio_return),
+ MACX_(__NR_aio_suspend, aio_suspend),
+@@ -7608,7 +7821,7 @@
+ MACXY(__NR_aio_read, aio_read),
+ MACX_(__NR_aio_write, aio_write),
+ // _____(__NR_lio_listio), // 320
+-// _____(__NR___pthread_cond_wait),
++ _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(321)), // ???
+ // _____(__NR_iopolicysys),
+ _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(323)), // ???
+ // _____(__NR_mlockall),
+@@ -7651,15 +7864,23 @@
+ MACX_(__NR_bsdthread_terminate, bsdthread_terminate),
+ MACXY(__NR_kqueue, kqueue),
+ MACXY(__NR_kevent, kevent),
+-// _____(__NR_lchown),
++ GENX_(__NR_lchown, sys_lchown),
+ // _____(__NR_stack_snapshot),
+ MACX_(__NR_bsdthread_register, bsdthread_register),
+ MACX_(__NR_workq_open, workq_open),
+ MACXY(__NR_workq_ops, workq_ops),
++#if DARWIN_VERS >= DARWIN_10_6
++// _____(__NR_kevent64),
++#else
+ _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(369)), // ???
++#endif
+ _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(370)), // ???
+ _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(371)), // ???
++#if DARWIN_VERS >= DARWIN_10_6
++ MACX_(__NR___thread_selfid, __thread_selfid),
++#else
+ _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(372)), // ???
++#endif
+ _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(373)), // ???
+ _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(374)), // ???
+ _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(375)), // ???
+@@ -7715,6 +7936,12 @@
+ // _____(__NR___mac_mount),
+ // _____(__NR___mac_get_mount),
+ // _____(__NR___mac_getfsstat),
++#if DARWIN_VERS >= DARWIN_10_6
++ MACXY(__NR_fsgetpath, fsgetpath),
++// _____(__NR_audit_session_self),
++// _____(__NR_audit_session_join),
++#endif
++
+ // _____(__NR_MAXSYSCALL)
+ MACX_(__NR_DARWIN_FAKE_SIGRETURN, FAKE_SIGRETURN)
+ };
+Index: coregrind/m_syswrap/syswrap-main.c
+===================================================================
+--- coregrind/m_syswrap/syswrap-main.c (revision 11026)
++++ coregrind/m_syswrap/syswrap-main.c (working copy)
+@@ -1205,7 +1205,7 @@
+ # error Unknown OS
+ # endif
+
+- return sys == NULL ? &bad_sys : sys;
++ return (sys && sys->before) ? sys : &bad_sys;
+ }
+
+
+Index: coregrind/m_main.c
+===================================================================
+--- coregrind/m_main.c (revision 11026)
++++ coregrind/m_main.c (working copy)
+@@ -1517,7 +1517,7 @@
+ VG_(do_syscall2)(__NR_munmap, 0x00000000, 0xf0000000);
+ # else
+ // open up client space
+- VG_(do_syscall2)(__NR_munmap, 0x100000000, 0x700000000000-0x100000000);
++ VG_(do_syscall2)(__NR_munmap, 0x100000000, 0x7fff50000000-0x100000000);
+ // open up client stack and dyld
+ VG_(do_syscall2)(__NR_munmap, 0x7fff5c000000, 0x4000000);
+ # endif
+Index: coregrind/Makefile.am
+===================================================================
+--- coregrind/Makefile.am (revision 11026)
++++ coregrind/Makefile.am (working copy)
+@@ -111,9 +111,11 @@
+
+ # Be careful w.r.t. parellel builds. See section 27.9 of the automake info
+ # page, "Handling Tools that Produce many Outputs".
+-$(mach_user_srcs): $(mach_defs)
++$(abs_builddir)/m_mach:
++ mkdir -p $@
++$(mach_user_srcs): $(mach_defs) $(abs_builddir)/m_mach
+ (cd m_mach && mig $(mach_defs))
+-$(mach_hdrs): $(mach_defs) $(mach_user_srcs)
++$(mach_hdrs): $(mach_defs) $(mach_user_srcs) $(abs_builddir)/m_mach
+ (cd m_mach && mig $(mach_defs))
+
+ #----------------------------------------------------------------------------
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macports-changes/attachments/20100421/8ede5952/attachment-0001.html>
More information about the macports-changes
mailing list