<html lang="en">
<head>
<title>Annotated Source - GNU gprof</title>
<meta http-equiv="Content-Type" content="text/html">
<meta name="description" content="GNU gprof">
<meta name="generator" content="makeinfo 4.13">
<link title="Top" rel="start" href="index.html#Top">
<link rel="up" href="Output.html#Output" title="Output">
<link rel="prev" href="Line_002dby_002dline.html#Line_002dby_002dline" title="Line-by-line">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
This file documents the gprof profiler of the GNU system.

Copyright (C) 1988, 1992, 1997, 1998, 1999, 2000, 2001, 2003,
2007, 2008, 2009 Free Software Foundation, Inc.

Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, with no Front-Cover Texts, and with no
Back-Cover Texts.  A copy of the license is included in the
section entitled ``GNU Free Documentation License''.

-->
<meta http-equiv="Content-Style-Type" content="text/css">
<style type="text/css"><!--
  pre.display { font-family:inherit }
  pre.format  { font-family:inherit }
  pre.smalldisplay { font-family:inherit; font-size:smaller }
  pre.smallformat  { font-family:inherit; font-size:smaller }
  pre.smallexample { font-size:smaller }
  pre.smalllisp    { font-size:smaller }
  span.sc    { font-variant:small-caps }
  span.roman { font-family:serif; font-weight:normal; } 
  span.sansserif { font-family:sans-serif; font-weight:normal; } 
--></style>
<link rel="stylesheet" type="text/css" href="../cs.css">
</head>
<body>
<div class="node">
<a name="Annotated-Source"></a>
<p>
Previous:&nbsp;<a rel="previous" accesskey="p" href="Line_002dby_002dline.html#Line_002dby_002dline">Line-by-line</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="Output.html#Output">Output</a>
<hr>
</div>

<h3 class="section">5.4 The Annotated Source Listing</h3>

<p><code>gprof</code>'s &lsquo;<samp><span class="samp">-A</span></samp>&rsquo; option triggers an annotated source listing,
which lists the program's source code, each function labeled with the
number of times it was called.  You may also need to specify the
&lsquo;<samp><span class="samp">-I</span></samp>&rsquo; option, if <code>gprof</code> can't find the source code files.

   <p>With older versions of <code>gcc</code> compiling with &lsquo;<samp><span class="samp">gcc ... -g
-pg -a</span></samp>&rsquo; augments your program with basic-block counting code, in
addition to function counting code.  This enables <code>gprof</code> to
determine how many times each line of code was executed.  With newer
versions of <code>gcc</code> support for displaying basic-block counts is
provided by the <code>gcov</code> program.

   <p>For example, consider the following function, taken from gzip,
with line numbers added:

<pre class="smallexample">      1 ulg updcrc(s, n)
      2     uch *s;
      3     unsigned n;
      4 {
      5     register ulg c;
      6
      7     static ulg crc = (ulg)0xffffffffL;
      8
      9     if (s == NULL) {
     10         c = 0xffffffffL;
     11     } else {
     12         c = crc;
     13         if (n) do {
     14             c = crc_32_tab[...];
     15         } while (--n);
     16     }
     17     crc = c;
     18     return c ^ 0xffffffffL;
     19 }
     
</pre>
   <p><code>updcrc</code> has at least five basic-blocks. 
One is the function itself.  The
<code>if</code> statement on line 9 generates two more basic-blocks, one
for each branch of the <code>if</code>.  A fourth basic-block results from
the <code>if</code> on line 13, and the contents of the <code>do</code> loop form
the fifth basic-block.  The compiler may also generate additional
basic-blocks to handle various special cases.

   <p>A program augmented for basic-block counting can be analyzed with
&lsquo;<samp><span class="samp">gprof -l -A</span></samp>&rsquo;. 
The &lsquo;<samp><span class="samp">-x</span></samp>&rsquo; option is also helpful,
to ensure that each line of code is labeled at least once. 
Here is <code>updcrc</code>'s
annotated source listing for a sample <code>gzip</code> run:

<pre class="smallexample">                     ulg updcrc(s, n)
                         uch *s;
                         unsigned n;
                 2 -&gt;{
                         register ulg c;
     
                         static ulg crc = (ulg)0xffffffffL;
     
                 2 -&gt;    if (s == NULL) {
                 1 -&gt;        c = 0xffffffffL;
                 1 -&gt;    } else {
                 1 -&gt;        c = crc;
                 1 -&gt;        if (n) do {
             26312 -&gt;            c = crc_32_tab[...];
     26312,1,26311 -&gt;        } while (--n);
                         }
                 2 -&gt;    crc = c;
                 2 -&gt;    return c ^ 0xffffffffL;
                 2 -&gt;}
</pre>
   <p>In this example, the function was called twice, passing once through
each branch of the <code>if</code> statement.  The body of the <code>do</code>
loop was executed a total of 26312 times.  Note how the <code>while</code>
statement is annotated.  It began execution 26312 times, once for
each iteration through the loop.  One of those times (the last time)
it exited, while it branched back to the beginning of the loop 26311 times.

   </body></html>

