diff options
| -rw-r--r-- | runtime/parsed_options.cc | 2 | ||||
| -rw-r--r-- | runtime/runtime.cc | 6 | ||||
| -rw-r--r-- | runtime/runtime.h | 3 | ||||
| -rw-r--r-- | runtime/runtime_options.def | 1 | ||||
| -rw-r--r-- | test/115-native-bridge/run | 2 |
5 files changed, 12 insertions, 2 deletions
diff --git a/runtime/parsed_options.cc b/runtime/parsed_options.cc index aa64ee3702..2ea4b1453d 100644 --- a/runtime/parsed_options.cc +++ b/runtime/parsed_options.cc @@ -277,6 +277,8 @@ std::unique_ptr<RuntimeParser> ParsedOptions::MakeParser(bool ignore_unrecognize .WithType<ExperimentalFlags>() .AppendValues() .IntoKey(M::Experimental) + .Define("-Xforce-nb-testing") + .IntoKey(M::ForceNativeBridge) .Ignore({ "-ea", "-da", "-enableassertions", "-disableassertions", "--runtime-arg", "-esa", "-dsa", "-enablesystemassertions", "-disablesystemassertions", "-Xrs", "-Xint:_", diff --git a/runtime/runtime.cc b/runtime/runtime.cc index 0c06ca672c..d5f22ef790 100644 --- a/runtime/runtime.cc +++ b/runtime/runtime.cc @@ -602,9 +602,12 @@ bool Runtime::Start() { if (is_native_bridge_loaded_) { PreInitializeNativeBridge("."); } + NativeBridgeAction action = force_native_bridge_ + ? NativeBridgeAction::kInitialize + : NativeBridgeAction::kUnload; InitNonZygoteOrPostFork(self->GetJniEnv(), /* is_system_server */ false, - NativeBridgeAction::kInitialize, + action, GetInstructionSetString(kRuntimeISA)); } @@ -939,6 +942,7 @@ bool Runtime::Init(RuntimeArgumentMap&& runtime_options_in) { allow_dex_file_fallback_ = !runtime_options.Exists(Opt::NoDexFileFallback); no_sig_chain_ = runtime_options.Exists(Opt::NoSigChain); + force_native_bridge_ = runtime_options.Exists(Opt::ForceNativeBridge); Split(runtime_options.GetOrDefault(Opt::CpuAbiList), ',', &cpu_abilist_); diff --git a/runtime/runtime.h b/runtime/runtime.h index c8c2ee530d..bec26f8eaa 100644 --- a/runtime/runtime.h +++ b/runtime/runtime.h @@ -774,6 +774,9 @@ class Runtime { // building a statically link version of dex2oat. bool no_sig_chain_; + // Force the use of native bridge even if the app ISA matches the runtime ISA. + bool force_native_bridge_; + // Whether or not a native bridge has been loaded. // // The native bridge allows running native code compiled for a foreign ISA. The way it works is, diff --git a/runtime/runtime_options.def b/runtime/runtime_options.def index 308f3bafc2..097bccb372 100644 --- a/runtime/runtime_options.def +++ b/runtime/runtime_options.def @@ -92,6 +92,7 @@ RUNTIME_OPTIONS_KEY (BackgroundGcOption, BackgroundGc) RUNTIME_OPTIONS_KEY (Unit, DisableExplicitGC) RUNTIME_OPTIONS_KEY (Unit, NoSigChain) +RUNTIME_OPTIONS_KEY (Unit, ForceNativeBridge) RUNTIME_OPTIONS_KEY (LogVerbosity, Verbose) RUNTIME_OPTIONS_KEY (unsigned int, LockProfThreshold) RUNTIME_OPTIONS_KEY (std::string, StackTraceFile) diff --git a/test/115-native-bridge/run b/test/115-native-bridge/run index ea2045b86c..aeb5721aac 100644 --- a/test/115-native-bridge/run +++ b/test/115-native-bridge/run @@ -28,4 +28,4 @@ ln -s ${LIBPATH}/libarttestd.so libarttestd2.so LEFT=$(echo ${ARGS} | sed -r 's/-Djava.library.path.*//') RIGHT=$(echo ${ARGS} | sed -r 's/.*Djava.library.path[^ ]* //') MODARGS="${LEFT} -Djava.library.path=`pwd` ${RIGHT}" -exec ${RUN} --runtime-option -XX:NativeBridge=libnativebridgetest.so ${MODARGS} NativeBridgeMain +exec ${RUN} --runtime-option -Xforce-nb-testing --runtime-option -XX:NativeBridge=libnativebridgetest.so ${MODARGS} NativeBridgeMain |