diff options
| -rw-r--r-- | runtime/Android.mk | 19 | ||||
| -rw-r--r-- | runtime/utils.cc | 3 | ||||
| -rw-r--r-- | runtime/verifier/method_verifier.cc | 4 | ||||
| -rw-r--r-- | test/800-smali/expected.txt | 1 | ||||
| -rw-r--r-- | test/800-smali/smali/b_25494456.smali | 14 | ||||
| -rw-r--r-- | test/800-smali/src/Main.java | 2 |
6 files changed, 24 insertions, 19 deletions
diff --git a/runtime/Android.mk b/runtime/Android.mk index 12fc4c20f1..1fdffe3e17 100644 --- a/runtime/Android.mk +++ b/runtime/Android.mk @@ -226,17 +226,6 @@ LIBART_COMMON_SRC_FILES += \ LIBART_TARGET_LDFLAGS := LIBART_HOST_LDFLAGS := -# Keep the __jit_debug_register_code symbol as a unique symbol during ICF for architectures where -# we use gold as the linker (arm, aarch64, x86, x86_64). The symbol is used by the debuggers to -# detect when new jit code is generated. We don't want it to be called when a different function -# with the same (empty) body is called. -JIT_DEBUG_REGISTER_CODE_LDFLAGS := -Wl,--keep-unique,__jit_debug_register_code -LIBART_TARGET_LDFLAGS_arm := $(JIT_DEBUG_REGISTER_CODE_LDFLAGS) -LIBART_TARGET_LDFLAGS_arm64 := $(JIT_DEBUG_REGISTER_CODE_LDFLAGS) -LIBART_TARGET_LDFLAGS_x86 := $(JIT_DEBUG_REGISTER_CODE_LDFLAGS) -LIBART_TARGET_LDFLAGS_x86_64 := $(JIT_DEBUG_REGISTER_CODE_LDFLAGS) -JIT_DEBUG_REGISTER_CODE_LDFLAGS := - LIBART_TARGET_SRC_FILES := \ $(LIBART_COMMON_SRC_FILES) \ jdwp/jdwp_adb.cc \ @@ -585,14 +574,8 @@ LIBART_COMMON_SRC_FILES := LIBART_HOST_DEFAULT_INSTRUCTION_SET_FEATURES := LIBART_TARGET_DEFAULT_INSTRUCTION_SET_FEATURES := 2ND_LIBART_TARGET_DEFAULT_INSTRUCTION_SET_FEATURES := -LIBART_HOST_LDFLAGS := LIBART_TARGET_LDFLAGS := -LIBART_TARGET_LDFLAGS_arm := -LIBART_TARGET_LDFLAGS_arm64 := -LIBART_TARGET_LDFLAGS_x86 := -LIBART_TARGET_LDFLAGS_x86_64 := -LIBART_TARGET_LDFLAGS_mips := -LIBART_TARGET_LDFLAGS_mips64 := +LIBART_HOST_LDFLAGS := LIBART_TARGET_SRC_FILES := LIBART_TARGET_SRC_FILES_arm := LIBART_TARGET_SRC_FILES_arm64 := diff --git a/runtime/utils.cc b/runtime/utils.cc index 48dce63f00..68db7e3a73 100644 --- a/runtime/utils.cc +++ b/runtime/utils.cc @@ -1434,7 +1434,8 @@ bool Exec(std::vector<std::string>& arg_vector, std::string* error_msg) { execv(program, &args[0]); PLOG(ERROR) << "Failed to execv(" << command_line << ")"; - exit(1); + // _exit to avoid atexit handlers in child. + _exit(1); } else { if (pid == -1) { *error_msg = StringPrintf("Failed to execv(%s) because fork failed: %s", diff --git a/runtime/verifier/method_verifier.cc b/runtime/verifier/method_verifier.cc index 2db79ab229..aae031798e 100644 --- a/runtime/verifier/method_verifier.cc +++ b/runtime/verifier/method_verifier.cc @@ -2045,6 +2045,10 @@ bool MethodVerifier::CodeFlowVerifyInstruction(uint32_t* start_guess) { } else if (reg_type.IsUninitializedTypes()) { Fail(VERIFY_ERROR_BAD_CLASS_SOFT) << "returning uninitialized object '" << reg_type << "'"; + } else if (!reg_type.IsReferenceTypes()) { + // We really do expect a reference here. + Fail(VERIFY_ERROR_BAD_CLASS_HARD) << "return-object returns a non-reference type " + << reg_type; } else if (!return_type.IsAssignableFrom(reg_type)) { if (reg_type.IsUnresolvedTypes() || return_type.IsUnresolvedTypes()) { Fail(VERIFY_ERROR_NO_CLASS) << " can't resolve returned type '" << return_type diff --git a/test/800-smali/expected.txt b/test/800-smali/expected.txt index 17c1f00c41..a590cf1e0b 100644 --- a/test/800-smali/expected.txt +++ b/test/800-smali/expected.txt @@ -46,4 +46,5 @@ b/23300986 b/23300986 (2) b/23502994 (if-eqz) b/23502994 (check-cast) +b/25494456 Done! diff --git a/test/800-smali/smali/b_25494456.smali b/test/800-smali/smali/b_25494456.smali new file mode 100644 index 0000000000..0675b27730 --- /dev/null +++ b/test/800-smali/smali/b_25494456.smali @@ -0,0 +1,14 @@ +.class public LB25494456; + +.super Ljava/lang/Object; + +# Ensure that a type mismatch (integral/float vs reference) overrides a soft failure (because of +# an unresolvable type) in return-object. + +.method public static run()Lwont/be/Resolvable; + .registers 1 + + const/4 v0, 1 + return-object v0 + +.end method diff --git a/test/800-smali/src/Main.java b/test/800-smali/src/Main.java index f75747d5c5..4844848337 100644 --- a/test/800-smali/src/Main.java +++ b/test/800-smali/src/Main.java @@ -137,6 +137,8 @@ public class Main { new Object[] { new Object() }, null, null)); testCases.add(new TestCase("b/23502994 (check-cast)", "B23502994", "runCHECKCAST", new Object[] { "abc" }, null, null)); + testCases.add(new TestCase("b/25494456", "B25494456", "run", null, new VerifyError(), + null)); } public void runTests() { |