Merge "cdefs.h: add artificial attribute to FORTIFY_SOURCE functions"
diff --git a/linker/linker.cpp b/linker/linker.cpp
index be2b45a..fc46172 100644
--- a/linker/linker.cpp
+++ b/linker/linker.cpp
@@ -1936,14 +1936,19 @@
return false;
}
break;
-#if !defined(__LP64__)
case DT_PLTREL:
- if (d->d_un.d_val != DT_REL) {
- DL_ERR("unsupported DT_RELA in \"%s\"", name);
+#if defined(USE_RELA)
+ if (d->d_un.d_val != DT_RELA) {
+ DL_ERR("unsupported DT_PLTREL in \"%s\"; expected DT_RELA", name);
return false;
}
- break;
+#else
+ if (d->d_un.d_val != DT_REL) {
+ DL_ERR("unsupported DT_PLTREL in \"%s\"; expected DT_REL", name);
+ return false;
+ }
#endif
+ break;
case DT_JMPREL:
#if defined(USE_RELA)
plt_rela = reinterpret_cast<ElfW(Rela)*>(load_bias + d->d_un.d_ptr);
@@ -2120,6 +2125,11 @@
mips_gotsym = d->d_un.d_val;
break;
#endif
+ case DT_VERSYM:
+ case DT_VERDEF:
+ case DT_VERDEFNUM:
+ // Ignore: bionic does not support symbol versioning...
+ break;
default:
if (!relocating_linker) {
diff --git a/tests/Android.mk b/tests/Android.mk
index 039057b..9759c71 100644
--- a/tests/Android.mk
+++ b/tests/Android.mk
@@ -321,6 +321,51 @@
build_target := NATIVE_TEST
include $(LOCAL_PATH)/Android.build.mk
+# -----------------------------------------------------------------------------
+# Compile time tests.
+# -----------------------------------------------------------------------------
+
+# Some of these are intentionally using = instead of := since we need access to
+# some variables not initialtized until we're in the build system.
+
+include $(CLEAR_VARS)
+LOCAL_ADDITIONAL_DEPENDENCIES := \
+ $(LOCAL_PATH)/Android.mk \
+ $(LOCAL_PATH)/file-check-cxx \
+ | $(HOST_OUT_EXECUTABLES)/FileCheck$(HOST_EXECUTABLE_SUFFIX) \
+
+LOCAL_CXX = $(LOCAL_PATH)/file-check-cxx \
+ $(HOST_OUT_EXECUTABLES)/FileCheck \
+ $($(LOCAL_2ND_ARCH_VAR_PREFIX)CXX_BARE) \
+ GCC \
+
+LOCAL_CLANG := false
+LOCAL_MODULE := bionic-compile-time-tests-g++
+LOCAL_CXXFLAGS := -Wall
+LOCAL_SRC_FILES :=
+include $(BUILD_STATIC_LIBRARY)
+
+include $(CLEAR_VARS)
+LOCAL_ADDITIONAL_DEPENDENCIES := \
+ $(LOCAL_PATH)/Android.mk \
+ $(LOCAL_PATH)/file-check-cxx \
+ | $(HOST_OUT_EXECUTABLES)/FileCheck$(HOST_EXECUTABLE_SUFFIX) \
+
+LOCAL_CXX := $(LOCAL_PATH)/file-check-cxx \
+ $(HOST_OUT_EXECUTABLES)/FileCheck \
+ $(LLVM_PREBUILTS_PATH)/clang++ \
+ CLANG \
+
+LOCAL_CLANG := true
+LOCAL_MODULE := bionic-compile-time-tests-clang++
+LOCAL_CXXFLAGS := -Wall
+LOCAL_SRC_FILES :=
+include $(BUILD_STATIC_LIBRARY)
+
+# -----------------------------------------------------------------------------
+# Host glibc tests.
+# -----------------------------------------------------------------------------
+
ifneq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),arm mips x86))
LINKER = linker64
NATIVE_TEST_SUFFIX=64
diff --git a/tests/file-check-cxx b/tests/file-check-cxx
new file mode 100755
index 0000000..8ece835
--- /dev/null
+++ b/tests/file-check-cxx
@@ -0,0 +1,13 @@
+#!/bin/bash
+FILECHECK=$1
+CXX=$2
+PREFIX=$3
+ARGS=${*:4}
+SOURCE=$(echo $ARGS | grep -oP '\S+\.cpp\b')
+OBJ=$(echo $ARGS | grep -oP '\S+\.o\b')
+$CXX $ARGS 2>&1 | $FILECHECK -check-prefix=$PREFIX $SOURCE
+if [ "$?" -eq 0 ]; then
+ touch $OBJ
+else
+ exit 1
+fi