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());