Author: sewardj
Date: 2010-06-02 12:58:27 +0100 (Wed, 02 Jun 2010)
New Revision: 11144
Log:
An infrastructural change, intended to improve 64-bit support on
MacOSX and hence improve support on MacOSX 10.6, which is 64-bit
by default:
Link the tool executables statically on MacOSX, as they are on Linux.
This sidesteps a couple of problems:
* no need to play address space games by mmaping huge blocks
at startup. This gets rid of the ~4 second startup delay
for all programs in 64-bit mode on MacOSX.
* only one copy of dyld exists in the process space, instead
of two having to coexist
Changes in the patch:
* various tweaking of -fno-PIC etc for Darwin, so as to ensure
that the tool executable code isn't PIC and so can be linked
statically
* Fix a conceptual hole which (afaik) has never been noticed
before: the configure.in must specify the alternative load
address (valt_) for the primary and secondary platforms
separately. This has only not been noticed till now because
the alt load address has been the same on all Linux platforms
(0x38000000).
FTR, for 32-bit Darwin, I'm using 0x38000000 (as on Linux ..
well, it works, so might as well) and for 64-bit,
0x138000000 (the x86 address + 4G), so as to avoid pagezero.
* add a bit more debug printing to m_ume/macho.c. Also take
care not to honour client pagezero map requests either in
32- or 64-bit mode.
* get rid of dyld_stub_binding_helper stubs, whatever they are,
in coregrind/m_start-{x86,amd64}-darwin.S.
* get rid of the munmap of address-space-filling segments in
m_main.c.
* m_main: add own implementation of __udivdi3 and __umoddi3.
Need to move this somewhere sane.
* link_tool_exe.c: change darwin case handling to do a simple
static link, and mostly ignore the invokation command line
we're given.
Modified:
branches/MACOSX106/Makefile.all.am
branches/MACOSX106/Makefile.tool.am
branches/MACOSX106/auxprogs/Makefile.am
branches/MACOSX106/cachegrind/Makefile.am
branches/MACOSX106/callgrind/Makefile.am
branches/MACOSX106/configure.in
branches/MACOSX106/coregrind/Makefile.am
branches/MACOSX106/coregrind/link_tool_exe.c
branches/MACOSX106/coregrind/m_main.c
branches/MACOSX106/coregrind/m_start-amd64-darwin.S
branches/MACOSX106/coregrind/m_start-x86-darwin.S
branches/MACOSX106/coregrind/m_ume/macho.c
branches/MACOSX106/drd/Makefile.am
branches/MACOSX106/exp-bbv/Makefile.am
branches/MACOSX106/exp-ptrcheck/Makefile.am
branches/MACOSX106/helgrind/Makefile.am
branches/MACOSX106/lackey/Makefile.am
branches/MACOSX106/massif/Makefile.am
branches/MACOSX106/memcheck/Makefile.am
branches/MACOSX106/none/Makefile.am
Modified: branches/MACOSX106/Makefile.all.am
===================================================================
--- branches/MACOSX106/Makefile.all.am 2010-06-02 11:13:19 UTC (rev 11143)
+++ branches/MACOSX106/Makefile.all.am 2010-06-02 11:58:27 UTC (rev 11144)
@@ -100,7 +100,8 @@
# stack traces, since users often see stack traces extending
# into (and through) the preloads.
if VGCONF_OS_IS_DARWIN
-AM_CFLAGS_PIC = -dynamic -O -g -fno-omit-frame-pointer -fno-strict-aliasing -mno-dynamic-no-pic
+AM_CFLAGS_PIC = -dynamic -O -g -fno-omit-frame-pointer -fno-strict-aliasing \
+ -mno-dynamic-no-pic -fpic -fPIC
else
AM_CFLAGS_PIC = -fpic -O -g -fno-omit-frame-pointer -fno-strict-aliasing
endif
@@ -171,8 +172,9 @@
AM_FLAG_M3264_X86_DARWIN = -arch i386
AM_CFLAGS_X86_DARWIN = $(WERROR) -arch i386 $(AM_CFLAGS_BASE) \
- -mmacosx-version-min=10.5 -fno-stack-protector \
- -mdynamic-no-pic
+ -mmacosx-version-min=10.5 \
+ -fno-stack-protector -fno-pic -fno-PIC
+
AM_CCASFLAGS_X86_DARWIN = $(AM_CPPFLAGS_X86_DARWIN) -arch i386 -g
AM_FLAG_M3264_AMD64_DARWIN = -arch x86_64
Modified: branches/MACOSX106/Makefile.tool.am
===================================================================
--- branches/MACOSX106/Makefile.tool.am 2010-06-02 11:13:19 UTC (rev 11143)
+++ branches/MACOSX106/Makefile.tool.am 2010-06-02 11:58:27 UTC (rev 11144)
@@ -56,20 +56,20 @@
$(TOOL_LDFLAGS_COMMON_AIX5) @FLAG_MAIX64@ -Wl,-bbigtoc
TOOL_LDFLAGS_X86_DARWIN = \
- $(TOOL_LDFLAGS_COMMON_DARWIN) -arch i386 \
- -Wl,-seg1addr,0xf0080000 \
- -Wl,-stack_addr,0xf0080000 -Wl,-stack_size,0x80000 \
- -Wl,-pagezero_size,0xf0000000
+ $(TOOL_LDFLAGS_COMMON_DARWIN) -arch i386
-# pagezero can't be unmapped and remapped. Use stack instead.
-# GrP fixme no stack guard
TOOL_LDFLAGS_AMD64_DARWIN = \
- $(TOOL_LDFLAGS_COMMON_DARWIN) -arch x86_64 \
- -Wl,-seg1addr,0x7fff55000000 \
- -Wl,-stack_addr,0x7fff50080000 -Wl,-stack_size,0x7ffe50080000 \
- -Wl,-pagezero_size,0x100000000
+ $(TOOL_LDFLAGS_COMMON_DARWIN) -arch x86_64
+# NB for 64-bit darwin. We may want to set -Wl,-pagezero_size to
+# something smaller than the default of 4G, so as to facilitate
+# loading clients who are also linked thusly (currently m_ume.c
+# will fail to load them). Although such setting is probably
+# better done in link_tool_exe.c.
+#
+# -Wl,-pagezero_size,0x100000000
+
#----------------------------------------------------------------------------
# vgpreload_<tool>-<platform>.a stuff
#----------------------------------------------------------------------------
Modified: branches/MACOSX106/auxprogs/Makefile.am
===================================================================
--- branches/MACOSX106/auxprogs/Makefile.am 2010-06-02 11:13:19 UTC (rev 11143)
+++ branches/MACOSX106/auxprogs/Makefile.am 2010-06-02 11:58:27 UTC (rev 11144)
@@ -29,4 +29,6 @@
valgrind_listener_CFLAGS = $(AM_CFLAGS_PRI)
valgrind_listener_CCASFLAGS = $(AM_CCASFLAGS_PRI)
valgrind_listener_LDFLAGS = $(AM_CFLAGS_PRI)
-
+if VGCONF_PLATFORMS_INCLUDE_X86_DARWIN
+valgrind_listener_LDFLAGS += -Wl,-read_only_relocs -Wl,suppress
+endif
Modified: branches/MACOSX106/cachegrind/Makefile.am
===================================================================
--- branches/MACOSX106/cachegrind/Makefile.am 2010-06-02 11:13:19 UTC (rev 11143)
+++ branches/MACOSX106/cachegrind/Makefile.am 2010-06-02 11:58:27 UTC (rev 11144)
@@ -26,6 +26,9 @@
cg_merge_CFLAGS = $(AM_CFLAGS_PRI)
cg_merge_CCASFLAGS = $(AM_CCASFLAGS_PRI)
cg_merge_LDFLAGS = $(AM_CFLAGS_PRI)
+if VGCONF_PLATFORMS_INCLUDE_X86_DARWIN
+cg_merge_LDFLAGS += -Wl,-read_only_relocs -Wl,suppress
+endif
#----------------------------------------------------------------------------
# cachegrind-<platform>
@@ -57,7 +60,7 @@
$(TOOL_LDFLAGS_@VGCONF_PLATFORM_PRI_CAPS@)
cachegrind_@VGCONF_ARCH_PRI@_@VGCONF_OS@_LINK = \
$(top_builddir)/coregrind/link_tool_exe \
- @VALT_LOAD_ADDRESS@ \
+ @VALT_LOAD_ADDRESS_PRI@ \
$(LINK) \
$(cachegrind_@VGCONF_ARCH_PRI@_@VGCONF_OS@_CFLAGS) \
$(cachegrind_@VGCONF_ARCH_PRI@_@VGCONF_OS@_LDFLAGS)
@@ -77,7 +80,7 @@
$(TOOL_LDFLAGS_@VGCONF_PLATFORM_SEC_CAPS@)
cachegrind_@VGCONF_ARCH_SEC@_@VGCONF_OS@_LINK = \
$(top_builddir)/coregrind/link_tool_exe \
- @VALT_LOAD_ADDRESS@ \
+ @VALT_LOAD_ADDRESS_SEC@ \
$(LINK) \
$(cachegrind_@VGCONF_ARCH_SEC@_@VGCONF_OS@_CFLAGS) \
$(cachegrind_@VGCONF_ARCH_SEC@_@VGCONF_OS@_LDFLAGS)
Modified: branches/MACOSX106/callgrind/Makefile.am
===================================================================
--- branches/MACOSX106/callgrind/Makefile.am 2010-06-02 11:13:19 UTC (rev 11143)
+++ branches/MACOSX106/callgrind/Makefile.am 2010-06-02 11:58:27 UTC (rev 11144)
@@ -67,7 +67,7 @@
$(TOOL_LDFLAGS_@VGCONF_PLATFORM_PRI_CAPS@)
callgrind_@VGCONF_ARCH_PRI@_@VGCONF_OS@_LINK = \
$(top_builddir)/coregrind/link_tool_exe \
- @VALT_LOAD_ADDRESS@ \
+ @VALT_LOAD_ADDRESS_PRI@ \
$(LINK) \
$(callgrind_@VGCONF_ARCH_PRI@_@VGCONF_OS@_CFLAGS) \
$(callgrind_@VGCONF_ARCH_PRI@_@VGCONF_OS@_LDFLAGS)
@@ -87,7 +87,7 @@
$(TOOL_LDFLAGS_@VGCONF_PLATFORM_SEC_CAPS@)
callgrind_@VGCONF_ARCH_SEC@_@VGCONF_OS@_LINK = \
$(top_builddir)/coregrind/link_tool_exe \
- @VALT_LOAD_ADDRESS@ \
+ @VALT_LOAD_ADDRESS_SEC@ \
$(LINK) \
$(callgrind_@VGCONF_ARCH_SEC@_@VGCONF_OS@_CFLAGS) \
$(callgrind_@VGCONF_ARCH_SEC@_@VGCONF_OS@_LDFLAGS)
Modified: branches/MACOSX106/configure.in
===================================================================
--- branches/MACOSX106/configure.in 2010-06-02 11:13:19 UTC (rev 11143)
+++ branches/MACOSX106/configure.in 2010-06-02 11:58:27 UTC (rev 11144)
@@ -358,35 +358,52 @@
AC_MSG_CHECKING([for a supported CPU/OS combination])
+# NB. The load address for a given platform may be specified in more
+# than one place, in some cases, depending on whether we're doing a biarch,
+# 32-bit only or 64-bit only build. eg see case for amd64-linux below.
+# Be careful to give consistent values in all subcases. Also, all four
+# valt_load_addres_{pri,sec}_{norml,inner} values must always be set,
+# even if it is to "0xUNSET".
+#
case "$ARCH_MAX-$VGCONF_OS" in
x86-linux)
VGCONF_ARCH_PRI="x86"
VGCONF_ARCH_SEC=""
VGCONF_PLATFORM_PRI_CAPS="X86_LINUX"
VGCONF_PLATFORM_SEC_CAPS=""
- valt_load_address_normal="0x38000000"
- valt_load_address_inner="0x28000000"
+ valt_load_address_pri_norml="0x38000000"
+ valt_load_address_pri_inner="0x28000000"
+ valt_load_address_sec_norml="0xUNSET"
+ valt_load_address_sec_inner="0xUNSET"
AC_MSG_RESULT([ok (${ARCH_MAX}-${VGCONF_OS})])
;;
amd64-linux)
+ valt_load_address_sec_norml="0xUNSET"
+ valt_load_address_sec_inner="0xUNSET"
if test x$vg_cv_only64bit = xyes; then
VGCONF_ARCH_PRI="amd64"
VGCONF_ARCH_SEC=""
VGCONF_PLATFORM_PRI_CAPS="AMD64_LINUX"
VGCONF_PLATFORM_SEC_CAPS=""
+ valt_load_address_pri_norml="0x38000000"
+ valt_load_address_pri_inner="0x28000000"
elif test x$vg_cv_only32bit = xyes; then
VGCONF_ARCH_PRI="x86"
VGCONF_ARCH_SEC=""
VGCONF_PLATFORM_PRI_CAPS="X86_LINUX"
VGCONF_PLATFORM_SEC_CAPS=""
+ valt_load_address_pri_norml="0x38000000"
+ valt_load_address_pri_inner="0x28000000"
else
VGCONF_ARCH_PRI="amd64"
VGCONF_ARCH_SEC="x86"
VGCONF_PLATFORM_PRI_CAPS="AMD64_LINUX"
VGCONF_PLATFORM_SEC_CAPS="X86_LINUX"
+ valt_load_address_pri_norml="0x38000000"
+ valt_load_address_pri_inner="0x28000000"
+ valt_load_address_sec_norml="0x38000000"
+ valt_load_address_sec_inner="0x28000000"
fi
- valt_load_address_normal="0x38000000"
- valt_load_address_inner="0x28000000"
AC_MSG_RESULT([ok (${ARCH_MAX}-${VGCONF_OS})])
;;
ppc32-linux)
@@ -394,11 +411,17 @@
VGCONF_ARCH_SEC=""
VGCONF_PLATFORM_PRI_CAPS="PPC32_LINUX"
VGCONF_PLATFORM_SEC_CAPS=""
- valt_load_address_normal="0x38000000"
- valt_load_address_inner="0x28000000"
+ valt_load_address_pri_norml="0x38000000"
+ valt_load_address_pri_inner="0x28000000"
+ valt_load_address_sec_norml="0xUNSET"
+ valt_load_address_sec_inner="0xUNSET"
AC_MSG_RESULT([ok (${ARCH_MAX}-${VGCONF_OS})])
;;
ppc64-aix5)
+ valt_load_address_pri_norml="0xUNSET"
+ valt_load_address_pri_inner="0xUNSET"
+ valt_load_address_sec_norml="0xUNSET"
+ valt_load_address_sec_inner="0xUNSET"
if test x$vg_cv_only64bit = xyes; then
VGCONF_ARCH_PRI="ppc64"
VGCONF_ARCH_SEC=""
@@ -415,29 +438,35 @@
VGCONF_PLATFORM_PRI_CAPS="PPC64_AIX5"
VGCONF_PLATFORM_SEC_CAPS="PPC32_AIX5"
fi
- valt_load_address_normal="0x38000000"
- valt_load_address_inner="0x28000000"
AC_MSG_RESULT([ok (${ARCH_MAX}-${VGCONF_OS})])
;;
ppc64-linux)
+ valt_load_address_sec_norml="0xUNSET"
+ valt_load_address_sec_inner="0xUNSET"
if test x$vg_cv_only64bit = xyes; then
VGCONF_ARCH_PRI="ppc64"
VGCONF_ARCH_SEC=""
VGCONF_PLATFORM_PRI_CAPS="PPC64_LINUX"
VGCONF_PLATFORM_SEC_CAPS=""
+ valt_load_address_pri_norml="0x38000000"
+ valt_load_address_pri_inner="0x28000000"
elif test x$vg_cv_only32bit = xyes; then
VGCONF_ARCH_PRI="ppc32"
VGCONF_ARCH_SEC=""
VGCONF_PLATFORM_PRI_CAPS="PPC32_LINUX"
VGCONF_PLATFORM_SEC_CAPS=""
+ valt_load_address_pri_norml="0x38000000"
+ valt_load_address_pri_inner="0x28000000"
else
VGCONF_ARCH_PRI="ppc64"
VGCONF_ARCH_SEC="ppc32"
VGCONF_PLATFORM_PRI_CAPS="PPC64_LINUX"
VGCONF_PLATFORM_SEC_CAPS="PPC32_LINUX"
+ valt_load_address_pri_norml="0x38000000"
+ valt_load_address_pri_inner="0x28000000"
+ valt_load_address_sec_norml="0x38000000"
+ valt_load_address_sec_inner="0x28000000"
fi
- valt_load_address_normal="0x38000000"
- valt_load_address_inner="0x28000000"
AC_MSG_RESULT([ok (${ARCH_MAX}-${VGCONF_OS})])
;;
x86-darwin)
@@ -445,38 +474,50 @@
VGCONF_ARCH_SEC=""
VGCONF_PLATFORM_PRI_CAPS="X86_DARWIN"
VGCONF_PLATFORM_SEC_CAPS=""
- valt_load_address_normal="0x0"
- valt_load_address_inner="0x0"
+ valt_load_address_pri_norml="0x38000000"
+ valt_load_address_pri_inner="0x28000000"
+ valt_load_address_sec_norml="0xUNSET"
+ valt_load_address_sec_inner="0xUNSET"
AC_MSG_RESULT([ok (${ARCH_MAX}-${VGCONF_OS})])
;;
amd64-darwin)
+ valt_load_address_sec_norml="0xUNSET"
+ valt_load_address_sec_inner="0xUNSET"
if test x$vg_cv_only64bit = xyes; then
VGCONF_ARCH_PRI="amd64"
VGCONF_ARCH_SEC=""
VGCONF_PLATFORM_PRI_CAPS="AMD64_DARWIN"
VGCONF_PLATFORM_SEC_CAPS=""
+ valt_load_address_pri_norml="0x138000000"
+ valt_load_address_pri_inner="0x128000000"
elif test x$vg_cv_only32bit = xyes; then
VGCONF_ARCH_PRI="x86"
VGCONF_ARCH_SEC=""
VGCONF_PLATFORM_PRI_CAPS="X86_DARWIN"
VGCONF_PLATFORM_SEC_CAPS=""
VGCONF_ARCH_PRI_CAPS="x86"
+ valt_load_address_pri_norml="0x38000000"
+ valt_load_address_pri_inner="0x28000000"
else
VGCONF_ARCH_PRI="amd64"
VGCONF_ARCH_SEC="x86"
VGCONF_PLATFORM_PRI_CAPS="AMD64_DARWIN"
VGCONF_PLATFORM_SEC_CAPS="X86_DARWIN"
+ valt_load_address_pri_norml="0x138000000"
+ valt_load_address_pri_inner="0x128000000"
+ valt_load_address_sec_norml="0x38000000"
+ valt_load_address_sec_inner="0x28000000"
fi
- valt_load_address_normal="0x0"
- valt_load_address_inner="0x0"
AC_MSG_RESULT([ok (${ARCH_MAX}-${VGCONF_OS})])
;;
arm-linux)
VGCONF_ARCH_PRI="arm"
VGCONF_PLATFORM_PRI_CAPS="ARM_LINUX"
VGCONF_PLATFORM_SEC_CAPS=""
- valt_load_address_normal="0x38000000"
- valt_load_address_inner="0x28000000"
+ valt_load_address_pri_norml="0x38000000"
+ valt_load_address_pri_inner="0x28000000"
+ valt_load_address_sec_norml="0xUNSET"
+ valt_load_address_sec_inner="0xUNSET"
AC_MSG_RESULT([ok (${host_cpu}-${host_os})])
;;
*)
@@ -484,6 +525,10 @@
VGCONF_ARCH_SEC="unknown"
VGCONF_PLATFORM_PRI_CAPS="UNKNOWN"
VGCONF_PLATFORM_SEC_CAPS="UNKNOWN"
+ valt_load_address_pri_norml="0xUNSET"
+ valt_load_address_pri_inner="0xUNSET"
+ valt_load_address_sec_norml="0xUNSET"
+ valt_load_address_sec_inner="0xUNSET"
AC_MSG_RESULT([no (${ARCH_MAX}-${VGCONF_OS})])
AC_MSG_ERROR([Valgrind is platform specific. Sorry. Please consider doing a port.])
;;
@@ -569,7 +614,8 @@
# Check if this should be built as an inner Valgrind, to be run within
# another Valgrind. Choose the load address accordingly.
-AC_SUBST(VALT_LOAD_ADDRESS)
+AC_SUBST(VALT_LOAD_ADDRESS_PRI)
+AC_SUBST(VALT_LOAD_ADDRESS_SEC)
AC_CACHE_CHECK([for use as an inner Valgrind], vg_cv_inner,
[AC_ARG_ENABLE(inner,
[ --enable-inner enables self-hosting],
@@ -577,9 +623,11 @@
[vg_cv_inner=no])])
if test "$vg_cv_inner" = yes; then
AC_DEFINE([ENABLE_INNER], 1, [configured to run as an inner Valgrind])
- VALT_LOAD_ADDRESS=$valt_load_address_inner
+ VALT_LOAD_ADDRESS_PRI=$valt_load_address_pri_inner
+ VALT_LOAD_ADDRESS_SEC=$valt_load_address_sec_inner
else
- VALT_LOAD_ADDRESS=$valt_load_address_normal
+ VALT_LOAD_ADDRESS_PRI=$valt_load_address_pri_norml
+ VALT_LOAD_ADDRESS_SEC=$valt_load_address_sec_norml
fi
Modified: branches/MACOSX106/coregrind/Makefile.am
===================================================================
--- branches/MACOSX106/coregrind/Makefile.am 2010-06-02 11:13:19 UTC (rev 11143)
+++ branches/MACOSX106/coregrind/Makefile.am 2010-06-02 11:58:27 UTC (rev 11144)
@@ -54,12 +54,18 @@
valgrind_CFLAGS = $(AM_CFLAGS_PRI)
valgrind_CCASFLAGS = $(AM_CCASFLAGS_PRI)
valgrind_LDFLAGS = $(AM_CFLAGS_PRI)
+if VGCONF_PLATFORMS_INCLUDE_X86_DARWIN
+valgrind_LDFLAGS += -Wl,-read_only_relocs -Wl,suppress
+endif
no_op_client_for_valgrind_SOURCES = no_op_client_for_valgrind.c
no_op_client_for_valgrind_CPPFLAGS = $(AM_CPPFLAGS_PRI)
no_op_client_for_valgrind_CFLAGS = $(AM_CFLAGS_PRI)
no_op_client_for_valgrind_CCASFLAGS = $(AM_CCASFLAGS_PRI)
no_op_client_for_valgrind_LDFLAGS = $(AM_CFLAGS_PRI)
+if VGCONF_PLATFORMS_INCLUDE_X86_DARWIN
+no_op_client_for_valgrind_LDFLAGS += -Wl,-read_only_relocs -Wl,suppress
+endif
#----------------------------------------------------------------------------
# Darwin Mach stuff
Modified: branches/MACOSX106/coregrind/link_tool_exe.c
===================================================================
--- branches/MACOSX106/coregrind/link_tool_exe.c 2010-06-02 11:13:19 UTC (rev 11143)
+++ branches/MACOSX106/coregrind/link_tool_exe.c 2010-06-02 11:58:27 UTC (rev 11144)
@@ -105,9 +105,53 @@
#elif defined(VGO_darwin)
-/* Run the specified command as-is; ignore the specified load address
- (argv[1]). */
+/* Plan is: look at the specified gcc invokation. Ignore all parts of
+ it except the *.a, *.o and -o outfile parts. Wrap them up in a new
+ command which looks (eg) as follows:
+ (64-bit):
+
+ /usr/bin/ld -static -arch x86_64 -macosx_version_min 10.5 \
+ -o memcheck-amd64-darwin -u __start -e __start \
+ -image_base 0x138000000 -stack_addr 0x13c000000 \
+ -stack_size 0x800000 \
+ memcheck_amd*.o \
+ ../coregrind/libcoregrind-amd64-darwin.a \
+ ../VEX/libvex-amd64-darwin.a
+
+ (32-bit)
+
+ /usr/bin/ld -static -arch i386 -macosx_version_min 10.5 \
+ -o memcheck-x86-darwin -u __start -e __start \
+ -image_base 0x38000000 -stack_addr 0x3c000000 \
+ -stack_size 0x800000 \
+ memcheck_x86*.o \
+ ../coregrind/libcoregrind-x86-darwin.a \
+ ../VEX/libvex-x86-darwin.a
+
+ The addresses shown above will actually work, although "for real" we
+ of course need to take it from argv[1]. In these examples the stack
+ is placed 64M after the executable start. It is probably safer to
+ place it 64M before the executable's start point, so the executable
+ + data + bss can grow arbitrarily in future without colliding with
+ the stack.
+
+ There's one more twist: this executable (for the program in this
+ file) could be compiled as either 32- or 64-bit. That has no
+ bearing at all on the word size of the executable for which we are
+ linking. We need to know the latter since we need to hand to the
+ linker, "-arch x86_64" or "-arch i386". Fortunately we can figure
+ this out by scanning the gcc invokation, which itself must contain
+ either "-arch x86_64" or "-arch i386".
+*/
+
+/* user configurable constants: how far before the exe should we
+ place the stack? */
+#define TX_STACK_OFFSET_BEFORE_TEXT (64 * 1024 * 1024)
+/* and how big should the stack be */
+#define TX_STACK_SIZE (8 * 1024 * 1024)
+
+
// Don't NDEBUG this; the asserts are necesary for
// safety checks.
#include <assert.h>
@@ -115,44 +159,113 @@
#include <stdio.h>
#include <stdlib.h>
+static void add_to ( char** str, size_t* str_sz, char* to_add )
+{
+ size_t needed = strlen(to_add) +2/*paranoia*/;
+ size_t currlen = strlen(*str);
+ assert(currlen < *str_sz);
+
+ while (needed >= *str_sz - currlen) {
+ *str = realloc(*str, 2 * *str_sz);
+ assert(*str);
+ (*str_sz) *= 2;
+ }
+
+ assert(currlen < *str_sz);
+ assert(needed < *str_sz - currlen);
+ strcat(*str, to_add);
+}
+
+static int/*bool*/ is_dota_or_doto ( char* str )
+{
+ assert(str);
+ size_t n = strlen(str);
+ if (n < 2) return 0;
+ if (str[n-2] == '.' && (str[n-1] == 'a' || str[n-1] == 'o'))
+ return 1;
+ return 0;
+}
+
+/* Run the specified command as-is; ignore the specified load address
+ (argv[1]). */
+
int main ( int argc, char** argv )
{
- int i;
- size_t reqd = 0;
+ int i;
// expect at least: alt-load-address gcc -o foo bar.o
assert(argc > 5);
- // check for plausible-ish alt load address
- char* ala = argv[1];
- assert(ala[0] == '0');
- assert(ala[1] == 'x');
+ // check for plausible-ish alt load address, and get hold
+ // of it
+ char* ala_str = argv[1];
+ unsigned long long int ala = 0;
- // command to run is argv[2 ..]
+ assert(ala_str[0] == '0');
+ assert(ala_str[1] == 'x');
- // so, build up the complete command here:
- // argv[2 ..]
+ int r = sscanf(ala_str, "0x%llx", &ala);
+ assert(r == 1);
- // first, do length safety checks
- for (i = 2; i < argc; i++)
- reqd += 1+ strlen(argv[i]);
+ // get hold of the outfile name
+ char* outfile_name = NULL;
+ for (i = 1; i < argc-1; i++) {
+ if (0 == strcmp(argv[i], "-o")) {
+ outfile_name = argv[i+1];
+ break;
+ }
+ }
+ assert(outfile_name);
- reqd += 1;
- char* cmd = calloc(reqd,1);
+ // get hold of the string following -arch
+ char* arch_str = NULL;
+ for (i = 1; i < argc-1; i++) {
+ if (0 == strcmp(argv[i], "-arch")) {
+ arch_str = argv[i+1];
+ break;
+ }
+ }
+ assert(arch_str);
+
+ // build the command line
+ size_t cmd_sz = 1;
+ char* cmd = calloc(cmd_sz, 1);
assert(cmd);
- for (i = 2; i < argc; i++) {
- strcat(cmd, " ");
- strcat(cmd, argv[i]);
+ add_to(&cmd, &cmd_sz, "/usr/bin/ld");
+ add_to(&cmd, &cmd_sz, " -static");
+ add_to(&cmd, &cmd_sz, " -arch ");
+ add_to(&cmd, &cmd_sz, arch_str);
+ add_to(&cmd, &cmd_sz, " -macosx_version_min 10.5");
+ add_to(&cmd, &cmd_sz, " -o ");
+ add_to(&cmd, &cmd_sz, outfile_name);
+ add_to(&cmd, &cmd_sz, " -u __start -e __start");
+
+ char buf[40];
+ sprintf(buf, "0x%llx", ala);
+ add_to(&cmd, &cmd_sz, " -image_base ");
+ add_to(&cmd, &cmd_sz, buf);
+
+ sprintf(buf, "0x%llx", ala - TX_STACK_OFFSET_BEFORE_TEXT);
+ add_to(&cmd, &cmd_sz, " -stack_addr ");
+ add_to(&cmd, &cmd_sz, buf);
+
+ sprintf(buf, "0x%llx", (unsigned long long int)TX_STACK_SIZE);
+ add_to(&cmd, &cmd_sz, " -stack_size ");
+ add_to(&cmd, &cmd_sz, buf);
+
+ for (i = 3; i < argc; i++) {
+ if (is_dota_or_doto(argv[i])) {
+ add_to(&cmd, &cmd_sz, " ");
+ add_to(&cmd, &cmd_sz, argv[i]);
+ }
}
- assert(cmd[reqd-1] == 0);
-
- if (0) printf("\n");
+ if (1) printf("\n");
printf("link_tool_exe: %s\n", cmd);
- if (0) printf("\n");
+ if (1) printf("\n");
- int r = system(cmd);
+ r = system(cmd);
free(cmd);
Modified: branches/MACOSX106/coregrind/m_main.c
===================================================================
--- branches/MACOSX106/coregrind/m_main.c 2010-06-02 11:13:19 UTC (rev 11143)
+++ branches/MACOSX106/coregrind/m_main.c 2010-06-02 11:58:27 UTC (rev 11144)
@@ -1523,45 +1523,6 @@
# endif
//--------------------------------------------------------------
- // Darwin only: munmap address-space-filling segments
- // (oversized pagezero or stack)
- // p: none
- //--------------------------------------------------------------
- // DDD: comments from Greg Parker why these address-space-filling segments
- // are necessary:
- //
- // The memory maps are there to make sure that Valgrind's copies of libc
- // and dyld load in a non-default location, so that the inferior's own
- // libc and dyld do load in the default locations. (The kernel performs
- // the work of loading several things as described by the executable's
- // load commands, including the executable itself, dyld, the main
- // thread's stack, and the page-zero segment.) There might be a way to
- // fine-tune it so the maps are smaller but still do the job.
- //
- // The post-launch mmap behavior can be cleaned up - looks like we don't
- // unmap as much as we should - which would improve post-launch
- // performance.
- //
- // Hmm, there might be an extra-clever way to give Valgrind a custom
- // MH_DYLINKER that performs the "bootloader" work of loading dyld in an
- // acceptable place and then unloading itself. Then no mmaps would be
- // needed. I'll have to think about that one.
- //
- // [I can't work out where the address-space-filling segments are
- // created in the first place. --njn]
- //
-#if defined(VGO_darwin)
-# if VG_WORDSIZE == 4
- VG_(do_syscall2)(__NR_munmap, 0x00000000, 0xf0000000);
-# else
- // open up client space
- VG_(do_syscall2)(__NR_munmap, 0x100000000, 0x700000000000-0x100000000);
- // open up client stack and dyld
- VG_(do_syscall2)(__NR_munmap, 0x7fff5c000000, 0x4000000);
-# endif
-#endif
-
- //--------------------------------------------------------------
// Ensure we're on a plausible stack.
// p: logging
//--------------------------------------------------------------
@@ -3069,6 +3030,324 @@
#endif
+////////////////////////////////////////////////////////////////
+
+/* For static linking on x86-darwin, we need to supply our own 64-bit
+ integer division code, else the link dies thusly:
+
+ ld_classic: Undefined symbols:
+ ___udivdi3
+ ___umoddi3
+*/
+#if defined(VGP_x86_darwin)
+
+/* Routines for doing signed/unsigned 64 x 64 ==> 64 div and mod
+ (udivdi3, umoddi3, divdi3, moddi3) using only 32 x 32 ==> 32
+ division. Cobbled together from
+
+ http://www.hackersdelight.org/HDcode/divlu.c
+ http://www.hackersdelight.org/HDcode/divls.c
+ http://www.hackersdelight.org/HDcode/newCode/divDouble.c
+
+ The code from those three files is covered by the following license,
+ as it appears at:
+
+ http://www.hackersdelight.org/permissions.htm
+
+ You are free to use, copy, and distribute any of the code on
+ this web site, whether modified by you or not. You need not give
+ attribution. This includes the algorithms (some of which appear
+ in Hacker's Delight), the Hacker's Assistant, and any code
+ submitted by readers. Submitters implicitly agree to this.
+*/
+
+/* Long division, unsigned (64/32 ==> 32).
+ This procedure performs unsigned "long division" i.e., division of a
+64-bit unsigned dividend by a 32-bit unsigned divisor, producing a
+32-bit quotient. In the overflow cases (divide by 0, or quotient
+exceeds 32 bits), it returns a remainder of 0xFFFFFFFF (an impossible
+value).
+ The dividend is u1 and u0, with u1 being the most significant word.
+The divisor is parameter v. The value returned is the quotient.
+ Max line length is 57, to fit in hacker.book. */
+
+static Int nlz32(UInt x)
+{
+ Int n;
+ if (x == 0) return(32);
+ n = 0;
+ if (x <= 0x0000FFFF) {n = n +16; x = x <<16;}
+ if (x <= 0x00FFFFFF) {n = n + 8; x = x << 8;}
+ if (x <= 0x0FFFFFFF) {n = n + 4; x = x << 4;}
+ if (x <= 0x3FFFFFFF) {n = n + 2; x = x << 2;}
+ if (x <= 0x7FFFFFFF) {n = n + 1;}
+ return n;
+}
+
+/* 64 x 32 ==> 32 unsigned division, using only 32 x 32 ==> 32
+ division as a primitive. */
+static UInt divlu2(UInt u1, UInt u0, UInt v, UInt *r)
+{
+ const UInt b = 65536; // Number base (16 bits).
+ UInt un1, un0, // Norm. dividend LSD's.
+ vn1, vn0, // Norm. divisor digits.
+ q1, q0, // Quotient digits.
+ un32, un21, un10, // Dividend digit pairs.
+ rhat; // A remainder.
+ Int s; // Shift amount for norm.
+
+ if (u1 >= v) { // If overflow, set rem.
+ if (r != NULL) // to an impossible value,
+ *r = 0xFFFFFFFF; // and return the largest
+ return 0xFFFFFFFF;} // possible quotient.
+
+ s = nlz32(v); // 0 <= s <= 31.
+ v = v << s; // Normalize divisor.
+ vn1 = v >> 16; // Break divisor up into
+ vn0 = v & 0xFFFF; // two 16-bit digits.
+
+ un32 = (u1 << s) | ((u0 >> (32 - s)) & (-s >> 31));
+ un10 = u0 << s; // Shift dividend left.
+
+ un1 = un10 >> 16; // Break right half of
+ un0 = un10 & 0xFFFF; // dividend into two digits.
+
+ q1 = un32/vn1; // Compute the first
+ rhat = un32 - q1*vn1; // quotient digit, q1.
+ again1:
+ if (q1 >= b || q1*vn0 > b*rhat + un1) {
+ q1 = q1 - 1;
+ rhat = rhat + vn1;
+ if (rhat < b) goto again1;}
+
+ un21 = un32*b + un1 - q1*v; // Multiply and subtract.
+
+ q0 = un21/vn1; // Compute the second
+ rhat = un21 - q0*vn1; // quotient digit, q0.
+ again2:
+ if (q0 >= b || q0*vn0 > b*rhat + un0) {
+ q0 = q0 - 1;
+ rhat = rhat + vn1;
+ if (rhat < b) goto again2;}
+
+ if (r != NULL) // If remainder is wanted,
+ *r = (un21*b + un0 - q0*v) >> s; // return it.
+ return q1*b + q0;
+}
+
+
+/* 64 x 32 ==> 32 signed division, using only 32 x 32 ==> 32 division
+ as a primitive. */
+static Int divls(Int u1, UInt u0, Int v, Int *r)
+{
+ Int q, uneg, vneg, diff, borrow;
+
+ uneg = u1 >> 31; // -1 if u < 0.
+ if (uneg) { // Compute the absolute
+ u0 = -u0; // value of the dividend u.
+ borrow = (u0 != 0);
+ u1 = -u1 - borrow;}
+
+ vneg = v >> 31; // -1 if v < 0.
+ v = (v ^ vneg) - vneg; // Absolute value of v.
+
+ if ((UInt)u1 >= (UInt)v) goto overflow;
+
+ q = divlu2(u1, u0, v, (UInt *)r);
+
+ diff = uneg ^ vneg; // Negate q if signs of
+ q = (q ^ diff) - diff; // u and v differed.
+ if (uneg && r != NULL)
+ *r = -*r;
+
+ if ((diff ^ q) < 0 && q != 0) { // If overflow,
+ overflow: // set remainder
+ if (r != NULL) // to an impossible value,
+ *r = 0x80000000; // and return the largest
+ q = 0x80000000;} // possible neg. quotient.
+ return q;
+}
+
+
+
+/* This file contains a program for doing 64/64 ==> 64 division, on a
+machine that does not have that instruction but that does have
+instructions for "long division" (64/32 ==> 32). Code for unsigned
+division is given first, followed by a simple program for doing the
+signed version by using the unsigned version.
+ These programs are useful in implementing "long long" (64-bit)
+arithmetic on a machine that has the long division instruction. It will
+work on 64- and 32-bit machines, provided the compiler implements long
+long's (64-bit integers). It is desirable that the machine have the
+Count Leading Zeros instruction.
+ In the GNU world, these programs are known as __divdi3 and __udivdi3,
+and similar names are used here.
+ This material is not in HD, but may be in a future edition.
+Max line length is 57, to fit in hacker.book. */
+
+
+static Int nlz64(ULong x)
+{
+ Int n;
+ if (x == 0) return(64);
+ n = 0;
+ if (x <= 0x00000000FFFFFFFFULL) {n = n + 32; x = x << 32;}
+ if (x <= 0x0000FFFFFFFFFFFFULL) {n = n + 16; x = x << 16;}
+ if (x <= 0x00FFFFFFFFFFFFFFULL) {n = n + 8; x = x << 8;}
+ if (x <= 0x0FFFFFFFFFFFFFFFULL) {n = n + 4; x = x << 4;}
+ if (x <= 0x3FFFFFFFFFFFFFFFULL) {n = n + 2; x = x << 2;}
+ if (x <= 0x7FFFFFFFFFFFFFFFULL) {n = n + 1;}
+ return n;
+}
+
+// ---------------------------- udivdi3 --------------------------------
+
+ /* The variables u0, u1, etc. take on only 32-bit values, but they
+ are declared long long to avoid some compiler warning messages and to
+ avoid some unnecessary EXTRs that the compiler would put in, to
+ convert long longs to ints.
+
+ First the procedure takes care of the case in which the divisor is a
+ 32-bit quantity. There are two subcases: (1) If the left half of the
+ dividend is less than the divisor, one execution of DIVU is all that
+ is required (overflow is not possible). (2) Otherwise it does two
+ divisions, using the grade school method, with variables used as
+ suggested below.
+
+ q1 q0
+ ________
+ v) u1 u0
+ q1*v
+ ____
+ k u0 */
+
+/* These macros must be used with arguments of the appropriate type
+(unsigned long long for DIVU and long long for DIVS. They are
+simulations of the presumed machines ops. I.e., they look at only the
+low-order 32 bits of the divisor, they return garbage if the division
+overflows, and they return garbage in the high-order half of the
+quotient doubleword.
+ In practice, these would be replaced with uses of the machine's DIVU
+and DIVS instructions (e.g., by using the GNU "asm" facility). */
+
+static UInt DIVU ( ULong u, UInt v )
+{
+ UInt uHi = (UInt)(u >> 32);
+ UInt uLo = (UInt)u;
+ return divlu2(uHi, uLo, v, NULL);
+}
+
+static Int DIVS ( Long u, Int v )
+{
+ Int uHi = (Int)(u >> 32);
+ UInt uLo = (UInt)u;
+ return divls(uHi, uLo, v, NULL);
+}
+
+/* 64 x 64 ==> 64 unsigned division, using only 32 x 32 ==> 32
+ division as a primitive. */
+static ULong udivdi3(ULong u, ULong v)
+{
+ ULong u0, u1, v1, q0, q1, k, n;
+
+ if (v >> 32 == 0) { // If v < 2**32:
+ if (u >> 32 < v) // If u/v cannot overflow,
+ return DIVU(u, v) // just do one division.
+ & 0xFFFFFFFF;
+ else { // If u/v would overflow:
+ u1 = u >> 32; // Break u up into two
+ u0 = u & 0xFFFFFFFF; // halves.
+ q1 = DIVU(u1, v) // First quotient digit.
+ & 0xFFFFFFFF;
+ k = u1 - q1*v; // First remainder, < v.
+ q0 = DIVU((k << 32) + u0, v) // 2nd quot. digit.
+ & 0xFFFFFFFF;
+ return (q1 << 32) + q0;
+ }
+ }
+ // Here v >= 2**32.
+ n = nlz64(v); // 0 <= n <= 31.
+ v1 = (v << n) >> 32; // Normalize the divisor
+ // so its MSB is 1.
+ u1 = u >> 1; // To ensure no overflow.
+ q1 = DIVU(u1, v1) // Get quotient from
+ & 0xFFFFFFFF; // divide unsigned insn.
+ q0 = (q1 << n) >> 31; // Undo normalization and
+ // division of u by 2.
+ if (q0 != 0) // Make q0 correct or
+ q0 = q0 - 1; // too small by 1.
+ if ((u - q0*v) >= v)
+ q0 = q0 + 1; // Now q0 is correct.
+ return q0;
+}
+
+
+// ----------------------------- divdi3 --------------------------------
+
+/* This routine presumes that smallish cases (those which can be done in
+one execution of DIVS) are common. If this is not the case, the test for
+this case should be deleted.
+ Note that the test for when DIVS can be used is not entirely
+accurate. For example, DIVS is not used if v = 0xFFFFFFFF8000000,
+whereas if could be (if u is sufficiently small in magnitude). */
+
+// ------------------------------ cut ----------------------------------
+
+static ULong my_llabs ( Long x )
+{
+ ULong t = x >> 63;
+ return (x ^ t) - t;
+}
+
+/* 64 x 64 ==> 64 signed division, using only 32 x 32 ==> 32 division
+ as a primitive. */
+static Long divdi3(Long u, Long v)
+{
+ ULong au, av;
+ Long q, t;
+ au = my_llabs(u);
+ av = my_llabs(v);
+ if (av >> 31 == 0) { // If |v| < 2**31 and
+ // if (v << 32 >> 32 == v) { // If v is in range and
+ if (au < av << 31) { // |u|/|v| cannot
+ q = DIVS(u, v); // overflow, use DIVS.
+ return (q << 32) >> 32;
+ }
+ }
+ q = udivdi3(au,av); // Invoke udivdi3.
+ t = (u ^ v) >> 63; // If u, v have different
+ return (q ^ t) - t; // signs, negate q.
+}
+
+// ---------------------------- end cut --------------------------------
+
+ULong __udivdi3 (ULong u, ULong v)
+{
+ return udivdi3(u,v);
+}
+
+Long __divdi3 (Long u, Long v)
+{
+ return divdi3(u,v);
+}
+
+ULong __umoddi3 (ULong u, ULong v)
+{
+ ULong q = __udivdi3(u, v);
+ ULong r = u - q * v;
+ return r;
+}
+
+Long __moddi3 (Long u, Long v)
+{
+ Long q = __divdi3(u, v);
+ Long r = u - q * v;
+ return r;
+}
+
+#endif
+
+
/*--------------------------------------------------------------------*/
/*--- end ---*/
/*--------------------------------------------------------------------*/
Modified: branches/MACOSX106/coregrind/m_start-amd64-darwin.S
===================================================================
--- branches/MACOSX106/coregrind/m_start-amd64-darwin.S 2010-06-02 11:13:19 UTC (rev 11143)
+++ branches/MACOSX106/coregrind/m_start-amd64-darwin.S 2010-06-02 11:58:27 UTC (rev 11144)
@@ -32,26 +32,6 @@
#include "pub_core_basics_asm.h"
- .text
- .align 3,0x90
-Ldyld_stub_binding_helper:
- pushq %r11
- leaq ___dso_handle(%rip), %r11
- pushq %r11
- jmpq *Ldyld_lazy_symbol_binding_entry_point(%rip)
-
- .dyld
- .align 3
-Ldyld_lazy_symbol_binding_entry_point:
- .quad 0
- .quad 0
- .quad 0
- .quad 0
- .quad 0
- .quad Ldyld_stub_binding_helper
- .quad 0
-
-
// Memory layout established by kernel:
//
// 0
Modified: branches/MACOSX106/coregrind/m_start-x86-darwin.S
===================================================================
--- branches/MACOSX106/coregrind/m_start-x86-darwin.S 2010-06-02 11:13:19 UTC (rev 11143)
+++ branches/MACOSX106/coregrind/m_start-x86-darwin.S 2010-06-02 11:58:27 UTC (rev 11144)
@@ -32,24 +32,6 @@
#include "pub_core_basics_asm.h"
- .text
- .align 2,0x90
-Ldyld_stub_binding_helper:
- pushl $__mh_execute_header
- jmpl *Ldyld_lazy_symbol_binding_entry_point
-
- .dyld
- .align 2
-Ldyld_lazy_symbol_binding_entry_point:
- .long 0
- .long 0
- .long 0
- .long 0
- .long 0
- .long Ldyld_stub_binding_helper
- .long 0
-
-
// Memory layout established by kernel:
//
// 0
Modified: branches/MACOSX106/coregrind/m_ume/macho.c
===================================================================
--- branches/MACOSX106/coregrind/m_ume/macho.c 2010-06-02 11:13:19 UTC (rev 11143)
+++ branches/MACOSX106/coregrind/m_ume/macho.c 2010-06-02 11:58:27 UTC (rev 11144)
@@ -73,11 +73,11 @@
VG_(printf)("%s", str);
}
-static void check_mmap(SysRes res, Addr base, SizeT len)
+static void check_mmap(SysRes res, Addr base, SizeT len, HChar* who)
{
if (sr_isError(res)) {
- VG_(printf)("valgrind: mmap(0x%llx, %lld) failed in UME.\n",
- (ULong)base, (Long)len);
+ VG_(printf)("valgrind: mmap(0x%llx, %lld) failed in UME (%s).\n",
+ (ULong)base, (Long)len, who);
VG_(exit)(1);
}
}
@@ -173,6 +173,19 @@
// GrP fixme mark __UNIXSTACK as SF_STACK
+ // Don't honour the client's request to map PAGEZERO. Why not?
+ // Because when the kernel loaded the valgrind tool executable,
+ // it will have mapped pagezero itself. So further attempts
+ // to map it when loading the client are guaranteed to fail.
+#if VG_WORDSIZE == 4
+ if (segcmd->vmaddr == 0 && 0 == VG_(strcmp)(segcmd->segname, SEG_PAGEZERO)) {
+ if (segcmd->vmsize != 0x1000) {
+ print("bad executable (__PAGEZERO is not 4 KB)\n");
+ return -1;
+ }
+ return 0;
+ }
+#endif
#if VG_WORDSIZE == 8
if (segcmd->vmaddr == 0 && 0 == VG_(strcmp)(segcmd->segname, SEG_PAGEZERO)) {
if (segcmd->vmsize != 0x100000000) {
@@ -213,10 +226,11 @@
vmsize = VG_PGROUNDUP(segcmd->vmsize);
if (filesize > 0) {
addr = (Addr)segcmd->vmaddr;
+ VG_(debugLog)(2, "ume", "mmap fixed (file) (%#lx, %lu)\n", addr, filesize);
res = VG_(am_mmap_named_file_fixed_client)(addr, filesize, prot, fd,
offset + segcmd->fileoff,
filename);
- check_mmap(res, addr, filesize);
+ check_mmap(res, addr, filesize, "load_segment1");
}
// Zero-fill the remainder of the segment, if any
@@ -229,8 +243,9 @@
// page-aligned part
SizeT length = vmsize - filesize;
addr = (Addr)(filesize + segcmd->vmaddr);
+ VG_(debugLog)(2, "ume", "mmap fixed (anon) (%#lx, %lu)\n", addr, length);
res = VG_(am_mmap_anon_fixed_client)(addr, length, prot);
- check_mmap(res, addr, length);
+ check_mmap(res, addr, length, "load_segment2");
}
return 0;
@@ -343,7 +358,7 @@
SysRes res;
res = VG_(am_mmap_anon_fixed_client)(stackbase, stacksize, VKI_PROT_READ|VKI_PROT_WRITE|VKI_PROT_EXEC);
- check_mmap(res, stackbase, stacksize);
+ check_mmap(res, stackbase, stacksize, "load_unixthread1");
if (out_stack_start) *out_stack_start = (vki_uint8_t *)stackbase;
} else {
// custom stack - mapped via __UNIXTHREAD segment
Modified: branches/MACOSX106/drd/Makefile.am
===================================================================
--- branches/MACOSX106/drd/Makefile.am 2010-06-02 11:13:19 UTC (rev 11143)
+++ branches/MACOSX106/drd/Makefile.am 2010-06-02 11:58:27 UTC (rev 11144)
@@ -80,7 +80,7 @@
$(TOOL_LDFLAGS_@VGCONF_PLATFORM_PRI_CAPS@)
drd_@VGCONF_ARCH_PRI@_@VGCONF_OS@_LINK = \
$(top_builddir)/coregrind/link_tool_exe \
- @VALT_LOAD_ADDRESS@ \
+ @VALT_LOAD_ADDRESS_PRI@ \
$(LINK) \
$(drd_@VGCONF_ARCH_PRI@_@VGCONF_OS@_CFLAGS) \
$(drd_@VGCONF_ARCH_PRI@_@VGCONF_OS@_LDFLAGS)
@@ -100,7 +100,7 @@
$(TOOL_LDFLAGS_@VGCONF_PLATFORM_SEC_CAPS@)
drd_@VGCONF_ARCH_SEC@_@VGCONF_OS@_LINK = \
$(top_builddir)/coregrind/link_tool_exe \
- @VALT_LOAD_ADDRESS@ \
+ @VALT_LOAD_ADDRESS_SEC@ \
$(LINK) \
$(drd_@VGCONF_ARCH_SEC@_@VGCONF_OS@_CFLAGS) \
$(drd_@VGCONF_ARCH_SEC@_@VGCONF_OS@_LDFLAGS)
Modified: branches/MACOSX106/exp-bbv/Makefile.am
===================================================================
--- branches/MACOSX106/exp-bbv/Makefile.am 2010-06-02 11:13:19 UTC (rev 11143)
+++ branches/MACOSX106/exp-bbv/Makefile.am 2010-06-02 11:58:27 UTC (rev 11144)
@@ -27,7 +27,7 @@
$(TOOL_LDFLAGS_@VGCONF_PLATFORM_PRI_CAPS@)
exp_bbv_@VGCONF_ARCH_PRI@_@VGCONF_OS@_LINK = \
$(top_builddir)/coregrind/link_tool_exe \
- @VALT_LOAD_ADDRESS@ \
+ @VALT_LOAD_ADDRESS_PRI@ \
$(LINK) \
$(exp_bbv_@VGCONF_ARCH_PRI@_@VGCONF_OS@_CFLAGS) \
$(exp_bbv_@VGCONF_ARCH_PRI@_@VGCONF_OS@_LDFLAGS)
@@ -47,7 +47,7 @@
$(TOOL_LDFLAGS_@VGCONF_PLATFORM_SEC_CAPS@)
exp_bbv_@VGCONF_ARCH_SEC@_@VGCONF_OS@_LINK = \
$(top_builddir)/coregrind/link_tool_exe \
- @VALT_LOAD_ADDRESS@ \
+ @VALT_LOAD_ADDRESS_SEC@ \
$(LINK) \
$(exp_bbv_@VGCONF_ARCH_SEC@_@VGCONF_OS@_CFLAGS) \
$(exp_bbv_@VGCONF_ARCH_SEC@_@VGCONF_OS@_LDFLAGS)
Modified: branches/MACOSX106/exp-ptrcheck/Makefile.am
===================================================================
--- branches/MACOSX106/exp-ptrcheck/Makefile.am 2010-06-02 11:13:19 UTC (rev 11143)
+++ branches/MACOSX106/exp-ptrcheck/Makefile.am 2010-06-02 11:58:27 UTC (rev 11144)
@@ -40,7 +40,7 @@
$(TOOL_LDFLAGS_@VGCONF_PLATFORM_PRI_CAPS@)
exp_ptrcheck_@VGCONF_ARCH_PRI@_@VGCONF_OS@_LINK = \
$(top_builddir)/coregrind/link_tool_exe \
- @VALT_LOAD_ADDRESS@ \
+ @VALT_LOAD_ADDRESS_PRI@ \
$(LINK) \
$(exp_ptrcheck_@VGCONF_ARCH_PRI@_@VGCONF_OS@_CFLAGS) \
$(exp_ptrcheck_@VGCONF_ARCH_PRI@_@VGCONF_OS@_LDFLAGS)
@@ -60,7 +60,7 @@
$(TOOL_LDFLAGS_@VGCONF_PLATFORM_SEC_CAPS@)
exp_ptrcheck_@VGCONF_ARCH_SEC@_@VGCONF_OS@_LINK = \
$(top_builddir)/coregrind/link_tool_exe \
- @VALT_LOAD_ADDRESS@ \
+ @VALT_LOAD_ADDRESS_SEC@ \
$(LINK) \
$(exp_ptrcheck_@VGCONF_ARCH_SEC@_@VGCONF_OS@_CFLAGS) \
$(exp_ptrcheck_@VGCONF_ARCH_SEC@_@VGCONF_OS@_LDFLAGS)
Modified: branches/MACOSX106/helgrind/Makefile.am
===================================================================
--- branches/MACOSX106/helgrind/Makefile.am 2010-06-02 11:13:19 UTC (rev 11143)
+++ branches/MACOSX106/helgrind/Makefile.am 2010-06-02 11:58:27 UTC (rev 11144)
@@ -49,7 +49,7 @@
$(TOOL_LDFLAGS_@VGCONF_PLATFORM_PRI_CAPS@)
helgrind_@VGCONF_ARCH_PRI@_@VGCONF_OS@_LINK = \
$(top_builddir)/coregrind/link_tool_exe \
- @VALT_LOAD_ADDRESS@ \
+ @VALT_LOAD_ADDRESS_PRI@ \
$(LINK) \
$(helgrind_@VGCONF_ARCH_PRI@_@VGCONF_OS@_CFLAGS) \
$(helgrind_@VGCONF_ARCH_PRI@_@VGCONF_OS@_LDFLAGS)
@@ -69,7 +69,7 @@
$(TOOL_LDFLAGS_@VGCONF_PLATFORM_SEC_CAPS@)
helgrind_@VGCONF_ARCH_SEC@_@VGCONF_OS@_LINK = \
$(top_builddir)/coregrind/link_tool_exe \
- @VALT_LOAD_ADDRESS@ \
+ @VALT_LOAD_ADDRESS_SEC@ \
$(LINK) \
$(helgrind_@VGCONF_ARCH_SEC@_@VGCONF_OS@_CFLAGS) \
$(helgrind_@VGCONF_ARCH_SEC@_@VGCONF_OS@_LDFLAGS)
Modified: branches/MACOSX106/lackey/Makefile.am
===================================================================
--- branches/MACOSX106/lackey/Makefile.am 2010-06-02 11:13:19 UTC (rev 11143)
+++ branches/MACOSX106/lackey/Makefile.am 2010-06-02 11:58:27 UTC (rev 11144)
@@ -27,7 +27,7 @@
$(TOOL_LDFLAGS_@VGCONF_PLATFORM_PRI_CAPS@)
lackey_@VGCONF_ARCH_PRI@_@VGCONF_OS@_LINK = \
$(top_builddir)/coregrind/link_tool_exe \
- @VALT_LOAD_ADDRESS@ \
+ @VALT_LOAD_ADDRESS_PRI@ \
$(LINK) \
$(lackey_@VGCONF_ARCH_PRI@_@VGCONF_OS@_CFLAGS) \
$(lackey_@VGCONF_ARCH_PRI@_@VGCONF_OS@_LDFLAGS)
@@ -47,7 +47,7 @@
$(TOOL_LDFLAGS_@VGCONF_PLATFORM_SEC_CAPS@)
lackey_@VGCONF_ARCH_SEC@_@VGCONF_OS@_LINK = \
$(top_builddir)/coregrind/link_tool_exe \
- @VALT_LOAD_ADDRESS@ \
+ @VALT_LOAD_ADDRESS_SEC@ \
$(LINK) \
$(lackey_@VGCONF_ARCH_SEC@_@VGCONF_OS@_CFLAGS) \
$(lackey_@VGCONF_ARCH_SEC@_@VGCONF_OS@_LDFLAGS)
Modified: branches/MACOSX106/massif/Makefile.am
===================================================================
--- branches/MACOSX106/massif/Makefile.am 2010-06-02 11:13:19 UTC (rev 11143)
+++ branches/MACOSX106/massif/Makefile.am 2010-06-02 11:58:27 UTC (rev 11144)
@@ -37,7 +37,7 @@
$(TOOL_LDFLAGS_@VGCONF_PLATFORM_PRI_CAPS@)
massif_@VGCONF_ARCH_PRI@_@VGCONF_OS@_LINK = \
$(top_builddir)/coregrind/link_tool_exe \
- @VALT_LOAD_ADDRESS@ \
+ @VALT_LOAD_ADDRESS_PRI@ \
$(LINK) \
$(massif_@VGCONF_ARCH_PRI@_@VGCONF_OS@_CFLAGS) \
$(massif_@VGCONF_ARCH_PRI@_@VGCONF_OS@_LDFLAGS)
@@ -57,7 +57,7 @@
$(TOOL_LDFLAGS_@VGCONF_PLATFORM_SEC_CAPS@)
massif_@VGCONF_ARCH_SEC@_@VGCONF_OS@_LINK = \
$(top_builddir)/coregrind/link_tool_exe \
- @VALT_LOAD_ADDRESS@ \
+ @VALT_LOAD_ADDRESS_SEC@ \
$(LINK) \
$(massif_@VGCONF_ARCH_SEC@_@VGCONF_OS@_CFLAGS) \
$(massif_@VGCONF_ARCH_SEC@_@VGCONF_OS@_LDFLAGS)
Modified: branches/MACOSX106/memcheck/Makefile.am
===================================================================
--- branches/MACOSX106/memcheck/Makefile.am 2010-06-02 11:13:19 UTC (rev 11143)
+++ branches/MACOSX106/memcheck/Makefile.am 2010-06-02 11:58:27 UTC (rev 11144)
@@ -45,7 +45,7 @@
$(TOOL_LDFLAGS_@VGCONF_PLATFORM_PRI_CAPS@)
memcheck_@VGCONF_ARCH_PRI@_@VGCONF_OS@_LINK = \
$(top_builddir)/coregrind/link_tool_exe \
- @VALT_LOAD_ADDRESS@ \
+ @VALT_LOAD_ADDRESS_PRI@ \
$(LINK) \
$(memcheck_@VGCONF_ARCH_PRI@_@VGCONF_OS@_CFLAGS) \
$(memcheck_@VGCONF_ARCH_PRI@_@VGCONF_OS@_LDFLAGS)
@@ -65,7 +65,7 @@
$(TOOL_LDFLAGS_@VGCONF_PLATFORM_SEC_CAPS@)
memcheck_@VGCONF_ARCH_SEC@_@VGCONF_OS@_LINK = \
$(top_builddir)/coregrind/link_tool_exe \
- @VALT_LOAD_ADDRESS@ \
+ @VALT_LOAD_ADDRESS_SEC@ \
$(LINK) \
$(memcheck_@VGCONF_ARCH_SEC@_@VGCONF_OS@_CFLAGS) \
$(memcheck_@VGCONF_ARCH_SEC@_@VGCONF_OS@_LDFLAGS)
Modified: branches/MACOSX106/none/Makefile.am
===================================================================
--- branches/MACOSX106/none/Makefile.am 2010-06-02 11:13:19 UTC (rev 11143)
+++ branches/MACOSX106/none/Makefile.am 2010-06-02 11:58:27 UTC (rev 11144)
@@ -27,7 +27,7 @@
$(TOOL_LDFLAGS_@VGCONF_PLATFORM_PRI_CAPS@)
none_@VGCONF_ARCH_PRI@_@VGCONF_OS@_LINK = \
$(top_builddir)/coregrind/link_tool_exe \
- @VALT_LOAD_ADDRESS@ \
+ @VALT_LOAD_ADDRESS_PRI@ \
$(LINK) \
$(none_@VGCONF_ARCH_PRI@_@VGCONF_OS@_CFLAGS) \
$(none_@VGCONF_ARCH_PRI@_@VGCONF_OS@_LDFLAGS)
@@ -47,7 +47,7 @@
$(TOOL_LDFLAGS_@VGCONF_PLATFORM_SEC_CAPS@)
none_@VGCONF_ARCH_SEC@_@VGCONF_OS@_LINK = \
$(top_builddir)/coregrind/link_tool_exe \
- @VALT_LOAD_ADDRESS@ \
+ @VALT_LOAD_ADDRESS_SEC@ \
$(LINK) \
$(none_@VGCONF_ARCH_SEC@_@VGCONF_OS@_CFLAGS) \
$(none_@VGCONF_ARCH_SEC@_@VGCONF_OS@_LDFLAGS)
|