From: Petar Jovanovic Date: Fri, 10 May 2013 13:14:54 +0000 (+0000) Subject: mips: add allexec tests for mips64 X-Git-Tag: svn/VALGRIND_3_9_0~299 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ef5865f643dae2db838cdf014678866cd8f43115;p=thirdparty%2Fvalgrind.git mips: add allexec tests for mips64 Initial patch for none/tests/mips64/. allexec tests added. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13385 --- diff --git a/configure.in b/configure.in index 9a1db0c378..464ba42340 100644 --- a/configure.in +++ b/configure.in @@ -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 diff --git a/none/tests/Makefile.am b/none/tests/Makefile.am index 2c703745a4..e9c4fdb27a 100644 --- a/none/tests/Makefile.am +++ b/none/tests/Makefile.am @@ -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 \ diff --git a/none/tests/allexec_prepare_prereq b/none/tests/allexec_prepare_prereq index d1fa03c832..b8f5bc3e4c 100755 --- a/none/tests/allexec_prepare_prereq +++ b/none/tests/allexec_prepare_prereq @@ -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 index 0000000000..1c7ef4491b --- /dev/null +++ b/none/tests/mips64/Makefile.am @@ -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 index 0000000000..b7177e8153 --- /dev/null +++ b/none/tests/mips64/allexec.c @@ -0,0 +1,50 @@ +#include +#include +#include +#include +#include +#include + +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 index 0000000000..616ce05e19 --- /dev/null +++ b/none/tests/mips64/filter_stderr @@ -0,0 +1,4 @@ +#! /bin/sh + +../filter_stderr +