[PATCH] tests: add bionic tests to the source tree

8 views
Skip to first unread message

Waldemar Kozaczuk

unread,
Feb 17, 2020, 11:17:05 PM2/17/20
to osv...@googlegroups.com, Waldemar Kozaczuk
Instead of cloning full bionic source repo (~70MB) everytime we need to
build tests image, this patch simply adds seven small source files
to the OSv repo. The files are copies from the directory tests/libs
of https://android.googlesource.com/platform/bionic at the commit
47ddeb1ae45dcd62c30c232c9b5490877da6185b.

Please note the bionic test source code is licenced
under permissive BSD-like license Apache 2.0.

Signed-off-by: Waldemar Kozaczuk <jwkoz...@gmail.com>
---
.gitignore | 1 -
licenses/bionic.txt | 15 ++++++
modules/dl_tests/Makefile | 9 ----
.../libs/check_rtld_next_from_library.cpp | 37 +++++++++++++
.../bionic/tests/libs/dlext_test_library.cpp | 43 +++++++++++++++
.../tests/libs/dlopen_testlib_simple.cpp | 24 +++++++++
.../tests/libs/dlsym_from_this_functions.cpp | 52 +++++++++++++++++++
.../tests/libs/dlsym_from_this_symbol.cpp | 17 ++++++
.../tests/libs/dlsym_from_this_symbol2.cpp | 18 +++++++
modules/dl_tests/bionic/tests/libs/empty.cpp | 0
10 files changed, 206 insertions(+), 10 deletions(-)
create mode 100644 licenses/bionic.txt
create mode 100644 modules/dl_tests/bionic/tests/libs/check_rtld_next_from_library.cpp
create mode 100644 modules/dl_tests/bionic/tests/libs/dlext_test_library.cpp
create mode 100644 modules/dl_tests/bionic/tests/libs/dlopen_testlib_simple.cpp
create mode 100644 modules/dl_tests/bionic/tests/libs/dlsym_from_this_functions.cpp
create mode 100644 modules/dl_tests/bionic/tests/libs/dlsym_from_this_symbol.cpp
create mode 100644 modules/dl_tests/bionic/tests/libs/dlsym_from_this_symbol2.cpp
create mode 100644 modules/dl_tests/bionic/tests/libs/empty.cpp

