This is the mail archive of the libc-alpha@sources.redhat.com mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] re: Overflow problem in gmon/mcount profiler.


Jim wrote (http://sources.redhat.com/ml/bug-glibc/2001-07/msg00131.html):
> When call-graph profiling an executable with a large number of
> called routines, the file gmon.out is not produced.
> [test case snipped]

I have a patch against glibc-2.2.5 that seems to fix this:
  http://www.kegel.com/gmon.patch

I believe the problem was a thinko confusing the types used to represent
the sampling counters and indices into the call graph table; this patch
adds a defined type, ARCINDEX, for the latter, and uses it uniformly.

The heuristic used to size the call graph table (tos[])
might be a suprise to some users, so I've added a line to 
output a message to stderr when the heuristic picks too low a
value, causing table overflow.

The heuristic does pick too low a value when running Jim's regression
test; to work around this, tweak the constant ARCDENSITY up to 3 from 2,
and link the test program statically (which just happens to
make the heuristic allocate a much larger call graph table, due to the
increased text size).

I must say, the table sizing and indexing in gmon is a bit tricky to
understand.   Thus I don't trust my patch yet.  There may be some table
sizing or indexing bug lurking still.  

I have yet to use this on the real program that caused me to look
into the problem, but it does seem to let Jim's regression test pass.

Comments welcome.
- Dan


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]