Move the runtime support function lookup callback to runtime_support_llvm.cc.
Change-Id: I5384543966880742a814cfac398edd30060e06d9
diff --git a/src/compiler_llvm/runtime_support_llvm.cc b/src/compiler_llvm/runtime_support_llvm.cc
index e3a981e..6dd0733 100644
--- a/src/compiler_llvm/runtime_support_llvm.cc
+++ b/src/compiler_llvm/runtime_support_llvm.cc
@@ -142,4 +142,58 @@
void art_set_current_thread_from_code(void* thread_object_addr) {
}
+
+//----------------------------------------------------------------------------
+// Runtime Support Function Lookup Callback
+//----------------------------------------------------------------------------
+
+void* art_find_runtime_support_func(void* context, char const* name) {
+ struct func_entry_t {
+ char const* name;
+ size_t name_len;
+ void* addr;
+ };
+
+ static struct func_entry_t const tab[] = {
+#define DEF(NAME, ADDR) \
+ { NAME, sizeof(NAME) - 1, (void *)(&(ADDR)) },
+
+ DEF("art_push_shadow_frame_from_code", art_push_shadow_frame_from_code)
+ DEF("art_pop_shadow_frame_from_code", art_pop_shadow_frame_from_code)
+ DEF("art_is_exception_pending_from_code", art_is_exception_pending_from_code)
+ DEF("art_throw_div_zero_from_code", art_throw_div_zero_from_code)
+ DEF("art_throw_array_bounds_from_code", art_throw_array_bounds_from_code)
+ DEF("art_throw_no_such_method_from_code", art_throw_no_such_method_from_code)
+ DEF("art_throw_null_pointer_exception_from_code", art_throw_null_pointer_exception_from_code)
+ DEF("art_throw_stack_overflow_from_code", art_throw_stack_overflow_from_code)
+ DEF("art_throw_exception_from_code", art_throw_exception_from_code)
+ DEF("art_find_catch_block_from_code", art_find_catch_block_from_code)
+ DEF("art_test_suspend_from_code", art_test_suspend_from_code)
+ DEF("art_set_current_thread_from_code", art_set_current_thread_from_code)
+ DEF("printf", printf)
+ DEF("scanf", scanf)
+ DEF("__isoc99_scanf", scanf)
+ DEF("rand", rand)
+ DEF("time", time)
+ DEF("srand", srand)
+#undef DEF
+ };
+
+ static size_t const tab_size = sizeof(tab) / sizeof(struct func_entry_t);
+
+ // Note: Since our table is small, we are using trivial O(n) searching
+ // function. For bigger table, it will be better to use binary
+ // search or hash function.
+ size_t i;
+ size_t name_len = strlen(name);
+ for (i = 0; i < tab_size; ++i) {
+ if (name_len == tab[i].name_len && strcmp(name, tab[i].name) == 0) {
+ return tab[i].addr;
+ }
+ }
+
+ LOG(FATAL) << "Error: Can't find symbol " << name;
+ return 0;
+}
+
} // namespace art
diff --git a/src/compiler_llvm/runtime_support_llvm.h b/src/compiler_llvm/runtime_support_llvm.h
index c21cd7e..0b38bb7 100644
--- a/src/compiler_llvm/runtime_support_llvm.h
+++ b/src/compiler_llvm/runtime_support_llvm.h
@@ -39,6 +39,13 @@
void art_set_current_thread_from_code(void* thread_object_addr);
+
+//----------------------------------------------------------------------------
+// Runtime Support Function Lookup Callback
+//----------------------------------------------------------------------------
+
+void* art_find_runtime_support_func(void* context, char const* name);
+
} // namespace art
#endif // ART_SRC_COMPILER_LLVM_RUNTIME_SUPPORT_LLVM_H_
diff --git a/src/compiler_llvm/utils_llvm.cc b/src/compiler_llvm/utils_llvm.cc
index ca50f6f..bc2a7f8 100644
--- a/src/compiler_llvm/utils_llvm.cc
+++ b/src/compiler_llvm/utils_llvm.cc
@@ -107,56 +107,6 @@
return stub_name;
}
-// Linker's call back function. Added some for debugging.
-void* find_sym(void* context, char const* name) {
- struct func_entry_t {
- char const* name;
- size_t name_len;
- void* addr;
- };
-
- static struct func_entry_t const tab[] = {
-#define DEF(NAME, ADDR) \
- { NAME, sizeof(NAME) - 1, (void *)(&(ADDR)) },
-
- DEF("art_push_shadow_frame_from_code", art_push_shadow_frame_from_code)
- DEF("art_pop_shadow_frame_from_code", art_pop_shadow_frame_from_code)
- DEF("art_is_exception_pending_from_code", art_is_exception_pending_from_code)
- DEF("art_throw_div_zero_from_code", art_throw_div_zero_from_code)
- DEF("art_throw_array_bounds_from_code", art_throw_array_bounds_from_code)
- DEF("art_throw_no_such_method_from_code", art_throw_no_such_method_from_code)
- DEF("art_throw_null_pointer_exception_from_code", art_throw_null_pointer_exception_from_code)
- DEF("art_throw_stack_overflow_from_code", art_throw_stack_overflow_from_code)
- DEF("art_throw_exception_from_code", art_throw_exception_from_code)
- DEF("art_find_catch_block_from_code", art_find_catch_block_from_code)
- DEF("art_test_suspend_from_code", art_test_suspend_from_code)
- DEF("art_set_current_thread_from_code", art_set_current_thread_from_code)
- DEF("printf", printf)
- DEF("scanf", scanf)
- DEF("__isoc99_scanf", scanf)
- DEF("rand", rand)
- DEF("time", time)
- DEF("srand", srand)
-#undef DEF
- };
-
- static size_t const tab_size = sizeof(tab) / sizeof(struct func_entry_t);
-
- // Note: Since our table is small, we are using trivial O(n) searching
- // function. For bigger table, it will be better to use binary
- // search or hash function.
- size_t i;
- size_t name_len = strlen(name);
- for (i = 0; i < tab_size; ++i) {
- if (name_len == tab[i].name_len && strcmp(name, tab[i].name) == 0) {
- return tab[i].addr;
- }
- }
-
- LOG(FATAL) << "Error: Can't find symbol " << name;
- return 0;
-}
-
void LLVMLinkLoadMethod(const std::string& file_name, Method* method) {
CHECK(method != NULL);
@@ -170,7 +120,8 @@
mmap(NULL, sb.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
CHECK(image != MAP_FAILED) << "Error: Unable to mmap ELF: " << file_name;
- RSExecRef relocatable = rsloaderCreateExec(image, sb.st_size, find_sym, 0);
+ RSExecRef relocatable =
+ rsloaderCreateExec(image, sb.st_size, art_find_runtime_support_func, 0);
CHECK(relocatable) << "Error: Unable to load ELF: " << file_name;
const void *addr = rsloaderGetSymbolAddress(relocatable, LLVMLongName(method).c_str());