Go to the first, previous, next, last section, table of contents.

# Compiling a Program for Profiling

The first step in generating profile information for your program is to compile and link it with profiling enabled.

To compile a source file for profiling, specify the ``-pg'` option when you run the compiler. (This is in addition to the options you normally use.)

To link the program for profiling, if you use a compiler such as `cc` to do the linking, simply specify ``-pg'` in addition to your usual options. The same option, ``-pg'`, alters either compilation or linking to do what is necessary for profiling. Here are examples:

    cc -g -c myprog.c utils.c -pg
    cc -o myprog myprog.o utils.o -pg

The ``-pg'` option also works with a command that both compiles and links:

    cc -o myprog myprog.c utils.c -g -pg

If you run the linker `ld` directly instead of through a compiler such as `cc`, you must specify the profiling startup file ``/lib/gcrt0.o'` as the first input file instead of the usual startup file ``/lib/crt0.o'`. In addition, you would probably want to specify the profiling C library, ``/usr/lib/libc_p.a'`, by writing ``-lc_p'` instead of the usual ``-lc'`. This is not absolutely necessary, but doing this gives you number-of-calls information for standard library functions such as `read` and `open`. For example:

    ld -o myprog /lib/gcrt0.o myprog.o utils.o -lc_p

If you compile only some of the modules of the program with ``-pg'`, you can still profile the program, but you won't get complete information about the modules that were compiled without ``-pg'`. The only information you get for the functions in those modules is the total time spent in them; there is no record of how many times they were called, or from where. This will not affect the flat profile (except that the `calls` field for the functions will be blank), but will greatly reduce the usefulness of the call graph.

Go to the first, previous, next, last section, table of contents.