Add invalid riscv64 ELF files for the linker tests.
The libtest_empty.so was built by the "libtest_empty" build rule, and
the other files are copies of that with small edits made by the toybox
hexedit tool. I worked out what to edit in each case from a combination
of "what does the name imply?" and "what does a diff of the xxd output
of the corresponding two arm64 files show?".
I failed to produce a working (by which I mean "failing") local-tls
file despite my best efforts. I'm not sure what exactly it was about the
gold-generated files we didn't like, because the commentary implies that
this would be problematic:
39: 0000000000000004 4 TLS LOCAL DEFAULT 12 tls_var_2
But it loads without complaint.
Test: ran locally
Change-Id: I3b9b2b4db1f8827243541cf13380c6ceb840f123
diff --git a/tests/Android.bp b/tests/Android.bp
index 71be058..9c6aec5 100644
--- a/tests/Android.bp
+++ b/tests/Android.bp
@@ -105,6 +105,9 @@
arm64: {
srcs: ["prebuilt-elf-files/arm64/libtest_invalid-rw_load_segment.so"],
},
+ riscv64: {
+ srcs: ["prebuilt-elf-files/riscv64/libtest_invalid-rw_load_segment.so"],
+ },
x86: {
srcs: ["prebuilt-elf-files/x86/libtest_invalid-rw_load_segment.so"],
},
@@ -128,6 +131,9 @@
arm64: {
srcs: ["prebuilt-elf-files/arm64/libtest_invalid-unaligned_shdr_offset.so"],
},
+ riscv64: {
+ srcs: ["prebuilt-elf-files/riscv64/libtest_invalid-unaligned_shdr_offset.so"],
+ },
x86: {
srcs: ["prebuilt-elf-files/x86/libtest_invalid-unaligned_shdr_offset.so"],
},
@@ -151,6 +157,9 @@
arm64: {
srcs: ["prebuilt-elf-files/arm64/libtest_invalid-zero_shentsize.so"],
},
+ riscv64: {
+ srcs: ["prebuilt-elf-files/riscv64/libtest_invalid-zero_shentsize.so"],
+ },
x86: {
srcs: ["prebuilt-elf-files/x86/libtest_invalid-zero_shentsize.so"],
},
@@ -174,6 +183,9 @@
arm64: {
srcs: ["prebuilt-elf-files/arm64/libtest_invalid-zero_shstrndx.so"],
},
+ riscv64: {
+ srcs: ["prebuilt-elf-files/riscv64/libtest_invalid-zero_shstrndx.so"],
+ },
x86: {
srcs: ["prebuilt-elf-files/x86/libtest_invalid-zero_shstrndx.so"],
},
@@ -197,6 +209,9 @@
arm64: {
srcs: ["prebuilt-elf-files/arm64/libtest_invalid-empty_shdr_table.so"],
},
+ riscv64: {
+ srcs: ["prebuilt-elf-files/riscv64/libtest_invalid-empty_shdr_table.so"],
+ },
x86: {
srcs: ["prebuilt-elf-files/x86/libtest_invalid-empty_shdr_table.so"],
},
@@ -220,6 +235,9 @@
arm64: {
srcs: ["prebuilt-elf-files/arm64/libtest_invalid-zero_shdr_table_offset.so"],
},
+ riscv64: {
+ srcs: ["prebuilt-elf-files/riscv64/libtest_invalid-zero_shdr_table_offset.so"],
+ },
x86: {
srcs: ["prebuilt-elf-files/x86/libtest_invalid-zero_shdr_table_offset.so"],
},
@@ -243,6 +261,9 @@
arm64: {
srcs: ["prebuilt-elf-files/arm64/libtest_invalid-zero_shdr_table_content.so"],
},
+ riscv64: {
+ srcs: ["prebuilt-elf-files/riscv64/libtest_invalid-zero_shdr_table_content.so"],
+ },
x86: {
srcs: ["prebuilt-elf-files/x86/libtest_invalid-zero_shdr_table_content.so"],
},
@@ -266,6 +287,9 @@
arm64: {
srcs: ["prebuilt-elf-files/arm64/libtest_invalid-textrels.so"],
},
+ riscv64: {
+ srcs: ["prebuilt-elf-files/riscv64/libtest_invalid-textrels.so"],
+ },
x86: {
srcs: ["prebuilt-elf-files/x86/libtest_invalid-textrels.so"],
},
@@ -289,6 +313,9 @@
arm64: {
srcs: ["prebuilt-elf-files/arm64/libtest_invalid-textrels2.so"],
},
+ riscv64: {
+ srcs: ["prebuilt-elf-files/riscv64/libtest_invalid-textrels2.so"],
+ },
x86: {
srcs: ["prebuilt-elf-files/x86/libtest_invalid-textrels2.so"],
},
diff --git a/tests/dlfcn_test.cpp b/tests/dlfcn_test.cpp
index c5d1218..939c092 100644
--- a/tests/dlfcn_test.cpp
+++ b/tests/dlfcn_test.cpp
@@ -1646,6 +1646,9 @@
}
TEST(dlfcn, dlopen_invalid_local_tls) {
+#if defined(__riscv)
+ // This is a test for bad gold behavior, and gold doesn't support riscv64.
+#else
const std::string libpath = GetPrebuiltElfDir() + "/libtest_invalid-local-tls.so";
void* handle = dlopen(libpath.c_str(), RTLD_NOW);
@@ -1658,6 +1661,7 @@
std::string expected_dlerror = std::string("dlopen failed: unexpected TLS reference to ") +
referent + " in \"" + libpath + "\"";
ASSERT_SUBSTR(expected_dlerror.c_str(), dlerror());
+#endif
}
TEST(dlfcn, dlopen_df_1_global) {
diff --git a/tests/prebuilt-elf-files/riscv64/libtest_empty.so b/tests/prebuilt-elf-files/riscv64/libtest_empty.so
new file mode 100755
index 0000000..f3218f7
--- /dev/null
+++ b/tests/prebuilt-elf-files/riscv64/libtest_empty.so
Binary files differ
diff --git a/tests/prebuilt-elf-files/riscv64/libtest_invalid-empty_shdr_table.so b/tests/prebuilt-elf-files/riscv64/libtest_invalid-empty_shdr_table.so
new file mode 100755
index 0000000..9f15ff9
--- /dev/null
+++ b/tests/prebuilt-elf-files/riscv64/libtest_invalid-empty_shdr_table.so
Binary files differ
diff --git a/tests/prebuilt-elf-files/riscv64/libtest_invalid-rw_load_segment.so b/tests/prebuilt-elf-files/riscv64/libtest_invalid-rw_load_segment.so
new file mode 100755
index 0000000..32db3b9
--- /dev/null
+++ b/tests/prebuilt-elf-files/riscv64/libtest_invalid-rw_load_segment.so
Binary files differ
diff --git a/tests/prebuilt-elf-files/riscv64/libtest_invalid-textrels.so b/tests/prebuilt-elf-files/riscv64/libtest_invalid-textrels.so
new file mode 100755
index 0000000..5ee9aab
--- /dev/null
+++ b/tests/prebuilt-elf-files/riscv64/libtest_invalid-textrels.so
Binary files differ
diff --git a/tests/prebuilt-elf-files/riscv64/libtest_invalid-textrels2.so b/tests/prebuilt-elf-files/riscv64/libtest_invalid-textrels2.so
new file mode 100755
index 0000000..664d3df
--- /dev/null
+++ b/tests/prebuilt-elf-files/riscv64/libtest_invalid-textrels2.so
Binary files differ
diff --git a/tests/prebuilt-elf-files/riscv64/libtest_invalid-unaligned_shdr_offset.so b/tests/prebuilt-elf-files/riscv64/libtest_invalid-unaligned_shdr_offset.so
new file mode 100755
index 0000000..3e773c0
--- /dev/null
+++ b/tests/prebuilt-elf-files/riscv64/libtest_invalid-unaligned_shdr_offset.so
Binary files differ
diff --git a/tests/prebuilt-elf-files/riscv64/libtest_invalid-zero_shdr_table_content.so b/tests/prebuilt-elf-files/riscv64/libtest_invalid-zero_shdr_table_content.so
new file mode 100755
index 0000000..d3bcd9a
--- /dev/null
+++ b/tests/prebuilt-elf-files/riscv64/libtest_invalid-zero_shdr_table_content.so
Binary files differ
diff --git a/tests/prebuilt-elf-files/riscv64/libtest_invalid-zero_shdr_table_offset.so b/tests/prebuilt-elf-files/riscv64/libtest_invalid-zero_shdr_table_offset.so
new file mode 100755
index 0000000..956dca8
--- /dev/null
+++ b/tests/prebuilt-elf-files/riscv64/libtest_invalid-zero_shdr_table_offset.so
Binary files differ
diff --git a/tests/prebuilt-elf-files/riscv64/libtest_invalid-zero_shentsize.so b/tests/prebuilt-elf-files/riscv64/libtest_invalid-zero_shentsize.so
new file mode 100755
index 0000000..e663dae
--- /dev/null
+++ b/tests/prebuilt-elf-files/riscv64/libtest_invalid-zero_shentsize.so
Binary files differ
diff --git a/tests/prebuilt-elf-files/riscv64/libtest_invalid-zero_shstrndx.so b/tests/prebuilt-elf-files/riscv64/libtest_invalid-zero_shstrndx.so
new file mode 100755
index 0000000..294f854
--- /dev/null
+++ b/tests/prebuilt-elf-files/riscv64/libtest_invalid-zero_shstrndx.so
Binary files differ