]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
mips: add allexec tests for mips64
authorPetar Jovanovic <mips32r2@gmail.com>
Fri, 10 May 2013 13:14:54 +0000 (13:14 +0000)
committerPetar Jovanovic <mips32r2@gmail.com>
Fri, 10 May 2013 13:14:54 +0000 (13:14 +0000)
Initial patch for none/tests/mips64/.
allexec tests added.

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13385

configure.in
none/tests/Makefile.am
none/tests/allexec_prepare_prereq
none/tests/mips64/Makefile.am [new file with mode: 0644]
none/tests/mips64/allexec.c [new file with mode: 0644]
none/tests/mips64/filter_stderr [new file with mode: 0755]

index 9a1db0c378c7db741e803b7ce2f57523e31ce31b..464ba42340a1de0ee926ef396df3e56e3d739f7b 100644 (file)
@@ -2662,6 +2662,7 @@ AC_CONFIG_FILES([
    none/tests/arm/Makefile
    none/tests/s390x/Makefile
    none/tests/mips32/Makefile
+   none/tests/mips64/Makefile
    none/tests/linux/Makefile
    none/tests/darwin/Makefile
    none/tests/x86-linux/Makefile
index 2c703745a4a5b07adf4eda0ced3c9bf330059178..e9c4fdb27ab0fbaad3ec9dbe913d95d01afa09c0 100644 (file)
@@ -25,6 +25,9 @@ endif
 if VGCONF_ARCHS_INCLUDE_MIPS32
 SUBDIRS += mips32
 endif
+if VGCONF_ARCHS_INCLUDE_MIPS64
+SUBDIRS += mips64
+endif
 
 # OS-specific tests
 if VGCONF_OS_IS_LINUX
@@ -39,7 +42,8 @@ if VGCONF_PLATFORMS_INCLUDE_X86_LINUX
 SUBDIRS += x86-linux
 endif
 
-DIST_SUBDIRS = x86 amd64 ppc32 ppc64 arm s390x mips32 linux darwin x86-linux .
+DIST_SUBDIRS = x86 amd64 ppc32 ppc64 arm s390x mips32 mips64 linux darwin \
+               x86-linux .
 
 dist_noinst_SCRIPTS = \
        filter_cmdline0 \
index d1fa03c8328955f1a49182e996e1a49a0b953c36..b8f5bc3e4cc8d2b72e44ca07136ad2b2dd4e4d5b 100755 (executable)
@@ -32,6 +32,6 @@ pair x86                        amd64
 pair ppc32                      ppc64
 pair s390x_unexisting_in_32bits s390x
 pair arm                        arm_unexisting_in_64bits
-pair mips32                     mips_unexisting_in_64bits
+pair mips32                     mips64
 
 exit 0
diff --git a/none/tests/mips64/Makefile.am b/none/tests/mips64/Makefile.am
new file mode 100644 (file)
index 0000000..1c7ef44
--- /dev/null
@@ -0,0 +1,14 @@
+
+include $(top_srcdir)/Makefile.tool-tests.am
+
+dist_noinst_SCRIPTS = filter_stderr
+
+check_PROGRAMS = \
+       allexec
+
+AM_CFLAGS    += @FLAG_M64@
+AM_CXXFLAGS  += @FLAG_M64@
+AM_CCASFLAGS += @FLAG_M64@
+
+allexec_CFLAGS          = $(AM_CFLAGS) @FLAG_W_NO_NONNULL@
+
diff --git a/none/tests/mips64/allexec.c b/none/tests/mips64/allexec.c
new file mode 100644 (file)
index 0000000..b7177e8
--- /dev/null
@@ -0,0 +1,50 @@
+#include <assert.h>
+#include <stdio.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <unistd.h>
+
+extern char **environ;
+
+#define S(...) (fprintf(stdout, __VA_ARGS__),fflush(stdout))
+#define FORKEXECWAIT(exec_call) do { \
+      int status;\
+      pid_t child = fork(); \
+      if (child == 0) {exec_call; perror ("exec failed");} \
+      else if (child == -1) perror ("cannot fork\n"); \
+      else if (child != wait (&status)) perror ("error waiting child"); \
+      else S("child exited\n"); \
+   } while (0)
+
+void test_allexec (char *exec)
+{
+   FORKEXECWAIT (execlp(exec, exec, NULL));
+   FORKEXECWAIT (execlp(exec, exec, "constant_arg1", "constant_arg2", NULL));
+   FORKEXECWAIT (execve(exec, NULL, environ));
+}
+
+
+/* If a single argument "exec" is given, will execute itself
+   (in bi-arch, a 32 bit and 64 bit variant) via various exec system calls.
+   Note that this test can only be run after the prerequisite have been
+   prepared by allexec_prepare_prereq, which will a.o. make links
+   for the allexec32 and allexec64 executables. On single arch build,
+   these links points to the same executable to ensure this test works
+   everywhere the same.
+   No arguments or more arguments means just print its args. */
+int main(int argc, char **argv, char **envp) 
+{
+   if ( (argc == 2) && (strcmp (argv[1], "exec") == 0)) {
+      S("%s will exec ./allexec32\n", argv[0]);
+      test_allexec ("./allexec32");
+      S("%s will exec ./allexec64\n", argv[0]);
+      test_allexec ("./allexec64");
+   } else {
+      int i;
+      S("program exec-ed:");
+      for (i = 0; i < argc; i++) S(" %s", argv[i]);
+      S("\n");
+   }
+   return 0;
+}
diff --git a/none/tests/mips64/filter_stderr b/none/tests/mips64/filter_stderr
new file mode 100755 (executable)
index 0000000..616ce05
--- /dev/null
@@ -0,0 +1,4 @@
+#! /bin/sh
+
+../filter_stderr
+