1
0
Fork 0

selftests/powerpc: Add tests of unmuxed IPC calls

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>
hifive-unleashed-5.1
Michael Ellerman 2015-10-14 20:48:04 +11:00
parent ad987fc8ea
commit 0b824f2e2b
5 changed files with 122 additions and 1 deletions

View File

@ -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

View File

@ -0,0 +1 @@
ipc_unmuxed

View File

@ -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

View File

@ -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

View File

@ -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");
}