]>
Commit | Line | Data |
---|---|---|
c84142e8 UD |
1 | /* Copyright (C) 1996, 1997 Free Software Foundation, Inc. |
2 | This file is part of the GNU C Library. | |
b20e47cb | 3 | Contributed by David Mosberger (davidm@cs.arizona.edu). |
b20e47cb | 4 | |
c84142e8 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. | |
b20e47cb | 9 | |
c84142e8 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. | |
b20e47cb | 14 | |
c84142e8 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. */ | |
b20e47cb RM |
19 | |
20 | /* __bb_exit_func() dumps all the basic-block statistics linked into | |
21 | the bb_head chain to .d files. */ | |
22 | ||
23 | #include <sys/gmon_out.h> | |
24 | #include <sys/types.h> | |
25 | ||
b20e47cb RM |
26 | #include <stdio.h> |
27 | #include <strings.h> | |
28 | ||
29 | /* structure emitted by -a */ | |
c84142e8 UD |
30 | struct bb |
31 | { | |
32 | long int zero_word; | |
33 | const char *filename; | |
34 | long int *counts; | |
35 | long int ncounts; | |
36 | struct bb *next; | |
37 | const unsigned long int *addresses; | |
38 | }; | |
b20e47cb RM |
39 | |
40 | extern struct bb *__bb_head; /* from gmon.c */ | |
41 | ||
42 | #define OUT_NAME "gmon.out" | |
43 | ||
44 | ||
45 | void | |
c84142e8 | 46 | __bb_exit_func (void) |
b20e47cb RM |
47 | { |
48 | const int version = GMON_VERSION; | |
49 | struct gmon_hdr ghdr; | |
50 | struct bb *ptr; | |
51 | FILE *fp; | |
c84142e8 | 52 | fp = fopen (OUT_NAME, "wb"); |
b20e47cb RM |
53 | if (!fp) |
54 | { | |
c84142e8 | 55 | perror (OUT_NAME); |
b20e47cb RM |
56 | return; |
57 | } | |
c84142e8 UD |
58 | bcopy (GMON_MAGIC, &ghdr.cookie[0], 4); |
59 | bcopy (&version, &ghdr.version, sizeof (version)); | |
60 | fwrite (&ghdr, sizeof (ghdr), 1, fp); | |
b20e47cb | 61 | |
c84142e8 UD |
62 | for (ptr = __bb_head; ptr != 0; ptr = ptr->next) |
63 | { | |
64 | u_int ncounts = ptr->ncounts; | |
65 | u_char tag; | |
66 | u_int i; | |
b20e47cb | 67 | |
c84142e8 UD |
68 | tag = GMON_TAG_BB_COUNT; |
69 | fwrite (&tag, sizeof (tag), 1, fp); | |
70 | fwrite (&ncounts, sizeof (ncounts), 1, fp); | |
b20e47cb | 71 | |
c84142e8 UD |
72 | for (i = 0; i < ncounts; ++i) |
73 | { | |
74 | fwrite (&ptr->addresses[i], sizeof (ptr->addresses[0]), 1, fp); | |
75 | fwrite (&ptr->counts[i], sizeof (ptr->counts[0]), 1, fp); | |
76 | } | |
b20e47cb | 77 | } |
b20e47cb RM |
78 | fclose (fp); |
79 | } |