ARM/ARM64: Fix throwing entrypoints to call runtime handlers.
Test: Run ART test suite including gcstress on Nexus 9.
Bug: 31468464
Change-Id: I2521675125d243be3168a2e87b70185791322b42
diff --git a/runtime/arch/arm/quick_entrypoints_arm.S b/runtime/arch/arm/quick_entrypoints_arm.S
index 0416988..0b04480 100644
--- a/runtime/arch/arm/quick_entrypoints_arm.S
+++ b/runtime/arch/arm/quick_entrypoints_arm.S
@@ -260,7 +260,7 @@
.fnstart
SETUP_SAVE_ALL_CALLEE_SAVES_FRAME r0 @ save callee saves for throw
mov r0, r9 @ pass Thread::Current
- b artDeliverPendingExceptionFromCode @ artDeliverPendingExceptionFromCode(Thread*)
+ bl artDeliverPendingExceptionFromCode @ artDeliverPendingExceptionFromCode(Thread*)
.endm
.macro NO_ARG_RUNTIME_EXCEPTION c_name, cxx_name
@@ -268,7 +268,7 @@
ENTRY \c_name
SETUP_SAVE_ALL_CALLEE_SAVES_FRAME r0 @ save all registers as basis for long jump context
mov r0, r9 @ pass Thread::Current
- b \cxx_name @ \cxx_name(Thread*)
+ bl \cxx_name @ \cxx_name(Thread*)
END \c_name
.endm
@@ -277,7 +277,7 @@
ENTRY \c_name
SETUP_SAVE_ALL_CALLEE_SAVES_FRAME r1 @ save all registers as basis for long jump context
mov r1, r9 @ pass Thread::Current
- b \cxx_name @ \cxx_name(Thread*)
+ bl \cxx_name @ \cxx_name(Thread*)
END \c_name
.endm
@@ -286,7 +286,7 @@
ENTRY \c_name
SETUP_SAVE_ALL_CALLEE_SAVES_FRAME r2 @ save all registers as basis for long jump context
mov r2, r9 @ pass Thread::Current
- b \cxx_name @ \cxx_name(Thread*)
+ bl \cxx_name @ \cxx_name(Thread*)
END \c_name
.endm
@@ -392,7 +392,7 @@
SETUP_SAVE_EVERYTHING_FRAME_CORE_REGS_SAVED r1
mov r0, lr @ pass the fault address stored in LR by the fault handler.
mov r1, r9 @ pass Thread::Current
- b artThrowNullPointerExceptionFromSignal @ (Thread*)
+ bl artThrowNullPointerExceptionFromSignal @ (Thread*)
END art_quick_throw_null_pointer_exception_from_signal
/*
@@ -753,7 +753,7 @@
.cfi_restore lr
SETUP_SAVE_ALL_CALLEE_SAVES_FRAME r2 @ save all registers as basis for long jump context
mov r2, r9 @ pass Thread::Current
- b artThrowClassCastException @ (Class*, Class*, Thread*)
+ bl artThrowClassCastException @ (Class*, Class*, Thread*)
bkpt
END art_quick_check_cast
@@ -896,7 +896,7 @@
SETUP_SAVE_ALL_CALLEE_SAVES_FRAME r3
mov r1, r2
mov r2, r9 @ pass Thread::Current
- b artThrowArrayStoreException @ (Class*, Class*, Thread*)
+ bl artThrowArrayStoreException @ (Class*, Class*, Thread*)
bkpt @ unreached
END art_quick_aput_obj
diff --git a/runtime/arch/arm64/quick_entrypoints_arm64.S b/runtime/arch/arm64/quick_entrypoints_arm64.S
index 1a8a2b2..e9d03d7 100644
--- a/runtime/arch/arm64/quick_entrypoints_arm64.S
+++ b/runtime/arch/arm64/quick_entrypoints_arm64.S
@@ -400,7 +400,7 @@
mov x0, xSELF
// Point of no return.
- b artDeliverPendingExceptionFromCode // artDeliverPendingExceptionFromCode(Thread*)
+ bl artDeliverPendingExceptionFromCode // artDeliverPendingExceptionFromCode(Thread*)
brk 0 // Unreached
.endm
@@ -433,7 +433,7 @@
ENTRY \c_name
SETUP_SAVE_ALL_CALLEE_SAVES_FRAME // save all registers as basis for long jump context
mov x0, xSELF // pass Thread::Current
- b \cxx_name // \cxx_name(Thread*)
+ bl \cxx_name // \cxx_name(Thread*)
END \c_name
.endm
@@ -442,7 +442,7 @@
ENTRY \c_name
SETUP_SAVE_ALL_CALLEE_SAVES_FRAME // save all registers as basis for long jump context.
mov x1, xSELF // pass Thread::Current.
- b \cxx_name // \cxx_name(arg, Thread*).
+ bl \cxx_name // \cxx_name(arg, Thread*).
brk 0
END \c_name
.endm
@@ -452,7 +452,7 @@
ENTRY \c_name
SETUP_SAVE_ALL_CALLEE_SAVES_FRAME // save all registers as basis for long jump context
mov x2, xSELF // pass Thread::Current
- b \cxx_name // \cxx_name(arg1, arg2, Thread*)
+ bl \cxx_name // \cxx_name(arg1, arg2, Thread*)
brk 0
END \c_name
.endm
@@ -483,8 +483,7 @@
SETUP_SAVE_EVERYTHING_FRAME_DECREMENTED_SP_SKIP_X29_LR
mov x0, lr // pass the fault address stored in LR by the fault handler.
mov x1, xSELF // pass Thread::Current.
- // TODO: Change other throwing entrypoints to use BL instead of B. http://b/31468464
- bl artThrowNullPointerExceptionFromSignal // (arg, Thread*).
+ bl artThrowNullPointerExceptionFromSignal // (arg, Thread*).
brk 0
END art_quick_throw_null_pointer_exception_from_signal
@@ -1302,7 +1301,7 @@
SETUP_SAVE_ALL_CALLEE_SAVES_FRAME // save all registers as basis for long jump context
mov x2, xSELF // pass Thread::Current
- b artThrowClassCastException // (Class*, Class*, Thread*)
+ bl artThrowClassCastException // (Class*, Class*, Thread*)
brk 0 // We should not return here...
END art_quick_check_cast
@@ -1466,10 +1465,10 @@
RESTORE_TWO_REGS_DECREASE_FRAME x0, x1, 32
SETUP_SAVE_ALL_CALLEE_SAVES_FRAME
- mov x1, x2 // Pass value.
- mov x2, xSELF // Pass Thread::Current.
- b artThrowArrayStoreException // (Object*, Object*, Thread*).
- brk 0 // Unreached.
+ mov x1, x2 // Pass value.
+ mov x2, xSELF // Pass Thread::Current.
+ bl artThrowArrayStoreException // (Object*, Object*, Thread*).
+ brk 0 // Unreached.
END art_quick_aput_obj
// Macro to facilitate adding new allocation entrypoints.