From: Ivo Raisr Date: Tue, 16 May 2017 08:22:51 +0000 (+0000) Subject: Increase Valgrind's load address to prevent mmap failure. X-Git-Tag: svn/VALGRIND_3_13_0~51 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=eb42c054c4b0dfb6f49da2ebcac849952d2b1096;p=thirdparty%2Fvalgrind.git Increase Valgrind's load address to prevent mmap failure. Fixes BZ#374963. Previously Valgrind failed to start when the executable contained large text, data or bss segments. The load address was increased for almost all platforms to 0x58000000 (from 0x38000000), giving another 512 MB for the executable. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@16383 --- diff --git a/NEWS b/NEWS index b36ad8f67e..6c8a9921e4 100644 --- a/NEWS +++ b/NEWS @@ -152,6 +152,7 @@ where XXXXXX is the bug number as listed below. 373555 Rename BBPTR to GSPTR as it denotes guest state pointer only 373938 const IRExpr arguments for matchIRExpr() 374719 some spelling fixes +374963 increase valgrind's load address to prevent mmap failure 375514 valgrind_get_tls_addr() does not work in case of static TLS 375772 +1 error in get_elf_symbol_info() when computing value of 'hi' address for ML_(find_rx_mapping)() diff --git a/configure.ac b/configure.ac index 810a769901..d134aee0dd 100644 --- a/configure.ac +++ b/configure.ac @@ -522,8 +522,8 @@ case "$ARCH_MAX-$VGCONF_OS" in 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" + valt_load_address_pri_norml="0x58000000" + valt_load_address_pri_inner="0x38000000" valt_load_address_sec_norml="0xUNSET" valt_load_address_sec_inner="0xUNSET" AC_MSG_RESULT([ok (${ARCH_MAX}-${VGCONF_OS})]) @@ -536,24 +536,24 @@ case "$ARCH_MAX-$VGCONF_OS" in 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" + valt_load_address_pri_norml="0x58000000" + valt_load_address_pri_inner="0x38000000" 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" + valt_load_address_pri_norml="0x58000000" + valt_load_address_pri_inner="0x38000000" 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" + valt_load_address_pri_norml="0x58000000" + valt_load_address_pri_inner="0x38000000" + valt_load_address_sec_norml="0x58000000" + valt_load_address_sec_inner="0x38000000" fi AC_MSG_RESULT([ok (${ARCH_MAX}-${VGCONF_OS})]) ;; @@ -562,8 +562,8 @@ case "$ARCH_MAX-$VGCONF_OS" in 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" + valt_load_address_pri_norml="0x58000000" + valt_load_address_pri_inner="0x38000000" valt_load_address_sec_norml="0xUNSET" valt_load_address_sec_inner="0xUNSET" AC_MSG_RESULT([ok (${ARCH_MAX}-${VGCONF_OS})]) @@ -576,24 +576,24 @@ case "$ARCH_MAX-$VGCONF_OS" in VGCONF_ARCH_SEC="" VGCONF_PLATFORM_PRI_CAPS="PPC64BE_LINUX" VGCONF_PLATFORM_SEC_CAPS="" - valt_load_address_pri_norml="0x38000000" - valt_load_address_pri_inner="0x28000000" + valt_load_address_pri_norml="0x58000000" + valt_load_address_pri_inner="0x38000000" 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" + valt_load_address_pri_norml="0x58000000" + valt_load_address_pri_inner="0x38000000" else VGCONF_ARCH_PRI="ppc64be" VGCONF_ARCH_SEC="ppc32" VGCONF_PLATFORM_PRI_CAPS="PPC64BE_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" + valt_load_address_pri_norml="0x58000000" + valt_load_address_pri_inner="0x38000000" + valt_load_address_sec_norml="0x58000000" + valt_load_address_sec_inner="0x38000000" fi AC_MSG_RESULT([ok (${ARCH_MAX}-${VGCONF_OS})]) ;; @@ -605,8 +605,8 @@ case "$ARCH_MAX-$VGCONF_OS" in VGCONF_ARCH_SEC="" VGCONF_PLATFORM_PRI_CAPS="PPC64LE_LINUX" VGCONF_PLATFORM_SEC_CAPS="" - valt_load_address_pri_norml="0x38000000" - valt_load_address_pri_inner="0x28000000" + valt_load_address_pri_norml="0x58000000" + valt_load_address_pri_inner="0x38000000" AC_MSG_RESULT([ok (${ARCH_MAX}-${VGCONF_OS})]) ;; # Darwin gets identified as 32-bit even when it supports 64-bit. @@ -623,25 +623,25 @@ case "$ARCH_MAX-$VGCONF_OS" in 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" + valt_load_address_pri_norml="0x158000000" + valt_load_address_pri_inner="0x138000000" 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" + valt_load_address_pri_norml="0x58000000" + valt_load_address_pri_inner="0x38000000" 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" + valt_load_address_pri_norml="0x158000000" + valt_load_address_pri_inner="0x138000000" + valt_load_address_sec_norml="0x58000000" + valt_load_address_sec_inner="0x38000000" fi AC_MSG_RESULT([ok (${ARCH_MAX}-${VGCONF_OS})]) ;; @@ -649,8 +649,8 @@ case "$ARCH_MAX-$VGCONF_OS" in VGCONF_ARCH_PRI="arm" VGCONF_PLATFORM_PRI_CAPS="ARM_LINUX" VGCONF_PLATFORM_SEC_CAPS="" - valt_load_address_pri_norml="0x38000000" - valt_load_address_pri_inner="0x28000000" + valt_load_address_pri_norml="0x58000000" + valt_load_address_pri_inner="0x38000000" valt_load_address_sec_norml="0xUNSET" valt_load_address_sec_inner="0xUNSET" AC_MSG_RESULT([ok (${host_cpu}-${host_os})]) @@ -663,24 +663,24 @@ case "$ARCH_MAX-$VGCONF_OS" in VGCONF_ARCH_SEC="" VGCONF_PLATFORM_PRI_CAPS="ARM64_LINUX" VGCONF_PLATFORM_SEC_CAPS="" - valt_load_address_pri_norml="0x38000000" - valt_load_address_pri_inner="0x28000000" + valt_load_address_pri_norml="0x58000000" + valt_load_address_pri_inner="0x38000000" elif test x$vg_cv_only32bit = xyes; then VGCONF_ARCH_PRI="arm" VGCONF_ARCH_SEC="" VGCONF_PLATFORM_PRI_CAPS="ARM_LINUX" VGCONF_PLATFORM_SEC_CAPS="" - valt_load_address_pri_norml="0x38000000" - valt_load_address_pri_inner="0x28000000" + valt_load_address_pri_norml="0x58000000" + valt_load_address_pri_inner="0x38000000" else VGCONF_ARCH_PRI="arm64" VGCONF_ARCH_SEC="arm" VGCONF_PLATFORM_PRI_CAPS="ARM64_LINUX" VGCONF_PLATFORM_SEC_CAPS="ARM_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" + valt_load_address_pri_norml="0x58000000" + valt_load_address_pri_inner="0x38000000" + valt_load_address_sec_norml="0x58000000" + valt_load_address_sec_inner="0x38000000" fi AC_MSG_RESULT([ok (${ARCH_MAX}-${VGCONF_OS})]) ;; @@ -701,8 +701,8 @@ case "$ARCH_MAX-$VGCONF_OS" in VGCONF_ARCH_PRI="mips32" VGCONF_PLATFORM_PRI_CAPS="MIPS32_LINUX" VGCONF_PLATFORM_SEC_CAPS="" - valt_load_address_pri_norml="0x38000000" - valt_load_address_pri_inner="0x28000000" + valt_load_address_pri_norml="0x58000000" + valt_load_address_pri_inner="0x38000000" valt_load_address_sec_norml="0xUNSET" valt_load_address_sec_inner="0xUNSET" AC_MSG_RESULT([ok (${ARCH_MAX}-${VGCONF_OS})]) @@ -711,8 +711,8 @@ case "$ARCH_MAX-$VGCONF_OS" in VGCONF_ARCH_PRI="mips64" VGCONF_PLATFORM_PRI_CAPS="MIPS64_LINUX" VGCONF_PLATFORM_SEC_CAPS="" - valt_load_address_pri_norml="0x38000000" - valt_load_address_pri_inner="0x28000000" + valt_load_address_pri_norml="0x58000000" + valt_load_address_pri_inner="0x38000000" valt_load_address_sec_norml="0xUNSET" valt_load_address_sec_inner="0xUNSET" AC_MSG_RESULT([ok (${ARCH_MAX}-${VGCONF_OS})]) @@ -722,8 +722,8 @@ case "$ARCH_MAX-$VGCONF_OS" in VGCONF_ARCH_SEC="" VGCONF_PLATFORM_PRI_CAPS="X86_SOLARIS" VGCONF_PLATFORM_SEC_CAPS="" - valt_load_address_pri_norml="0x38000000" - valt_load_address_pri_inner="0x28000000" + valt_load_address_pri_norml="0x58000000" + valt_load_address_pri_inner="0x38000000" valt_load_address_sec_norml="0xUNSET" valt_load_address_sec_inner="0xUNSET" AC_MSG_RESULT([ok (${ARCH_MAX}-${VGCONF_OS})]) @@ -736,24 +736,24 @@ case "$ARCH_MAX-$VGCONF_OS" in VGCONF_ARCH_SEC="" VGCONF_PLATFORM_PRI_CAPS="AMD64_SOLARIS" VGCONF_PLATFORM_SEC_CAPS="" - valt_load_address_pri_norml="0x38000000" - valt_load_address_pri_inner="0x28000000" + valt_load_address_pri_norml="0x58000000" + valt_load_address_pri_inner="0x38000000" elif test x$vg_cv_only32bit = xyes; then VGCONF_ARCH_PRI="x86" VGCONF_ARCH_SEC="" VGCONF_PLATFORM_PRI_CAPS="X86_SOLARIS" VGCONF_PLATFORM_SEC_CAPS="" - valt_load_address_pri_norml="0x38000000" - valt_load_address_pri_inner="0x28000000" + valt_load_address_pri_norml="0x58000000" + valt_load_address_pri_inner="0x38000000" else VGCONF_ARCH_PRI="amd64" VGCONF_ARCH_SEC="x86" VGCONF_PLATFORM_PRI_CAPS="AMD64_SOLARIS" VGCONF_PLATFORM_SEC_CAPS="X86_SOLARIS" - valt_load_address_pri_norml="0x38000000" - valt_load_address_pri_inner="0x28000000" - valt_load_address_sec_norml="0x38000000" - valt_load_address_sec_inner="0x28000000" + valt_load_address_pri_norml="0x58000000" + valt_load_address_pri_inner="0x38000000" + valt_load_address_sec_norml="0x58000000" + valt_load_address_sec_inner="0x38000000" fi AC_MSG_RESULT([ok (${ARCH_MAX}-${VGCONF_OS})]) ;; diff --git a/coregrind/link_tool_exe_darwin.in b/coregrind/link_tool_exe_darwin.in index c11995414a..2e00307ca7 100644 --- a/coregrind/link_tool_exe_darwin.in +++ b/coregrind/link_tool_exe_darwin.in @@ -38,7 +38,7 @@ # # /usr/bin/ld -static -arch x86_64 -macosx_version_min 10.6 \ # -o memcheck-amd64-darwin -u __start -e __start \ -# -image_base 0x138000000 -stack_addr 0x13c000000 \ +# -image_base 0x158000000 -stack_addr 0x13c000000 \ # -stack_size 0x800000 \ # memcheck_amd*.o \ # ../coregrind/libcoregrind-amd64-darwin.a \ @@ -48,7 +48,7 @@ # # /usr/bin/ld -static -arch i386 -macosx_version_min 10.6 \ # -o memcheck-x86-darwin -u __start -e __start \ -# -image_base 0x38000000 -stack_addr 0x3c000000 \ +# -image_base 0x58000000 -stack_addr 0x3c000000 \ # -stack_size 0x800000 \ # memcheck_x86*.o \ # ../coregrind/libcoregrind-x86-darwin.a \ diff --git a/coregrind/m_aspacemgr/aspacemgr-linux.c b/coregrind/m_aspacemgr/aspacemgr-linux.c index c68fea976c..32173c69c2 100644 --- a/coregrind/m_aspacemgr/aspacemgr-linux.c +++ b/coregrind/m_aspacemgr/aspacemgr-linux.c @@ -1655,7 +1655,7 @@ Addr VG_(am_startup) ( Addr sp_at_startup ) | | |--------------------------------| | client stack | - |--------------------------------| 0x38000000 + |--------------------------------| 0x58000000 | V's text | |--------------------------------| | | @@ -1688,7 +1688,7 @@ Addr VG_(am_startup) ( Addr sp_at_startup ) | | |--------------------------------| | client stack | - |--------------------------------| 0x00000000_38000000 + |--------------------------------| 0x00000000_58000000 | V's text | |--------------------------------| | | @@ -1723,9 +1723,9 @@ Addr VG_(am_startup) ( Addr sp_at_startup ) aspacem_cStart = aspacem_minAddr; # ifdef ENABLE_INNER - suggested_clstack_end = (Addr) 0x27ff0000 - 1; // 64kB below V's text -# else suggested_clstack_end = (Addr) 0x37ff0000 - 1; // 64kB below V's text +# else + suggested_clstack_end = (Addr) 0x57ff0000 - 1; // 64kB below V's text # endif // --- Linux -------------------------------------------- diff --git a/coregrind/m_gdbserver/server.c b/coregrind/m_gdbserver/server.c index 1f3d13dfde..ca0d7bd548 100644 --- a/coregrind/m_gdbserver/server.c +++ b/coregrind/m_gdbserver/server.c @@ -339,7 +339,7 @@ int handle_gdb_valgrind_command (char *mon, OutputSink *sink_wanted_at_return) do not, suggest a 'likely somewhat working' address: */ const Addr tool_text_start = tooldi ? - VG_(DebugInfo_get_text_avma) (tooldi) : 0x38000000; + VG_(DebugInfo_get_text_avma) (tooldi) : 0x58000000; const NSegment *toolseg = tooldi ? VG_(am_find_nsegment) (VG_(DebugInfo_get_text_avma) (tooldi)) diff --git a/docs/xml/manual-core-adv.xml b/docs/xml/manual-core-adv.xml index d71b324831..80190d6269 100644 --- a/docs/xml/manual-core-adv.xml +++ b/docs/xml/manual-core-adv.xml @@ -1516,9 +1516,9 @@ problems or bugs.