PROBLEM:On all of my Linux x86_64 systems, when I build code instrumented for profiling with gcc -pg, the running times reported for the code by gprof are many times the actual runtime of the program. This problem is specific to x86_64; the times for the same code are correct on 32-bit x86 Linux. The problem on x86_64 occurs independently of whether I compile with -m32 or -m64, and independently of the optimization level of the compilation.
A simple example is the following program "braindead.c":
unsigned int x;
void do_something()
{
unsigned int j;
for (j = 0; j < (1U << 31); j++)
{
x = (j * j + j)/ 10000;
}
}
int main()
{
do_something();
return 0;
}
Here's what I see:
> gcc -O2 -pg braindead.c
> time a.out
5.030u 0.001s 0:05.03 100.0% 0+0k 0+0io 0pf+0w
> gprof a.out
Flat profile:
Each sample counts as 0.01 seconds.
% cumulative self self total
time seconds seconds calls s/call s/call name
101.33 50.97 50.97 1 50.97 50.97 do_something
[...]
ndex % time self children called name
50.97 0.00 1/1 main [2]
[1] 100.0 50.97 0.00 1 do_something [1]
-----------------------------------------------
<spontaneous>
[2] 100.0 0.00 50.97 main [2]
50.97 0.00 1/1 do_something [1]
-----------------------------------------------
PLATFORM:
Linux 2.6.x x86_64 (x86_64-uknown-linux-gnu)
(observed with RedHat 2.6.9 and 2.6.10 kernels)
(observed on both AMD Opteron and Intel Pentium D)
TOOLCHAIN:
gcc 4.1.1 (same observed with gcc 3.4.5)
binutils nightly 0621 (same observed with older releases)
glibc 2.3.4
Jeremy
smime.p7s
Description: S/MIME Cryptographic Signature
_______________________________________________ bug-binutils mailing list bug-binutils@gnu.org http://lists.gnu.org/mailman/listinfo/bug-binutils
