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