Skip to content

Commit

Permalink
selftests/powerpc: Add tests of unmuxed IPC calls
Browse files Browse the repository at this point in the history
This is just a simple test which confirms that the individual IPC
syscalls are all available.

Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
  • Loading branch information
Michael Ellerman committed Oct 15, 2015
1 parent ad987fc commit 0b824f2
Show file tree
Hide file tree
Showing 5 changed files with 122 additions and 1 deletion.
2 changes: 1 addition & 1 deletion tools/testing/selftests/powerpc/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ CFLAGS := -Wall -O2 -flto -Wall -Werror -DGIT_VERSION='"$(GIT_VERSION)"' -I$(CUR

export CFLAGS

SUB_DIRS = pmu copyloops mm tm primitives stringloops vphn switch_endian dscr benchmarks
SUB_DIRS = pmu copyloops mm tm primitives stringloops vphn switch_endian dscr benchmarks syscalls

endif

Expand Down
1 change: 1 addition & 0 deletions tools/testing/selftests/powerpc/syscalls/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
ipc_unmuxed
12 changes: 12 additions & 0 deletions tools/testing/selftests/powerpc/syscalls/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
TEST_PROGS := ipc_unmuxed

CFLAGS += -I../../../../../usr/include

all: $(TEST_PROGS)

$(TEST_PROGS): ../harness.c

include ../../lib.mk

clean:
rm -f $(TEST_PROGS) *.o
47 changes: 47 additions & 0 deletions tools/testing/selftests/powerpc/syscalls/ipc.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
#ifdef __NR_semop
DO_TEST(semop, __NR_semop)
#endif

#ifdef __NR_semget
DO_TEST(semget, __NR_semget)
#endif

#ifdef __NR_semctl
DO_TEST(semctl, __NR_semctl)
#endif

#ifdef __NR_semtimedop
DO_TEST(semtimedop, __NR_semtimedop)
#endif

#ifdef __NR_msgsnd
DO_TEST(msgsnd, __NR_msgsnd)
#endif

#ifdef __NR_msgrcv
DO_TEST(msgrcv, __NR_msgrcv)
#endif

#ifdef __NR_msgget
DO_TEST(msgget, __NR_msgget)
#endif

#ifdef __NR_msgctl
DO_TEST(msgctl, __NR_msgctl)
#endif

#ifdef __NR_shmat
DO_TEST(shmat, __NR_shmat)
#endif

#ifdef __NR_shmdt
DO_TEST(shmdt, __NR_shmdt)
#endif

#ifdef __NR_shmget
DO_TEST(shmget, __NR_shmget)
#endif

#ifdef __NR_shmctl
DO_TEST(shmctl, __NR_shmctl)
#endif
61 changes: 61 additions & 0 deletions tools/testing/selftests/powerpc/syscalls/ipc_unmuxed.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
/*
* Copyright 2015, Michael Ellerman, IBM Corp.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version
* 2 of the License, or (at your option) any later version.
*
* This test simply tests that certain syscalls are implemented. It doesn't
* actually exercise their logic in any way.
*/

#define _GNU_SOURCE
#include <errno.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/syscall.h>

#include "utils.h"


#define DO_TEST(_name, _num) \
static int test_##_name(void) \
{ \
int rc; \
printf("Testing " #_name); \
errno = 0; \
rc = syscall(_num, -1, 0, 0, 0, 0, 0); \
printf("\treturned %d, errno %d\n", rc, errno); \
return errno == ENOSYS; \
}

#include "ipc.h"
#undef DO_TEST

static int ipc_unmuxed(void)
{
int tests_done = 0;

#define DO_TEST(_name, _num) \
FAIL_IF(test_##_name()); \
tests_done++;

#include "ipc.h"
#undef DO_TEST

/*
* If we ran no tests then it means none of the syscall numbers were
* defined, possibly because we were built against old headers. But it
* means we didn't really test anything, so instead of passing mark it
* as a skip to give the user a clue.
*/
SKIP_IF(tests_done == 0);

return 0;
}

int main(void)
{
return test_harness(ipc_unmuxed, "ipc_unmuxed");
}

0 comments on commit 0b824f2

Please sign in to comment.