Date: Wed, 28 Nov 2007 23:22:45 GMT From: Luoqi Chen <luoqi@FreeBSD.org> To: current@FreeBSD.org, ivoras@FreeBSD.org Subject: RE: gprof's broken in 7-CURRENT Message-ID: <200711282322.lASNMjNu014322@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
> Luoqi Chen wrote: > > Has anyone else noticed that gprof no longer works with gcc 4.2 > > It's a known bug (very irritating!), but I think noone is working on it > so it won't be fixed in 7.0. In that case, I'll fix it. I've looked at glibc's code, it claims that mcount cannot clobber any register. I don't know if there is a standard for mcount interface, but I guess the gcc team would use the glibc implementation as the reference. I'll change our code to do the same. /* We need a special version of the `mcount' function since for ix86 it must not clobber any register. This has several reasons: - there is a bug in gcc as of version 2.7.2.2 which prohibits the use of profiling together with nested functions - the ELF `fixup' function uses GCC's regparm feature - some (future) systems might want to pass parameters in registers. */ ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME(_mcount) ASM_TYPE_DIRECTIVE(C_SYMBOL_NAME(_mcount), @function) .align ALIGNARG(4) C_LABEL(_mcount) /* Save the caller-clobbered registers. */ pushl %eax pushl %ecx pushl %edx movl 12(%esp), %edx movl 4(%ebp), %eax /* No need to access the PLT or GOT, __mcount_internal is an internal function and we can make a relative call. */ call C_SYMBOL_NAME(__mcount_internal) /* Pop the saved registers. Please note that `mcount' has no return value. */ popl %edx popl %ecx popl %eax ret ASM_SIZE_DIRECTIVE(C_SYMBOL_NAME(_mcount)) Thanks -lq
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200711282322.lASNMjNu014322>