Make failures caused by unimplemented entry points much clearer.

Before:

  F 32344 32344 runtime_linux.cc:183] *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
  F 32344 32344 runtime_linux.cc:183] Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR) fault addr (nil)
  F 32344 32344 libartd.so:-1] 	#00 ??+0x3adc15 [0x5592ac15]
  F 32344 32344 libartd.so:-1] 	#01 ??+0x3ae5b9 [0x5592b5b9]
  F 32344 32344 ??:-1] 	#02 [0x55573410]
  F 32344 32344 libartd.so:-1] 	#03 ??+0x24cb86 [0x557c9b86]
  F 32344 32344 libartd.so:-1] 	#04 ??+0x24d0c3 [0x557ca0c3]
  F 32344 32344 libartd.so:-1] 	#05 art::JNI::CallStaticVoidMethodV(_JNIEnv*, _jclass*, _jmethodID*, char*)+0x48 [0x557d76e8]
  F 32344 32344 libartd.so:-1] 	#06 art::CheckJNI::CallStaticVoidMethodV(_JNIEnv*, _jclass*, _jmethodID*, char*)+0xce [0x556e5cee]
  F 32344 32344 oatexecd:-1] 	#07 _JNIEnv::CallStaticVoidMethod(_jclass*, _jmethodID*, ...)+0x29 [0x8085739]
  F 32344 32344 oatexecd:-1] 	#08 ?? [0x8073c35]
  F 32344 32344 oatexecd:-1] 	#09 ?? [0x8073fd7]
  F 32344 32344 libc.so.6:-1] 	#10 __libc_start_main()+0xe6 [0x55afcbd6]
  F 32344 32344 oatexecd:-1] 	#11 ?? [0x8071fc1]

After:

  F  5527  5527 thread.cc:81] void art::UnimplementedEntryPoint() unimplemented
  F  5527  5527 runtime.cc:160] Runtime aborting...
  F  5527  5527 runtime.cc:160] "main" prio=5 tid=1 Runnable
  F  5527  5527 runtime.cc:160]   | group="main" sCount=0 dsCount=0 obj=0x6121e928 self=0x8c0c618
  F  5527  5527 runtime.cc:160]   | sysTid=5527 nice=0 sched=0/0 cgrp=default handle=1439185696
  F  5527  5527 runtime.cc:160]   | schedstat=( 66360090 54151 15 ) utm=6 stm=0 core=20 HZ=100
  F  5527  5527 runtime.cc:160]   at java.lang.Math.ceil(Native method)
  F  5527  5527 runtime.cc:160]   at java.lang.RealToString.longDigitGenerator(RealToString.java:269)
  F  5527  5527 runtime.cc:160]   at java.lang.RealToString.convertDouble(RealToString.java:111)
  F  5527  5527 runtime.cc:160]   at java.lang.RealToString.doubleToString(RealToString.java:59)
  F  5527  5527 runtime.cc:160]   at java.lang.Double.toString(Double.java:317)
  F  5527  5527 runtime.cc:160]   at java.lang.String.valueOf(String.java:1676)
  F  5527  5527 runtime.cc:160]   at java.io.PrintStream.println(PrintStream.java:479)
  F  5527  5527 runtime.cc:160]   at ReflectionTest.testFieldReflection(ReflectionTest.java:40)
  F  5527  5527 runtime.cc:160]   at ReflectionTest.main(ReflectionTest.java:269)
  F  5527  5527 runtime.cc:160]
  F  5527  5527 libartd.so:-1] 	#00 ??+0x3adcb5 [0x5592acb5]
  F  5527  5527 libartd.so:-1] 	#01 art::Runtime::Abort(char const*, int)+0x99 [0x558a1439]
  F  5527  5527 libartd.so:-1] 	#02 art::LogMessage::~LogMessage()+0x3d0 [0x557dc060]
  F  5527  5527 libartd.so:-1] 	#03 ??+0x33f644 [0x558bc644]
  F  5527  5527 ??:-1] 	#04 [0x60735b9a]
  F  5527  5527 libartd.so:-1] 	#05 ??+0x24cb86 [0x557c9b86]
  F  5527  5527 libartd.so:-1] 	#06 ??+0x24d0c3 [0x557ca0c3]
  F  5527  5527 libartd.so:-1] 	#07 art::JNI::CallStaticVoidMethodV(_JNIEnv*, _jclass*, _jmethodID*, char*)+0x48 [0x557d76e8]
  F  5527  5527 libartd.so:-1] 	#08 art::CheckJNI::CallStaticVoidMethodV(_JNIEnv*, _jclass*, _jmethodID*, char*)+0xce [0x556e5cee]
  F  5527  5527 oatexecd:-1] 	#09 _JNIEnv::CallStaticVoidMethod(_jclass*, _jmethodID*, ...)+0x29 [0x8085739]
  F  5527  5527 oatexecd:-1] 	#10 ?? [0x8073c35]
  F  5527  5527 oatexecd:-1] 	#11 ?? [0x8073fd7]
  F  5527  5527 libc.so.6:-1] 	#12 __libc_start_main()+0xe6 [0x55afcbd6]
  F  5527  5527 oatexecd:-1] 	#13 ?? [0x8071fc1]

