Runtime access checks on virtual method calls
At verification time we may not know that an illegal access or method
not found exception should be raised and so we defer the decision to
runtime. When the decision is deferred we perform an appropriate slow
path method invocation that can check for access violations.
This change also attempts to reduce code duplication, improve the
diagnostic information in exceptions, clean up field slow paths slightly
and to move the slow path calls lower in the Thread class so that they
don't effect the offsets of data items when calls are added or removed.
Change-Id: I8376b83dcd7e302cbbddf44c1a55a25687b9dcdb
diff --git a/src/runtime_support.h b/src/runtime_support.h
index b9c03e4..c8db48c 100644
--- a/src/runtime_support.h
+++ b/src/runtime_support.h
@@ -70,6 +70,9 @@
extern "C" void art_do_long_jump(uint32_t*, uint32_t*);
extern "C" void art_handle_fill_data_from_code(void*, void*);
extern "C" void art_invoke_interface_trampoline(uint32_t, void*);
+ extern "C" void art_invoke_interface_trampoline_with_access_check(uint32_t, void*);
+ extern "C" void art_invoke_super_trampoline_with_access_check(uint32_t, void*);
+ extern "C" void art_invoke_virtual_trampoline_with_access_check(uint32_t, void*);
extern "C" void art_lock_object_from_code(void*);
extern "C" void art_object_init_from_code(void*);
extern "C" void art_test_suspend();