]>
Commit | Line | Data |
---|---|---|
11c981a9 | 1 | /* Code to enable profiling at program startup. |
3996f34b | 2 | Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. |
6d52618b | 3 | This file is part of the GNU C Library. |
11c981a9 | 4 | |
6d52618b UD |
5 | The GNU C Library is free software; you can redistribute it and/or |
6 | modify it under the terms of the GNU Library General Public License as | |
7 | published by the Free Software Foundation; either version 2 of the | |
8 | License, or (at your option) any later version. | |
11c981a9 | 9 | |
6d52618b UD |
10 | The GNU C Library is distributed in the hope that it will be useful, |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
13 | Library General Public License for more details. | |
11c981a9 | 14 | |
6d52618b UD |
15 | You should have received a copy of the GNU Library General Public |
16 | License along with the GNU C Library; see the file COPYING.LIB. If not, | |
17 | write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
18 | Boston, MA 02111-1307, USA. */ | |
11c981a9 RM |
19 | |
20 | #include <sys/types.h> | |
21 | #include <sys/gmon.h> | |
22 | #include <stdlib.h> | |
23 | #include <unistd.h> | |
24 | ||
25 | /* Beginning and end of our code segment. */ | |
1d8dc429 | 26 | extern void _start (void), etext (void); |
11c981a9 | 27 | |
5f3d5c2b | 28 | #ifndef HAVE_INITFINI |
11c981a9 RM |
29 | /* This function gets called at startup by the normal constructor |
30 | mechanism. We link this file together with start.o to produce gcrt1.o, | |
31 | so this constructor will be first in the list. */ | |
5f3d5c2b RM |
32 | |
33 | void __gmon_start__ (void) __attribute__ ((constructor)); | |
34 | #else | |
35 | /* In ELF and COFF, we cannot use the normal constructor mechanism to call | |
36 | __gmon_start__ because gcrt1.o appears before crtbegin.o in the link. | |
37 | Instead crti.o calls it specially (see initfini.c). */ | |
38 | #endif | |
39 | ||
40 | void | |
41 | __gmon_start__ (void) | |
11c981a9 | 42 | { |
57ba7bb4 UD |
43 | #ifdef HAVE_INITFINI |
44 | /* Protect from being called more than once. Since crti.o is linked | |
45 | into every shared library, each of their init functions will call us. */ | |
46 | static int called; | |
47 | ||
48 | if (called++) | |
49 | return; | |
50 | #endif | |
51 | ||
11c981a9 | 52 | /* Start keeping profiling records. */ |
3996f34b | 53 | __monstartup ((u_long) &_start, (u_long) &etext); |
11c981a9 | 54 | |
6d52618b | 55 | /* Call _mcleanup before exiting; it will write out gmon.out from the |
11c981a9 RM |
56 | collected data. */ |
57 | atexit (&_mcleanup); | |
58 | } |