summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2014-05-08 14:20:04 +0200
committerStephan Bergmann <sbergman@redhat.com>2014-05-08 14:22:00 +0200
commiteae3f52f94f2ce3633539ad782d5c1e768c52089 (patch)
treeda3cc146f5eea6c83179a88ed8125605041349ec
parent6d14a2c264506e8d5272e87e99f140b1f976b6ef (diff)
New --disable-runtime-optimizations
...to better serve the needs of tools like -fsanitize=address Change-Id: Ic2f2b981b2f5c1bc95ff91bc7a8d21fbb695dc8d
-rw-r--r--config_host.mk.in1
-rw-r--r--config_host/config_options.h.in3
-rw-r--r--configure.ac33
-rw-r--r--jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx10
-rw-r--r--sal/Library_sal.mk2
5 files changed, 44 insertions, 5 deletions
diff --git a/config_host.mk.in b/config_host.mk.in
index 6b68d93909ff..ca57978dbfde 100644
--- a/config_host.mk.in
+++ b/config_host.mk.in
@@ -159,6 +159,7 @@ export ENABLE_PDFIMPORT=@ENABLE_PDFIMPORT@
export ENABLE_RANDR=@ENABLE_RANDR@
export ENABLE_RELEASE_BUILD=@ENABLE_RELEASE_BUILD@
export ENABLE_REPORTBUILDER=@ENABLE_REPORTBUILDER@
+export ENABLE_RUNTIME_OPTIMIZATIONS=@ENABLE_RUNTIME_OPTIMIZATIONS@
export ENABLE_SCRIPTING_BEANSHELL=@ENABLE_SCRIPTING_BEANSHELL@
export ENABLE_SCRIPTING_JAVASCRIPT=@ENABLE_SCRIPTING_JAVASCRIPT@
export ENABLE_SDREMOTE=@ENABLE_SDREMOTE@
diff --git a/config_host/config_options.h.in b/config_host/config_options.h.in
index 6c882d7fedcf..0223f089ce2b 100644
--- a/config_host/config_options.h.in
+++ b/config_host/config_options.h.in
@@ -9,7 +9,8 @@
* Whether we want to link as many object files as possible into one big object.
* True in case of --enable-lto or --enable-mergelibs.
*/
-
#define STATIC_LINKING 0
+#define ENABLE_RUNTIME_OPTIMIZATIONS 0
+
#endif
diff --git a/configure.ac b/configure.ac
index 682aee6b211a..4811cd300437 100644
--- a/configure.ac
+++ b/configure.ac
@@ -967,6 +967,15 @@ AC_ARG_ENABLE(symbols,
This enables -g compiler flag for GCC or equivalent,
without changing anything else compared to productive code.]))
+AC_ARG_ENABLE(runtime-optimizations,
+ AS_HELP_STRING([--disable-runtime-optimizations],
+ [Statically disable certain runtime optimizations (like rtl/alloc.h or
+ JVM JIT) that are known to interact badly with certain dynamic analysis
+ tools (like -fsanitize=address or Valgrind). By default, disabled iff
+ CC contains "-fsanitize=address". (For Valgrind, those runtime
+ optimizations are typcially disabled dynamically via
+ RUNNING_ON_VALGRIND.)]))
+
AC_ARG_ENABLE(compiler-plugins,
AS_HELP_STRING([--enable-compiler-plugins],
[Enable compiler plugins that will perform additional checks during
@@ -5625,6 +5634,30 @@ AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT4,$SAL_TYPES_ALIGNMENT4)
AC_DEFINE_UNQUOTED(SAL_TYPES_ALIGNMENT8,$SAL_TYPES_ALIGNMENT8)
dnl ===================================================================
+dnl Check whether to enable runtime optimizations
+dnl ===================================================================
+ENABLE_RUNTIME_OPTIMIZATIONS=
+AC_MSG_CHECKING([whether to enable runtime optimizations])
+if test -z "$enable_runtime_optimizations"; then
+ for i in $CC; do
+ case $i in
+ -fsanitize=address)
+ enable_runtime_optimizations=no
+ break
+ ;;
+ esac
+ done
+fi
+if test "$enable_runtime_optimizations" != no; then
+ ENABLE_RUNTIME_OPTIMIZATIONS=TRUE
+ AC_DEFINE(ENABLE_RUNTIME_OPTIMIZATIONS)
+ AC_MSG_RESULT([yes])
+else
+ AC_MSG_RESULT([no])
+fi
+AC_SUBST([ENABLE_RUNTIME_OPTIMIZATIONS])
+
+dnl ===================================================================
dnl Check if valgrind headers are available
dnl ===================================================================
ENABLE_VALGRIND=
diff --git a/jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx b/jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx
index ca816cb23595..266cdc6030d5 100644
--- a/jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx
+++ b/jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx
@@ -34,6 +34,7 @@
#include <string.h>
#include "boost/scoped_array.hpp"
+#include "config_options.h"
#include "osl/diagnose.h"
#include "rtl/ustring.hxx"
#include "rtl/ustrbuf.hxx"
@@ -58,10 +59,13 @@
#ifdef ANDROID
#include <osl/detail/android-bootstrap.h>
#else
-#if defined HAVE_VALGRIND_HEADERS
+#if !ENABLE_RUNTIME_OPTIMIZATIONS
+#define FORCE_INTERPRETED 1
+#elif defined HAVE_VALGRIND_HEADERS
#include <valgrind/valgrind.h>
+#define FORCE_INTERPRETED RUNNING_ON_VALGRIND
#else
-#define RUNNING_ON_VALGRIND 0
+#define FORCE_INTERPRETED 0
#endif
#endif
@@ -627,7 +631,7 @@ javaPluginError jfw_plugin_startJavaVirtualMachine(
// Valgrind typically emits many false errors when executing JIT'ed JVM
// code, so force the JVM into interpreted mode:
- bool forceInterpreted = RUNNING_ON_VALGRIND > 0;
+ bool forceInterpreted = FORCE_INTERPRETED > 0;
// Some testing with Java 1.4 showed that JavaVMOption.optionString has to
// be encoded with the system encoding (i.e., osl_getThreadTextEncoding):
diff --git a/sal/Library_sal.mk b/sal/Library_sal.mk
index d7c28a575dc8..1d88f78cf396 100644
--- a/sal/Library_sal.mk
+++ b/sal/Library_sal.mk
@@ -20,7 +20,7 @@ $(eval $(call gb_Library_set_include,sal,\
))
$(eval $(call gb_Library_add_defs,sal,\
- $(if $(filter $(ALLOC),SYS_ALLOC TCMALLOC JEMALLOC), \
+ $(if $(filter $(ALLOC),SYS_ALLOC TCMALLOC JEMALLOC)$(filter-out X$(ENABLE_RUNTIME_OPTIMIZATIONS),XTRUE), \
-DFORCE_SYSALLOC \
) \
$(if $(filter $(OS),IOS), \