1/******************************************************************************/ 2/* Copyright (c) Crackerjack Project., 2007 */ 3/* */ 4/* This program is free software; you can redistribute it and/or modify */ 5/* it under the terms of the GNU General Public License as published by */ 6/* the Free Software Foundation; either version 2 of the License, or */ 7/* (at your option) any later version. */ 8/* */ 9/* This program is distributed in the hope that it will be useful, */ 10/* but WITHOUT ANY WARRANTY; without even the implied warranty of */ 11/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See */ 12/* the GNU General Public License for more details. */ 13/* */ 14/* You should have received a copy of the GNU General Public License */ 15/* along with this program; if not, write to the Free Software */ 16/* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ 17/* */ 18/******************************************************************************/ 19/******************************************************************************/ 20/* */ 21/* File: set_tid_address01.c */ 22/* */ 23/* Description: This tests the set_tid_address() syscall */ 24/* */ 25/* Usage: <for command-line> */ 26/* set_tid_address01 [-c n] [-e][-i n] [-I x] [-p x] [-t] */ 27/* where, -c n : Run n copies concurrently. */ 28/* -e : Turn on errno logging. */ 29/* -i n : Execute test n times. */ 30/* -I x : Execute test for x seconds. */ 31/* -P x : Pause for x seconds between iterations. */ 32/* -t : Turn on syscall timing. */ 33/* */ 34/* Total Tests: 1 */ 35/* */ 36/* Test Name: set_tid_address01 */ 37/* History: Porting from Crackerjack to LTP is done by */ 38/* Manas Kumar Nayak maknayak@in.ibm.com> */ 39/******************************************************************************/ 40 41#include <stdio.h> 42#include <errno.h> 43 44#include "test.h" 45#include "lapi/syscalls.h" 46 47char *TCID = "set_tid_address01"; 48int testno; 49int TST_TOTAL = 1; 50 51/* Extern Global Functions */ 52/******************************************************************************/ 53/* */ 54/* Function: cleanup */ 55/* */ 56/* Description: Performs all one time clean up for this test on successful */ 57/* completion, premature exit or failure. Closes all temporary */ 58/* files, removes all temporary directories exits the test with */ 59/* appropriate return code by calling tst_exit() function. */ 60/* */ 61/* Input: None. */ 62/* */ 63/* Output: None. */ 64/* */ 65/* Return: On failure - Exits calling tst_exit(). Non '0' return code. */ 66/* On success - Exits calling tst_exit(). With '0' return code. */ 67/* */ 68/******************************************************************************/ 69void cleanup(void) 70{ 71 72 tst_rmdir(); 73 74 tst_exit(); 75} 76 77/* Local Functions */ 78/******************************************************************************/ 79/* */ 80/* Function: setup */ 81/* */ 82/* Description: Performs all one time setup for this test. This function is */ 83/* typically used to capture signals, create temporary dirs */ 84/* and temporary files that may be used in the course of this */ 85/* test. */ 86/* */ 87/* Input: None. */ 88/* */ 89/* Output: None. */ 90/* */ 91/* Return: On failure - Exits by calling cleanup(). */ 92/* On success - returns 0. */ 93/* */ 94/******************************************************************************/ 95void setup(void) 96{ 97 /* Capture signals if any */ 98 /* Create temporary directories */ 99 TEST_PAUSE; 100 tst_tmpdir(); 101} 102 103int main(int ac, char **av) 104{ 105 int newtid = -1; 106 int lc; 107 108 tst_parse_opts(ac, av, NULL, NULL); 109 110 setup(); 111 112 for (lc = 0; TEST_LOOPING(lc); ++lc) { 113 tst_count = 0; 114 for (testno = 0; testno < TST_TOTAL; ++testno) { 115 TEST(ltp_syscall(__NR_set_tid_address, &newtid)); 116 if (TEST_RETURN == getpid()) { 117 tst_resm(TPASS, 118 "set_tid_address call succeeded: as expected %ld", 119 TEST_RETURN); 120 } else { 121 tst_brkm(TFAIL, cleanup, "%s failed - errno = %d : %s", 122 TCID, TEST_ERRNO, 123 strerror(TEST_ERRNO)); 124 } 125 } 126 } 127 cleanup(); 128 tst_exit(); 129} 130