]>
Commit | Line | Data |
---|---|---|
f7a9f785 | 1 | /* Copyright (C) 1996-2016 Free Software Foundation, Inc. |
c84142e8 | 2 | This file is part of the GNU C Library. |
b20e47cb | 3 | Contributed by David Mosberger (davidm@cs.arizona.edu). |
b20e47cb | 4 | |
c84142e8 | 5 | The GNU C Library is free software; you can redistribute it and/or |
41bdb6e2 AJ |
6 | modify it under the terms of the GNU Lesser General Public |
7 | License as published by the Free Software Foundation; either | |
8 | version 2.1 of the 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 | |
41bdb6e2 | 13 | Lesser General Public License for more details. |
b20e47cb | 14 | |
41bdb6e2 | 15 | You should have received a copy of the GNU Lesser General Public |
59ba27a6 PE |
16 | License along with the GNU C Library; if not, see |
17 | <http://www.gnu.org/licenses/>. */ | |
b20e47cb RM |
18 | |
19 | /* __bb_exit_func() dumps all the basic-block statistics linked into | |
3996f34b | 20 | the __bb_head chain to .d files. */ |
b20e47cb | 21 | |
8da8e2db | 22 | #include <sys/gmon.h> |
b20e47cb RM |
23 | #include <sys/gmon_out.h> |
24 | #include <sys/types.h> | |
25 | ||
b20e47cb | 26 | #include <stdio.h> |
2706ee38 | 27 | #include <stdio_ext.h> |
6591c335 | 28 | #include <string.h> |
b20e47cb | 29 | |
b20e47cb RM |
30 | #define OUT_NAME "gmon.out" |
31 | ||
32 | ||
100351c3 UD |
33 | extern struct __bb *__bb_head attribute_hidden; |
34 | ||
35 | ||
b20e47cb | 36 | void |
c84142e8 | 37 | __bb_exit_func (void) |
b20e47cb RM |
38 | { |
39 | const int version = GMON_VERSION; | |
40 | struct gmon_hdr ghdr; | |
8da8e2db | 41 | struct __bb *ptr; |
b20e47cb | 42 | FILE *fp; |
c84142e8 | 43 | fp = fopen (OUT_NAME, "wb"); |
b20e47cb RM |
44 | if (!fp) |
45 | { | |
c84142e8 | 46 | perror (OUT_NAME); |
b20e47cb RM |
47 | return; |
48 | } | |
2706ee38 UD |
49 | /* No threads use this stream. */ |
50 | __fsetlocking (fp, FSETLOCKING_BYCALLER); | |
51 | ||
3996f34b UD |
52 | memcpy (&ghdr.cookie[0], GMON_MAGIC, 4); |
53 | memcpy (&ghdr.version, &version, sizeof (version)); | |
50304ef0 | 54 | fwrite_unlocked (&ghdr, sizeof (ghdr), 1, fp); |
b20e47cb | 55 | |
c84142e8 UD |
56 | for (ptr = __bb_head; ptr != 0; ptr = ptr->next) |
57 | { | |
58 | u_int ncounts = ptr->ncounts; | |
59 | u_char tag; | |
60 | u_int i; | |
b20e47cb | 61 | |
c84142e8 | 62 | tag = GMON_TAG_BB_COUNT; |
50304ef0 UD |
63 | fwrite_unlocked (&tag, sizeof (tag), 1, fp); |
64 | fwrite_unlocked (&ncounts, sizeof (ncounts), 1, fp); | |
b20e47cb | 65 | |
c84142e8 UD |
66 | for (i = 0; i < ncounts; ++i) |
67 | { | |
50304ef0 UD |
68 | fwrite_unlocked (&ptr->addresses[i], sizeof (ptr->addresses[0]), 1, |
69 | fp); | |
70 | fwrite_unlocked (&ptr->counts[i], sizeof (ptr->counts[0]), 1, fp); | |
c84142e8 | 71 | } |
b20e47cb | 72 | } |
b20e47cb RM |
73 | fclose (fp); |
74 | } |