tech-userlevel archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: gprof segfaults in mcount
On Sun, Apr 24, 2016 at 03:50:41PM +0200, Timo Buhrmester wrote:
> Dump of assembler code for function mcount:
> 0x0805045f <+0>: push %ebp
> 0x08050460 <+1>: push %edi
> 0x08050461 <+2>: push %esi
> 0x08050462 <+3>: push %ebx
> 0x08050463 <+4>: sub $0x18,%esp
> 0x08050466 <+7>: mov %eax,%ebp
> 0x08050468 <+9>: mov %ecx,0x8(%esp)
> 0x0805046c <+13>: mov %edx,%esi
> => 0x0805046e <+15>: mov 0x4(%ebp),%ebx
> 0x08050471 <+18>: mov 0x0(%ebp),%edi
> 0x08050474 <+21>: mov 0x4(%edi),%edi
> 0x08050477 <+24>: mov 0x80759e0,%ecx
> 0x0805047d <+30>: test %ecx,%ecx
> 0x0805047f <+32>: je 0x805049f <mcount+64>
> 0x08050481 <+34>: mov 0x8074880,%edx
> 0x08050487 <+40>: test %edx,%edx
> 0x08050489 <+42>: je 0x805052f <mcount+208>
It appears that the mcount() entry point defined in
sys/arch/i386/include/profile.h is flatly broken with the new gcc --
the marked instruction is from an __asm that assumes a frame pointer
and there is no frame pointer.
Judging by what that code appears to be doing (e.g. saving caller-save
registers), writing it in C with __asm seems a mistake and bound to
explode with every new compiler version...
--
David A. Holland
dholland%netbsd.org@localhost
Home |
Main Index |
Thread Index |
Old Index