diff --git a/.gitignore b/.gitignore
index da64d10e..16e192db 100644
--- a/.gitignore
+++ b/.gitignore
@@ -46,7 +46,6 @@ modules/httpserver-jvm-plugin/obj/
modules/libtools/*.so
modules/libtools/*.o
modules/libyaml/usr.manifest
-modules/dl_tests/bionic/
modules/dl_tests/usr.manifest
.idea
compile_commands.json
diff --git a/licenses/bionic.txt b/licenses/bionic.txt
new file mode 100644
index 00000000..37766bde
--- /dev/null
+++ b/licenses/bionic.txt
@@ -0,0 +1,15 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
diff --git a/modules/dl_tests/Makefile b/modules/dl_tests/Makefile
index 8f3bd0da..97546205 100644
--- a/modules/dl_tests/Makefile
+++ b/modules/dl_tests/Makefile
@@ -31,18 +31,9 @@ tests := libtest_simple.so libtest_empty.so libtest_dlsym_from_this_grandchild.s
libtest_dlsym_from_this_child.so libtest_dlsym_from_this.so libdlext_test.so \
libtest_with_dependency.so libtest_check_rtld_next_from_library.so

-.PHONY: get_file
-get_file:
- if cd $(src)/modules/dl_tests/bionic; then \
- git pull; \
- else \
- git clone --depth=1 https://android.googlesource.com/platform/bionic $(src)/modules/dl_tests/bionic; \
- fi
-
all_tests := $(tests:%=dl_tests/%)

build_all:
- $(MAKE) get_file
$(MAKE) $(all_tests:%=$(out)/%)
.PHONY: build_all

diff --git a/modules/dl_tests/bionic/tests/libs/check_rtld_next_from_library.cpp b/modules/dl_tests/bionic/tests/libs/check_rtld_next_from_library.cpp
new file mode 100644
index 00000000..fb15e2ab
--- /dev/null
+++ b/modules/dl_tests/bionic/tests/libs/check_rtld_next_from_library.cpp
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <dlfcn.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+static void* g_libc_fclose_ptr;
+
+static void __attribute__((constructor)) __libc_fclose_lookup() {
+ g_libc_fclose_ptr = dlsym(RTLD_NEXT, "fclose");
+}
+
+// A libc function used for RTLD_NEXT.
+// This function in not supposed to be called.
+extern "C" int __attribute__((weak)) fclose(FILE*) {
+ abort();
+}
+
+extern "C" void* get_libc_fclose_ptr() {
+ return g_libc_fclose_ptr;
+}
+
+
diff --git a/modules/dl_tests/bionic/tests/libs/dlext_test_library.cpp b/modules/dl_tests/bionic/tests/libs/dlext_test_library.cpp
new file mode 100644
index 00000000..5c04329e
--- /dev/null
+++ b/modules/dl_tests/bionic/tests/libs/dlext_test_library.cpp
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+class A {
+public:
+ virtual int getRandomNumber() {
+ return 4; // chosen by fair dice roll.
+ // guaranteed to be random.
+ }
+
+ virtual ~A() {}
+};
+
+A a;
+
+// nested macros to make it easy to define a large amount of read-only data
+// which will require relocation.
+#define A_16 &a, &a, &a, &a, &a, &a, &a, &a, &a, &a, &a, &a, &a, &a, &a, &a,
+#define A_128 A_16 A_16 A_16 A_16 A_16 A_16 A_16 A_16
+#define A_1024 A_128 A_128 A_128 A_128 A_128 A_128 A_128 A_128
+
+extern "C" A* const lots_of_relro[] = {
+ A_1024 A_1024 A_1024 A_1024 A_1024 A_1024 A_1024 A_1024
+};
+
+extern "C" int getRandomNumber() {
+ // access the relro section (twice, in fact, once for the pointer, and once
+ // for the vtable of A) to check it's actually there.
+ return lots_of_relro[0]->getRandomNumber();
+}
diff --git a/modules/dl_tests/bionic/tests/libs/dlopen_testlib_simple.cpp b/modules/dl_tests/bionic/tests/libs/dlopen_testlib_simple.cpp
new file mode 100644
index 00000000..32269557
--- /dev/null
+++ b/modules/dl_tests/bionic/tests/libs/dlopen_testlib_simple.cpp
@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdint.h>
+#include <stdlib.h>
+
+uint32_t dlopen_testlib_taxicab_number = 1729;
+
+extern "C" bool dlopen_testlib_simple_func() {
+ return true;
+}
diff --git a/modules/dl_tests/bionic/tests/libs/dlsym_from_this_functions.cpp b/modules/dl_tests/bionic/tests/libs/dlsym_from_this_functions.cpp
new file mode 100644
index 00000000..1f357e01
--- /dev/null
+++ b/modules/dl_tests/bionic/tests/libs/dlsym_from_this_functions.cpp
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include <dlfcn.h>
+#include <stdio.h>
+
+extern int test_dlsym_symbol;
+
+int test_dlsym_symbol = -1;
+
+extern "C" int* lookup_dlsym_symbol_using_RTLD_DEFAULT() {
+ dlerror();
+ int* result = static_cast<int*>(dlsym(RTLD_DEFAULT, "test_dlsym_symbol"));
+ // TODO: remove this once b/20049306 is fixed
+ if (result == nullptr) {
+ printf("Cannot find the answer\n");
+ }
+ return result;
+}
+
+extern "C" int* lookup_dlsym_symbol2_using_RTLD_DEFAULT() {
+ dlerror();
+ int* result = static_cast<int*>(dlsym(RTLD_DEFAULT, "test_dlsym_symbol2"));
+ // TODO: remove this once b/20049306 is fixed
+ if (result == nullptr) {
+ printf("Cannot find the answer\n");
+ }
+ return result;
+}
+
+extern "C" int* lookup_dlsym_symbol_using_RTLD_NEXT() {
+ dlerror();
+ int* result = static_cast<int*>(dlsym(RTLD_NEXT, "test_dlsym_symbol"));
+ // TODO: remove this once b/20049306 is fixed
+ if (result == nullptr) {
+ printf("Cannot find the answer\n");
+ }
+ return result;
+}
+
diff --git a/modules/dl_tests/bionic/tests/libs/dlsym_from_this_symbol.cpp b/modules/dl_tests/bionic/tests/libs/dlsym_from_this_symbol.cpp
new file mode 100644
index 00000000..c3ec255c
--- /dev/null
+++ b/modules/dl_tests/bionic/tests/libs/dlsym_from_this_symbol.cpp
@@ -0,0 +1,17 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+int test_dlsym_symbol = 42;
diff --git a/modules/dl_tests/bionic/tests/libs/dlsym_from_this_symbol2.cpp b/modules/dl_tests/bionic/tests/libs/dlsym_from_this_symbol2.cpp
new file mode 100644
index 00000000..20da1d57
--- /dev/null
+++ b/modules/dl_tests/bionic/tests/libs/dlsym_from_this_symbol2.cpp
@@ -0,0 +1,18 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+int test_dlsym_symbol = 43;
+int test_dlsym_symbol2 = 44;
diff --git a/modules/dl_tests/bionic/tests/libs/empty.cpp b/modules/dl_tests/bionic/tests/libs/empty.cpp
new file mode 100644
index 00000000..e69de29b
--
2.20.1

Commit Bot

unread,
Feb 18, 2020, 10:27:44 AM2/18/20
to osv...@googlegroups.com, Waldemar Kozaczuk
From: Waldemar Kozaczuk <jwkoz...@gmail.com>
Committer: Nadav Har'El <n...@scylladb.com>
Branch: master

tests: add bionic tests to the source tree

Instead of cloning full bionic source repo (~70MB) everytime we need to
build tests image, this patch simply adds seven small source files
to the OSv repo. The files are copies from the directory tests/libs
of https://android.googlesource.com/platform/bionic at the commit
47ddeb1ae45dcd62c30c232c9b5490877da6185b.

Please note the bionic test source code is licenced
under permissive BSD-like license Apache 2.0.

Signed-off-by: Waldemar Kozaczuk <jwkoz...@gmail.com>
Message-Id: <20200218041658.2...@gmail.com>

---
diff --git a/.gitignore b/.gitignore
--- a/.gitignore
+++ b/.gitignore
@@ -46,7 +46,6 @@ modules/httpserver-jvm-plugin/obj/
modules/libtools/*.so
modules/libtools/*.o
modules/libyaml/usr.manifest
-modules/dl_tests/bionic/
modules/dl_tests/usr.manifest
.idea
compile_commands.json
diff --git a/licenses/bionic.txt b/licenses/bionic.txt
--- a/licenses/bionic.txt
+++ b/licenses/bionic.txt
@@ -0,0 +1,15 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
diff --git a/modules/dl_tests/Makefile b/modules/dl_tests/Makefile
--- a/modules/dl_tests/Makefile
+++ b/modules/dl_tests/Makefile
@@ -31,18 +31,9 @@ tests := libtest_simple.so libtest_empty.so libtest_dlsym_from_this_grandchild.s
libtest_dlsym_from_this_child.so libtest_dlsym_from_this.so libdlext_test.so \
libtest_with_dependency.so libtest_check_rtld_next_from_library.so

-.PHONY: get_file
-get_file:
- if cd $(src)/modules/dl_tests/bionic; then \
- git pull; \
- else \
- git clone --depth=1 https://android.googlesource.com/platform/bionic $(src)/modules/dl_tests/bionic; \
- fi
-
all_tests := $(tests:%=dl_tests/%)

build_all:
- $(MAKE) get_file
$(MAKE) $(all_tests:%=$(out)/%)
.PHONY: build_all

diff --git a/modules/dl_tests/bionic/tests/libs/check_rtld_next_from_library.cpp b/modules/dl_tests/bionic/tests/libs/check_rtld_next_from_library.cpp
--- a/modules/dl_tests/bionic/tests/libs/check_rtld_next_from_library.cpp
--- a/modules/dl_tests/bionic/tests/libs/dlext_test_library.cpp
--- a/modules/dl_tests/bionic/tests/libs/dlopen_testlib_simple.cpp
--- a/modules/dl_tests/bionic/tests/libs/dlsym_from_this_functions.cpp
--- a/modules/dl_tests/bionic/tests/libs/dlsym_from_this_symbol.cpp
+++ b/modules/dl_tests/bionic/tests/libs/dlsym_from_this_symbol.cpp
@@ -0,0 +1,17 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+int test_dlsym_symbol = 42;
diff --git a/modules/dl_tests/bionic/tests/libs/dlsym_from_this_symbol2.cpp b/modules/dl_tests/bionic/tests/libs/dlsym_from_this_symbol2.cpp
--- a/modules/dl_tests/bionic/tests/libs/dlsym_from_this_symbol2.cpp
+++ b/modules/dl_tests/bionic/tests/libs/dlsym_from_this_symbol2.cpp
@@ -0,0 +1,18 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+int test_dlsym_symbol = 43;
+int test_dlsym_symbol2 = 44;
diff --git a/modules/dl_tests/bionic/tests/libs/empty.cpp b/modules/dl_tests/bionic/tests/libs/empty.cpp
--- a/modules/dl_tests/bionic/tests/libs/empty.cpp
+++ b/modules/dl_tests/bionic/tests/libs/empty.cpp
null

Nadav Har'El

unread,
Feb 18, 2020, 10:27:54 AM2/18/20
to Waldemar Kozaczuk, Osv Dev
Committed. Thanks, and good riddance :-)

However, one unfortunate issue which is caused by the fact you put the files in exactly the same place as the previous makefile downloaded them is that it that it may confuse git who may refuse people from checking out the new version on a non-clean working directory. If we have build failures from Jenkins now, I'll may need to manually clean the build directory. I guess we'll see.

--
Nadav Har'El
n...@scylladb.com


--
You received this message because you are subscribed to the Google Groups "OSv Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email to osv-dev+u...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/osv-dev/20200218041658.29888-1-jwkozaczuk%40gmail.com.
Reply all
Reply to author
Forward
0 new messages