<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-2019 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>
</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>

