summaryrefslogtreecommitdiffstats
path: root/mdk-stage1/dietlibc/profiling/README
blob: 0a0293073f09992dba0aec767ff8c5baf694f6f5 (plain)
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

        Notes on profiling support for dietlibc

 1.) A big  problem when doing profiling on statically linked 
     programs, is that the internal profiling functions (mcount 
     and friends) will be included  in the call graph although 
     they would not if the program would have been dynamically 
     linked.  This is  because every  symbol between .text and 
     _etext  is included  in the call-graph.  If a  program is 
     dynamically linked, then mcount and friends are not between 
     .text and _etext, so they are not included. A  workaround 
     for this, would be to put mcount,  __mcount,  monitor and 
     profiler into another section (eg. ".profile"),  but this 
     creates some strange problems, I'm currently not aware of. 
     If you want to debug this: Putting a function into a specific 
     section works like this (with gcc):

     void foo (int bar) __attribute__ ((section(".foobar")))

 2.) _start may randomly be found in the callgraph.  I don't 
     know why. May be a bug in gprof.

 3.) The profiling is a  complete rewrite,  though I looked at 
     the glibc Version for  inspiration. Please note that this
     version might not be as portable as the glibc version but
     its much smaller (although this is not a really important
     argument, as  profiled binaries seldom  get shipped) and
     hopefully easier to understand.

 4.) all objects that should be profiled mustn't be compiled
     with -fomit-frame-pointer (as with glibc). Add
     -fno-fomit-frame-pointer to $CFLAGS if you're encountering 
     weird problems.

 5.) There is currently no basic-block statistic support.

Please send comments and bug reports to: tom@rhadamanthys.org