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 
47 char *TCID = "set_tid_address01";
48 int testno;
49 int 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 /******************************************************************************/
cleanup(void)69 void 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 /******************************************************************************/
setup(void)95 void setup(void)
96 {
97 	/* Capture signals if any */
98 	/* Create temporary directories */
99 	TEST_PAUSE;
100 	tst_tmpdir();
101 }
102 
main(int ac,char ** av)103 int 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