/usr/lib/gcl-2.6.12/lsp/gcl_gprof.lsp is in gcl 2.6.12-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 | (in-package 'si)
;; (load "gprof.o")
;; You must have a kcl image with profiling information and monstartup
;; typically saved_kcp. NOTE: if monstartup calls sbrk (true in
;; most 4.3bsd's except sun >= OS 4.0) you must be very careful to
;; allocate all the space you will use prior to calling monstartup.
;; If subsequent storage allocation causes the hole to move you will
;; most certainly lose. See below for instructions
;; on how to construct saved_kcp.
;; If you want function invocation counts to be kept do
;; (setq compiler::*cc* (concatentate 'string compiler::*cc* " -pg "))
;; before compiling the relevant files. (This is done when you load
;; lsp/gprof.o)
;; In the image saved_kcp Load in your files. Load in gprof.o: (load
;; "lsp/gprof.o") Invoke monstartup once to setup buffers: (monstartup
;; lowpc highpc) eg. (monstartup #x800 3000000) [highpc should be a bit
;; bigger than the highest address you have seen when loading your files]
;; Use moncontrol to toggle profiling on and off: (moncontrol 0) to turn
;; profiling off, and (moncontrol 1) to turn it on. Use
;; (wrtie-gmons+syms) to terminate with writing a gmon.out and syms.out
;; in the current directory. I know of no way of clearing the buffers,
;; since secret routines set up the buffers, and we don't know where they
;; are or how large. Thus all information is cumulative.
;; % gprof syms.out
;; will display the output (add -b) to make it briefer.
;; A sample session on rascal:
#|
/usr2/skcl/unixport/saved_kcp
GCL (Austin Kyoto Common Lisp) Version(1.147) Sun May 14 15:26:07 CDT 1989
Contains Enhancements by W. Schelter
>(load "/tmp/fo")
Loading /tmp/fo.o
start address -T 1d04e0 Finished loading /tmp/fo.o
528
>(load "/usr2/skcl/lsp/gprof")
Loading gprof.o
Adding -pg to the *cc* commandstart address -T 1d0800
Finished loading gprof.o
2112
;; NOTE: If the following calls sbrk [eg 4.3bsd or sun OS3 ] but not Sun OS4,
;; then you MUST make sure to allocate sufficient memory before doing
;; monstartup, so that the hole will not have to be moved.
>(si::monstartup #x800 2000000)
2584576
>(si::goo)(si::goo) ;;defined in /tmp/foo.lisp
NIL
>NIL
>(si::write-gmon+syms)
writing syms..
0
[NOTE: The safest way to exit the lisp is to stop it with Ctrl-Z
and then kill it. We do NOT want to run the exit code which
normally writes out a monitoring file].
rascal% gprof -b syms.out
...
called/total parents
index %time self descendents called+self name index
called/total children
0.00 0.00 1/200 _call_or_link [8]
0.02 0.02 199/200 GOO [2]
[1] 49.6 0.02 0.02 200 FOO [1]
0.02 0.00 200/203 _make_cons [4]
... Interpretation: Foo is called 199 times by (parent) goo and once
by (parent) call_or_link (the setting up of the fast link). Foo
itself calls (child) make_cons 200 of the 203 times that make_cons is
called... Lower down we would see that goo is called twice.
-- /tmp/fo.lisp --
(defun foo () (cons nil nil))
(defun goo () (sloop::sloop for i below 100 do (foo)))
-- end of file --
|#
;; Creating saved_gcp
;;
;; cd gcl
;; make go
;; (cd unixport ; make gcp-sun)
;; (cd go ; ln -s ../o/makefile ../o/*.o ../o/*.c ../o/*.d ../o/*.ini .)
;; remove a few .o files and do
;; (cd go ; make "CFLAGS = -I../h -I../gcl-tk -pg -g -c")
;; then (cd unixport ; make kcp)
(clines
#-aix3 "#include \"gprof.hc\""
#+aix3 "#include \"aix_gprof.hc\""
)
(eval-when (load)
(progn (setq compiler::*cc* (CONCATENATE 'string compiler::*cc* " -pg "))
(format t "~% Adding -pg to the *cc* command"))
)
(defun write-gmon+syms()
(monitor2 0 0 0 0)
(princ "writing syms..")
(set-up-combined)
(write_outsyms)
)
(defentry monstartup (int int) (int "mymonstartup"))
(defentry monitor2 (int int int int) (int "mymonitor"))
(defentry moncontrol (int) (int "moncontrol"))
(defentry write_outsyms () (int "write_outsyms"))
|