Home | History | Annotate | Download | only in syscalls
      1 /*
      2  * Copyright 2015, Michael Ellerman, IBM Corp.
      3  *
      4  * This program is free software; you can redistribute it and/or
      5  * modify it under the terms of the GNU General Public License
      6  * as published by the Free Software Foundation; either version
      7  * 2 of the License, or (at your option) any later version.
      8  *
      9  * This test simply tests that certain syscalls are implemented. It doesn't
     10  * actually exercise their logic in any way.
     11  */
     12 
     13 #define _GNU_SOURCE
     14 #include <errno.h>
     15 #include <stdio.h>
     16 #include <unistd.h>
     17 #include <sys/syscall.h>
     18 
     19 #include "utils.h"
     20 
     21 
     22 #define DO_TEST(_name, _num)	\
     23 static int test_##_name(void)			\
     24 {						\
     25 	int rc;					\
     26 	printf("Testing " #_name);		\
     27 	errno = 0;				\
     28 	rc = syscall(_num, -1, 0, 0, 0, 0, 0);	\
     29 	printf("\treturned %d, errno %d\n", rc, errno); \
     30 	return errno == ENOSYS;			\
     31 }
     32 
     33 #include "ipc.h"
     34 #undef DO_TEST
     35 
     36 static int ipc_unmuxed(void)
     37 {
     38 	int tests_done = 0;
     39 
     40 #define DO_TEST(_name, _num)		\
     41 	FAIL_IF(test_##_name());	\
     42 	tests_done++;
     43 
     44 #include "ipc.h"
     45 #undef DO_TEST
     46 
     47 	/*
     48 	 * If we ran no tests then it means none of the syscall numbers were
     49 	 * defined, possibly because we were built against old headers. But it
     50 	 * means we didn't really test anything, so instead of passing mark it
     51 	 * as a skip to give the user a clue.
     52 	 */
     53 	SKIP_IF(tests_done == 0);
     54 
     55 	return 0;
     56 }
     57 
     58 int main(void)
     59 {
     60 	return test_harness(ipc_unmuxed, "ipc_unmuxed");
     61 }
     62