[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[RFC v4 10/11] tests/tcg/multiarch: Add nativecall.c test
From: |
Yeqi Fu |
Subject: |
[RFC v4 10/11] tests/tcg/multiarch: Add nativecall.c test |
Date: |
Tue, 8 Aug 2023 22:17:38 +0800 |
Introduce a new test for native calls to ensure their functionality.
The process involves cross-compiling the test cases, building them
as dynamically linked binaries, and running these binaries which
necessitates the addition of the appropriate interpreter prefix.
Signed-off-by: Yeqi Fu <fufuyqqqqqq@gmail.com>
---
tests/tcg/multiarch/Makefile.target | 17 +++++
tests/tcg/multiarch/native/nativecall.c | 98 +++++++++++++++++++++++++
2 files changed, 115 insertions(+)
create mode 100644 tests/tcg/multiarch/native/nativecall.c
diff --git a/tests/tcg/multiarch/Makefile.target
b/tests/tcg/multiarch/Makefile.target
index 43bddeaf21..5231df34ba 100644
--- a/tests/tcg/multiarch/Makefile.target
+++ b/tests/tcg/multiarch/Makefile.target
@@ -138,5 +138,22 @@ run-plugin-semiconsole-with-%:
TESTS += semihosting semiconsole
endif
+nativecall: native/nativecall.c
+ $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $< -o $@ $(filter-out
-static,$(LDFLAGS))
+
+ifneq ($(LD_PREFIX),)
+ifneq ($(wildcard $(LIBNATIVE)),)
+run-nativecall: nativecall
+ $(call run-test,$<, $(QEMU) -L $(LD_PREFIX) --native-bypass
$(LIBNATIVE) $<, "nativecall")
+else
+run-nativecall: nativecall
+ $(call skip-test, $<, "no native library found")
+endif
+else
+run-nativecall: nativecall
+ $(call skip-test, $<, "no elf interpreter prefix found")
+endif
+EXTRA_RUNS += run-nativecall
+
# Update TESTS
TESTS += $(MULTIARCH_TESTS)
diff --git a/tests/tcg/multiarch/native/nativecall.c
b/tests/tcg/multiarch/native/nativecall.c
new file mode 100644
index 0000000000..d3f6f49ed0
--- /dev/null
+++ b/tests/tcg/multiarch/native/nativecall.c
@@ -0,0 +1,98 @@
+#include <assert.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/mman.h>
+
+void compare_memory(const void *a, const void *b, size_t n)
+{
+ const unsigned char *p1 = a;
+ const unsigned char *p2 = b;
+ for (size_t i = 0; i < n; i++) {
+ assert(p1[i] == p2[i]);
+ }
+}
+
+void test_memcpy()
+{
+ char src[] = "Hello, world!";
+ char dest[20];
+ memcpy(dest, src, 13);
+ compare_memory(dest, src, 13);
+}
+
+void test_strncpy()
+{
+ char src[] = "Hello, world!";
+ char dest[20];
+ strncpy(dest, src, 13);
+ compare_memory(dest, src, 13);
+}
+
+void test_strcpy()
+{
+ char src[] = "Hello, world!";
+ char dest[20];
+ strcpy(dest, src);
+ compare_memory(dest, src, 13);
+}
+
+void test_strcat()
+{
+ char src[20] = "Hello, ";
+ char dst[] = "world!";
+ char str[] = "Hello, world!";
+ strcat(src, dest);
+ compare_memory(src, str, 13);
+}
+
+void test_memcmp()
+{
+ char str1[] = "abc";
+ char str2[] = "abc";
+ char str3[] = "def";
+ assert(memcmp(str1, str2, 3) == 0);
+ assert(memcmp(str1, str3, 3) != 0);
+}
+
+void test_strncmp()
+{
+ char str1[] = "abc";
+ char str2[] = "abc";
+ char str3[] = "def";
+ assert(strncmp(str1, str2, 2) == 0);
+ assert(strncmp(str1, str3, 2) != 0);
+}
+
+void test_strcmp()
+{
+ char str1[] = "abc";
+ char str2[] = "abc";
+ char str3[] = "def";
+ assert(strcmp(str1, str2) == 0);
+ assert(strcmp(str1, str3) != 0);
+}
+
+void test_memset()
+{
+ char buffer[10];
+ memset(buffer, 'A', 10);
+ int i;
+ for (i = 0; i < 10; i++) {
+ assert(buffer[i] == 'A');
+ }
+}
+
+int main()
+{
+ test_memset();
+ test_memcpy();
+ test_strncpy();
+ test_memcmp();
+ test_strncmp();
+ test_strcpy();
+ test_strcmp();
+ test_strcat();
+
+ return EXIT_SUCCESS;
+}
--
2.34.1
- Re: [RFC v4 05/11] linux-user/elfload: Add support for parsing symbols of native libraries., (continued)
- [RFC v4 04/11] linux-user: Implement native-bypass option support, Yeqi Fu, 2023/08/08
- [RFC v4 06/11] tcg: Add tcg opcodes and helpers for native library calls, Yeqi Fu, 2023/08/08
- [RFC v4 07/11] target/i386: Add support for native library calls, Yeqi Fu, 2023/08/08
- [RFC v4 08/11] target/mips: Add support for native library calls, Yeqi Fu, 2023/08/08
- [RFC v4 09/11] target/arm: Add support for native library calls, Yeqi Fu, 2023/08/08
- [RFC v4 10/11] tests/tcg/multiarch: Add nativecall.c test,
Yeqi Fu <=
- [RFC v4 11/11] docs/user: Add doc for native library calls, Yeqi Fu, 2023/08/08