Profiling a huge beast such as OpenOffice.org is clearly a stress for any tool – in this case, it blew the callgrind backend for the valgrind analysis framework. Valgrind seems to reserve a fixed amount of virtual mem for the actual program – if that gets exceeded, strange things will happen, in my case, debug symbols for my libs weren’t loaded (and, guess what, a profile with only hex function labels is kind of unhelpful).
What I finally made to work was the following setup:
callgrind-0.10.0 on top of valgrind-3.0.1, with the following two patches:
--- configure~ 2005-08-30 03:15:16.000000000 +0200 +++ configure 2005-11-24 14:27:36.000000000 +0100 @@ -3991,7 +3991,7 @@ echo "$as_me:$LINENO: result: ok (${host_cpu})" >&5 echo "${ECHO_T}ok (${host_cpu})" >&6 VG_ARCH="x86" - KICKSTART_BASE="0xb0000000" + KICKSTART_BASE="0xa0000000" ARCH_CORE_AM_CFLAGS="@FLAG_M32@ @PREFERRED_STACK_BOUNDARY@" ARCH_TOOL_AM_CFLAGS="@FLAG_M32@ @PREFERRED_STACK_BOUNDARY@" ARCH_CORE_AM_CCASFLAGS="@FLAG_M32@"
(this one adds 256MB additional space for the program to be analyzed – thanks to Yuri’s mail)
and
--- main.c~ 2005-10-04 01:28:01.000000000 +0200 +++ main.c 2005-11-24 13:46:13.000000000 +0100 @@ -274,7 +274,7 @@ if (bb_seen_before) { CLG_ASSERT(ii->instr_offset == instr_offset); CLG_ASSERT(ii->instr_size == instrLen); - CLG_ASSERT(ii->data_size == dataSize); + //CLG_ASSERT(ii->data_size == dataSize); CLG_ASSERT(ii->cost_offset == *cost_offset); CLG_ASSERT(ii->eventset == es); }
(which silences an assertion – the error itself apparently did no harm, things went smoothly after that).