Add support for `LOCAL_SANITIZE := integer`.

This also does a bit of cleanup in config_sanitizers.mk. The result is
that `LOCAL_SANITIZE := <any arbitrary ubsan group>` should function
fine for both host and target.

This is a superset of LOCAL_DETECT_INTEGER_OVERFLOWS, so remove that.
This also checks integer division by zero.  It's supposed to cover
shifting undefined behaviors as well, but apparently it does not
(though `LOCAL_SANITIZE := shift` works fine).

Change-Id: I4ac99eafa6920a3f8cb82af37ce56ff0fdb95223
diff --git a/core/clang/config.mk b/core/clang/config.mk
index 512b116..4875ea1 100644
--- a/core/clang/config.mk
+++ b/core/clang/config.mk
@@ -150,7 +150,7 @@
 ADDRESS_SANITIZER_CONFIG_EXTRA_CFLAGS := -fno-omit-frame-pointer
 ADDRESS_SANITIZER_CONFIG_EXTRA_LDFLAGS := -Wl,-u,__asan_preinit
 
-ADDRESS_SANITIZER_CONFIG_EXTRA_SHARED_LIBRARIES := libdl
+ADDRESS_SANITIZER_CONFIG_EXTRA_SHARED_LIBRARIES :=
 ADDRESS_SANITIZER_CONFIG_EXTRA_STATIC_LIBRARIES := libasan
 
 # This allows us to use the superset of functionality that compiler-rt
diff --git a/core/clear_vars.mk b/core/clear_vars.mk
index e352cc5..f30c8ba 100644
--- a/core/clear_vars.mk
+++ b/core/clear_vars.mk
@@ -150,7 +150,6 @@
 LOCAL_CTS_TEST_PACKAGE:=
 LOCAL_CTS_TEST_RUNNER:=
 LOCAL_CLANG:=
-LOCAL_DETECT_INTEGER_OVERFLOWS:=
 LOCAL_JAR_EXCLUDE_FILES:=
 LOCAL_JAR_PACKAGES:=
 LOCAL_JAR_EXCLUDE_PACKAGES:=
diff --git a/core/config_sanitizers.mk b/core/config_sanitizers.mk
index 9cff6ea..7ebbf9f 100644
--- a/core/config_sanitizers.mk
+++ b/core/config_sanitizers.mk
@@ -41,14 +41,6 @@
 
 ifneq ($(filter default-ub,$(my_sanitize)),)
   my_sanitize := $(CLANG_DEFAULT_UB_CHECKS)
-
-  ifdef LOCAL_IS_HOST_MODULE
-    my_cflags += -fno-sanitize-recover=all
-    my_ldlibs += -ldl
-  else
-    my_cflags += -fsanitize-undefined-trap-on-error
-    my_shared_libraries += libdl
-  endif
 endif
 
 ifneq ($(my_sanitize),)
@@ -56,7 +48,13 @@
   my_cflags += -fsanitize=$(fsanitize_arg)
 
   ifdef LOCAL_IS_HOST_MODULE
+    my_cflags += -fno-sanitize-recover=all
     my_ldflags += -fsanitize=$(fsanitize_arg)
+    my_ldlibs += -ldl
+  else
+    my_cflags += -fsanitize-undefined-trap-on-error
+    my_cflags += -ftrap-function=abort
+    my_shared_libraries += libdl
   endif
 endif
 
@@ -68,7 +66,7 @@
   ifdef LOCAL_IS_HOST_MODULE
     # -nodefaultlibs (provided with libc++) prevents the driver from linking
     # libraries needed with -fsanitize=address. http://b/18650275 (WAI)
-    my_ldlibs += -lm -ldl -lpthread
+    my_ldlibs += -lm -lpthread
     my_ldflags += -Wl,--no-as-needed
   else
     # ASan runtime library must be the first in the link order.
@@ -81,27 +79,12 @@
 endif
 
 ifneq ($(filter undefined,$(my_sanitize)),)
-  my_cflags += -fno-sanitize-recover=all
-
-  ifdef LOCAL_IS_HOST_MODULE
-    my_ldlibs += -ldl
-  else
+  ifndef LOCAL_IS_HOST_MODULE
     $(error ubsan is not yet supported on the target)
   endif
 endif
 
-
 ifneq ($(strip $(LOCAL_SANITIZE_RECOVER)),)
   recover_arg := $(subst $(space),$(comma),$(LOCAL_SANITIZE_RECOVER)),
   my_cflags += -fsanitize-recover=$(recover_arg)
 endif
-
-ifeq ($(strip $(LOCAL_DETECT_INTEGER_OVERFLOWS)),true)
-  ifeq ($(my_clang),true)
-    my_cflags += -fsanitize=signed-integer-overflow,unsigned-integer-overflow
-    my_cflags += -ftrap-function=abort
-    my_cflags += -fsanitize-undefined-trap-on-error
-  else
-    $(error $(LOCAL_MODULE): You must enable LOCAL_CLANG:=true to use LOCAL_DETECT_INTEGER_OVERFLOWS)
-  endif
-endif