]> sourceware.org Git - glibc.git/blame - csu/gmon-start.c
Update.
[glibc.git] / csu / gmon-start.c
CommitLineData
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 26extern 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
33void __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
40void
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}
This page took 0.052029 seconds and 5 git commands to generate.