diff options
-rw-r--r-- | config_host.mk.in | 1 | ||||
-rw-r--r-- | config_host/config_options.h.in | 3 | ||||
-rw-r--r-- | configure.ac | 33 | ||||
-rw-r--r-- | jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx | 10 | ||||
-rw-r--r-- | sal/Library_sal.mk | 2 |
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), \ |