From: Fei Jie Date: Mon, 18 Apr 2016 07:10:54 +0000 (+0800) Subject: tests: add shmxt.test X-Git-Tag: v4.12~413 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=39a33b171bca6cf92140322aa4ec41992841a27e;p=strace tests: add shmxt.test * tests/shmxt.c: New file. * tests/shmxt.test: New test. * tests/.gitignore: Add shmxt. * tests/Makefile.am (check_PROGRAMS): Likewise. (DECODER_TESTS): Add shmxt.test. --- diff --git a/tests/.gitignore b/tests/.gitignore index 3d1dbef7..9f96e3a7 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -143,6 +143,7 @@ sendfile sendfile64 set_ptracer_any sethostname +shmxt sigaction sigaltstack signalfd diff --git a/tests/Makefile.am b/tests/Makefile.am index f31b6007..5069c199 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -193,6 +193,7 @@ check_PROGRAMS = \ sendfile64 \ set_ptracer_any \ sethostname \ + shmxt \ sigaction \ sigaltstack \ signalfd \ @@ -399,6 +400,7 @@ DECODER_TESTS = \ sendfile.test \ sendfile64.test \ sethostname.test \ + shmxt.test \ sigaction.test \ sigaltstack.test \ signalfd.test \ diff --git a/tests/shmxt.c b/tests/shmxt.c new file mode 100644 index 00000000..628f5b2b --- /dev/null +++ b/tests/shmxt.c @@ -0,0 +1,51 @@ +#include "tests.h" +#include +#include +#include +#include + +static int id = -1; + +static void +cleanup(void) +{ + shmctl(id, IPC_RMID, NULL); + id = -1; +} + +#ifdef __alpha__ +# define SHMAT "osf_shmat" +#else +# define SHMAT "shmat" +#endif + +int +main(void) +{ + id = shmget(IPC_PRIVATE, 1, 0600); + if (id < 0) + perror_msg_and_skip("shmget"); + atexit(cleanup); + + shmat(id, NULL, SHM_REMAP); + printf("%s(%d, NULL, SHM_REMAP) = -1 %s (%m)\n", + SHMAT, id, errno == ENOSYS ? "ENOSYS" : "EINVAL"); + + void *shmaddr = shmat(id, NULL, SHM_RDONLY); + if (shmaddr == (void *)(-1)) + perror_msg_and_skip("shmat SHM_RDONLY"); + printf("%s(%d, NULL, SHM_RDONLY) = %p\n", SHMAT, id, shmaddr); + + if (shmdt(shmaddr)) + perror_msg_and_skip("shmdt"); + printf("shmdt(%p) = 0\n", shmaddr); + + void *shmaddr2 = shmat(id, shmaddr, SHM_RND); + if (shmaddr2 == (void *)(-1)) + perror_msg_and_skip("shmat SHM_RND"); + printf("%s(%d, %p, SHM_RND) = %p\n", + SHMAT, id, shmaddr, shmaddr2); + + puts("+++ exited with 0 +++"); + return 0; +} diff --git a/tests/shmxt.test b/tests/shmxt.test new file mode 100755 index 00000000..3757cfa4 --- /dev/null +++ b/tests/shmxt.test @@ -0,0 +1,12 @@ +#!/bin/sh + +# Check shmat and shmdt syscalls decoding. + +. "${srcdir=.}/init.sh" + +case "$STRACE_ARCH" in + alpha) shmat=osf_shmat ;; + *) shmat=shmat ;; +esac + +run_strace_match_diff -e trace=$shmat,shmdt -a11