Proxy implementation
This rounds out the proxy implementation by adding missing pieces to the
class linker, extending tests and fixing issues in the runtime support.
There are also some tweaks for performance and to clean up Method/Object
a little.
A unit test of the functionality is "art/test/run-test 044"
Change-Id: Id94102d10b81cd9b12b95ba8618f6187490204c4
diff --git a/src/runtime_support_asm.S b/src/runtime_support_asm.S
index 2076fad..8ef3da8 100644
--- a/src/runtime_support_asm.S
+++ b/src/runtime_support_asm.S
@@ -485,8 +485,9 @@
add r3, sp, #12 @ pointer to r2/r3/LR/caller's Method**/out-args as second arg
blx artProxyInvokeHandler @ (Method* proxy method, receiver, Thread*, args...)
ldr r12, [r9, #THREAD_EXCEPTION_OFFSET] @ load Thread::Current()->exception_
- ldrd r0, [sp, #12] @ load r0/r1 from r2/r3 that were overwritten with the out args
- RESTORE_REF_AND_ARGS_CALLEE_SAVE_FRAME
+ ldr lr, [sp, #44] @ restore lr
+ ldrd r0, [sp, #12] @ load r0/r1 from r2/r3 that were overwritten with the out args
+ add sp, #48 @ pop frame
cmp r12, #0 @ success if no exception is pending
bxeq lr @ return on success
DELIVER_PENDING_EXCEPTION
@@ -588,4 +589,9 @@
call artDeliverExceptionFromCode // artDeliverExceptionFromCode(Throwable*, Thread*, SP)
int3
+ // TODO
+ .global art_proxy_invoke_handler
+art_proxy_invoke_handler:
+ int3
+
#endif