Update copyright to LGPL on all files
[dyninst.git] / testsuite / src / dyninst / test2_6_mutatee.c
1 /*
2  * Copyright (c) 1996-2009 Barton P. Miller
3  * 
4  * We provide the Paradyn Parallel Performance Tools (below
5  * described as "Paradyn") on an AS IS basis, and do not warrant its
6  * validity or performance.  We reserve the right to update, modify,
7  * or discontinue this software at any time.  We shall have no
8  * obligation to supply such updates or modifications or any other
9  * form of support to you.
10  * 
11  * By your use of Paradyn, you understand and agree that we (or any
12  * other person or entity with proprietary rights in Paradyn) are
13  * under no obligation to provide either maintenance services,
14  * update services, notices of latent defects, or correction of
15  * defects for Paradyn.
16  * 
17  * This library is free software; you can redistribute it and/or
18  * modify it under the terms of the GNU Lesser General Public
19  * License as published by the Free Software Foundation; either
20  * version 2.1 of the License, or (at your option) any later version.
21  * 
22  * This library is distributed in the hope that it will be useful,
23  * but WITHOUT ANY WARRANTY; without even the implied warranty of
24  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
25  * Lesser General Public License for more details.
26  * 
27  * You should have received a copy of the GNU Lesser General Public
28  * License along with this library; if not, write to the Free Software
29  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
30  */
31 #include <signal.h>
32 #include <dlfcn.h>
33
34 #include "mutatee_util.h"
35 #include "test2.h"
36
37 /* Externally accessed function prototypes.  These must have globally unique
38  * names.  I suggest following the pattern <testname>_<function>
39  */
40
41 /* Global variables accessed by the mutator.  These must have globally unique
42  * names.
43  */
44
45 /* Internally used function prototypes.  These should be declared with the
46  * keyword static so they don't interfere with other mutatees in the group.
47  */
48
49 void func1();
50
51 /* Global variables used internally by the mutatee.  These should be declared
52  * with the keyword static so they don't interfere with other mutatees in the
53  * group.
54  */
55
56 /* Function definitions follow */
57
58 /* TODO stop_process() should probably be moved into mutatee_util */
59 /*
60  * Stop the process (in order to wait for the mutator to finish what it's
61  * doing and restart us).
62  */
63 void stop_process()
64 {
65 #ifdef os_windows_test
66     DebugBreak();
67 #else
68     kill(getpid(), SIGSTOP);
69 #endif
70 }
71
72 int test2_6_mutatee() {
73   func1();
74   stop_process();
75   test_passes("test2_6");
76   return 0; /* No error */
77 }
78
79 void func1() {
80 /* #if defined(sparc_sun_solaris2_4_test) \ */
81 /*  || defined(i386_unknown_solaris2_5_test) \ */
82 /*  || defined(i386_unknown_linux2_0_test) \ */
83 /*  || defined(x86_64_unknown_linux2_4_test) /\* Blind duplication - Ray *\/ \ */
84 /*  || defined(mips_sgi_irix6_4_test) \ */
85 /*  || defined(alpha_dec_osf4_0_test) \ */
86 /*  || defined(rs6000_ibm_aix4_1_test) \ */
87 /*  || defined(ia64_unknown_linux2_4_test) */
88
89     void *ref;
90     /* now use the dlopen interface to force an object to load. */
91 #if defined(alpha_dec_osf4_0_test)
92     ref = dlopen(TEST_DYNAMIC_LIB, RTLD_NOW);
93 #else
94     ref = dlopen(TEST_DYNAMIC_LIB, RTLD_NOW | RTLD_GLOBAL);
95 #endif
96
97     if (!ref) {
98         logerror("%s[%d]: %s\n", __FILE__, __LINE__, dlerror() );
99     }
100 /* #endif */
101 }