]> git.ipfire.org Git - thirdparty/ipxe.git/commit
[fnrec] Enhance function recording
authorMichael Brown <mcb30@ipxe.org>
Sat, 4 Dec 2010 02:55:11 +0000 (02:55 +0000)
committerMichael Brown <mcb30@ipxe.org>
Thu, 9 Dec 2010 13:11:27 +0000 (13:11 +0000)
commitea0fcb9460403a16d4e2a5e1d48ee6279794450c
treeea6bb728ad797317ad93551eb1678c08cf874e81
parentf8a82c7d2300df620ef917d5b7c855d91aa0f31c
[fnrec] Enhance function recording

Enhance the information collected by the function recorder to include
the call site and entry/exit counts.  This allows fnrec.pl to produce
a call tree such as:

    step (from core/getkey.c:46 = 0x17e90) {
      ref_increment (from core/process.c:93 = 0x73ec) { }
      net_step (from core/process.c:96 = 0x73f1) {
        net_poll (from net/netdevice.c:741 = 0xbce6) {
          netdev_poll (from net/netdevice.c:700 = 0xbc58) { }
          netdev_rx_dequeue (from net/netdevice.c:709 = 0xbc65) { }
        }
      }
      ref_decrement (from core/process.c:96 = 0x73f9) { }
    }

Note that inlined functions are reported, confusingly, as extra calls
to the *containing* function.  Minimise this confusion by adding the
attribute "no_instrument_function" to all functions declared as
inline.  (Static functions that have been inlined autonomously by gcc
will still be problematic, but these are far fewer in number.)

Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/core/fnrec.c
src/include/compiler.h
src/util/fnrec.pl [new file with mode: 0755]
src/util/fnrec.sh [deleted file]