Fix ClassLinker::LinkInterfaceMethods bug

Also:
- Expanded class_linker_test with additional vtable and iftable coverage
- Added -fkeep-inline-functions where it works on host for debugging
- Added disabled test for running command line Fibonacci with oatexec

Change-Id: Ie295551e42493c7cca05684e71e56bf55bd362a4
diff --git a/build/Android.common.mk b/build/Android.common.mk
index 9481df2..c62b038 100644
--- a/build/Android.common.mk
+++ b/build/Android.common.mk
@@ -45,6 +45,10 @@
   ART_TARGET_CFLAGS += -DANDROID_SMP=0
 endif
 
+art_debug_cflags := -UNDEBUG
+# TODO: move -fkeep-inline-functions to art_debug_cflags when target gcc > 4.4
+ART_HOST_DEBUG_CFLAGS := $(art_debug_cflags) -fkeep-inline-functions
+ART_TARGET_DEBUG_CFLAGS := $(art_debug_cflags)
 
 DEX2OAT_SRC_FILES := \
 	src/dex2oat.cc
diff --git a/build/Android.executable.mk b/build/Android.executable.mk
index 1b2f41d..60d37ee 100644
--- a/build/Android.executable.mk
+++ b/build/Android.executable.mk
@@ -40,7 +40,12 @@
     LOCAL_CFLAGS := $(ART_HOST_CFLAGS)
   endif
   ifeq ($(4),debug)
-    LOCAL_CFLAGS += -UNDEBUG
+    ifeq ($(3),target)
+      LOCAL_CFLAGS += $(ART_TARGET_DEBUG_CFLAGS)
+    else
+      LOCAL_CFLAGS += $(ART_HOST_DEBUG_CFLAGS)
+      LOCAL_STATIC_LIBRARIES := libgtest_host
+    endif
   endif
   LOCAL_C_INCLUDES += $(ART_C_INCLUDES)
   LOCAL_SHARED_LIBRARIES := libnativehelper
diff --git a/build/Android.libart.mk b/build/Android.libart.mk
index 96202eb..48ac809 100644
--- a/build/Android.libart.mk
+++ b/build/Android.libart.mk
@@ -38,8 +38,12 @@
   else
     LOCAL_CFLAGS := $(ART_HOST_CFLAGS)
   endif
-  ifeq ($(2),debug)
-    LOCAL_CFLAGS += -UNDEBUG
+  ifeq ($(4),debug)
+    ifeq ($(3),target)
+      LOCAL_CFLAGS += $(ART_TARGET_DEBUG_CFLAGS)
+    else
+      LOCAL_CFLAGS += $(ART_HOST_DEBUG_CFLAGS)
+    endif
   endif
   LOCAL_C_INCLUDES += $(ART_C_INCLUDES)
   LOCAL_SHARED_LIBRARIES := liblog libnativehelper
diff --git a/build/Android.libarttest.mk b/build/Android.libarttest.mk
index baf37d9..6e1619d 100644
--- a/build/Android.libarttest.mk
+++ b/build/Android.libarttest.mk
@@ -25,10 +25,10 @@
   LOCAL_MODULE_TAGS := tests
   LOCAL_SRC_FILES := $(LIBARTTEST_COMMON_SRC_FILES)
   ifeq ($(1),target)
-    LOCAL_CFLAGS := $(ART_TARGET_CFLAGS) -UNDEBUG
+    LOCAL_CFLAGS := $(ART_TARGET_CFLAGS) $(ART_TARGET_DEBUG_CFLAGS)
     LOCAL_SHARED_LIBRARIES := libdl libstlport
   else
-    LOCAL_CFLAGS := $(ART_HOST_CFLAGS) -UNDEBUG
+    LOCAL_CFLAGS := $(ART_HOST_CFLAGS) $(ART_HOST_DEBUG_CFLAGS)
     LOCAL_LDLIBS := -ldl -lrt
   endif
   ifeq ($(1),target)
diff --git a/build/Android.test.mk b/build/Android.test.mk
index 798a69f..6e82b26 100644
--- a/build/Android.test.mk
+++ b/build/Android.test.mk
@@ -31,11 +31,11 @@
   LOCAL_C_INCLUDES += $(ART_C_INCLUDES)
   LOCAL_SHARED_LIBRARIES := libarttest libartd
   ifeq ($(1),target)
-    LOCAL_CFLAGS := $(ART_TARGET_CFLAGS) -UNDEBUG
+    LOCAL_CFLAGS := $(ART_TARGET_CFLAGS) $(ART_TARGET_DEBUG_CFLAGS)
     LOCAL_SHARED_LIBRARIES += libdl libicuuc libicui18n libnativehelper libstlport libz
     LOCAL_STATIC_LIBRARIES := libgtest libgtest_main
   else
-    LOCAL_CFLAGS := $(ART_HOST_CFLAGS) -UNDEBUG
+    LOCAL_CFLAGS := $(ART_HOST_CFLAGS) $(ART_HOST_DEBUG_CFLAGS)
     LOCAL_SHARED_LIBRARIES += libicuuc-host libicui18n-host libnativehelper libz-host
     LOCAL_WHOLE_STATIC_LIBRARIES := libgtest_host libgtest_main_host
   endif