Change-Id: Id55f10f910ace94de3c985fabfd9a0fe15c3c8bf
diff --git a/src/oat/runtime/x86/oat_support_entrypoints_x86.cc b/src/oat/runtime/x86/oat_support_entrypoints_x86.cc
index 3fe7640..6720e3e 100644
--- a/src/oat/runtime/x86/oat_support_entrypoints_x86.cc
+++ b/src/oat/runtime/x86/oat_support_entrypoints_x86.cc
@@ -163,31 +163,31 @@
   points->pCmpgFloat = CmpgFloat;
   points->pCmplDouble = CmplDouble;
   points->pCmplFloat = CmplFloat;
-  points->pDadd = NULL;
-  points->pDdiv = NULL;
-  points->pDmul = NULL;
-  points->pDsub = NULL;
-  points->pF2d = NULL;
-  points->pFmod = NULL;
-  points->pI2d = NULL;
-  points->pL2d = NULL;
-  points->pD2f = NULL;
-  points->pFadd = NULL;
-  points->pFdiv = NULL;
-  points->pFmodf = NULL;
-  points->pFmul = NULL;
-  points->pFsub = NULL;
-  points->pI2f = NULL;
-  points->pL2f = NULL;
-  points->pD2iz = NULL;
-  points->pF2iz = NULL;
+  //points->pDadd = NULL;
+  //points->pDdiv = NULL;
+  //points->pDmul = NULL;
+  //points->pDsub = NULL;
+  //points->pF2d = NULL;
+  //points->pFmod = NULL;
+  //points->pI2d = NULL;
+  //points->pL2d = NULL;
+  //points->pD2f = NULL;
+  //points->pFadd = NULL;
+  //points->pFdiv = NULL;
+  //points->pFmodf = NULL;
+  //points->pFmul = NULL;
+  //points->pFsub = NULL;
+  //points->pI2f = NULL;
+  //points->pL2f = NULL;
+  //points->pD2iz = NULL;
+  //points->pF2iz = NULL;
   points->pIdiv = art_idiv_from_code;
   points->pIdivmod = art_idivmod_from_code;
   points->pD2l = D2L;
   points->pF2l = F2L;
   points->pLdiv = art_ldiv_from_code;
   points->pLdivmod = art_ldivmod_from_code;
-  points->pLmul = NULL;
+  //points->pLmul = NULL;
   points->pShlLong = art_lshl_from_code;
   points->pShrLong = art_lshr_from_code;
   points->pUshrLong = art_lushr_from_code;
diff --git a/src/thread.cc b/src/thread.cc
index dc66319..fbf2390 100644
--- a/src/thread.cc
+++ b/src/thread.cc
@@ -77,10 +77,20 @@
   card_table_ = Runtime::Current()->GetHeap()->GetCardTable()->GetBiasedBegin();
 }
 
+static void UnimplementedEntryPoint() {
+  UNIMPLEMENTED(FATAL);
+}
+
 void Thread::InitFunctionPointers() {
 #if defined(ART_USE_LLVM_COMPILER)
   memset(&entrypoints_, 0, sizeof(entrypoints_));
 #else
+  // Insert a placeholder so we can easily tell if we call an unimplemented entry point.
+  uintptr_t* begin = reinterpret_cast<uintptr_t*>(&entrypoints_);
+  uintptr_t* end = reinterpret_cast<uintptr_t*>(reinterpret_cast<uint8_t*>(begin) + sizeof(entrypoints_));
+  for (uintptr_t* it = begin; it != end; ++it) {
+    *it = reinterpret_cast<uintptr_t>(UnimplementedEntryPoint);
+  }
   InitEntryPoints(&entrypoints_);
 #endif
 }