Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 5 Feb 2006 17:56:56 +0100
From:      Marius Strobl <marius@alchemy.franken.de>
To:        Andreas Tobler <toa@pop.agri.ch>
Cc:        freebsd-sparc64@freebsd.org
Subject:   Re: profiling with cc
Message-ID:  <20060205175656.S68720@newtrinity.zeist.de>
In-Reply-To: <43E60F45.4070004@pop.agri.ch>; from toa@pop.agri.ch on Sun, Feb 05, 2006 at 03:44:21PM %2B0100
References:  <43E3D228.6060801@pop.agri.ch> <20060205112432.A3868@newtrinity.zeist.de> <43E5D988.2070009@pop.agri.ch> <20060205122153.O68720@newtrinity.zeist.de> <43E5E70D.1090209@pop.agri.ch> <20060205132234.P68720@newtrinity.zeist.de> <43E60F45.4070004@pop.agri.ch>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sun, Feb 05, 2006 at 03:44:21PM +0100, Andreas Tobler wrote:
> Marius Strobl wrote:
> > On Sun, Feb 05, 2006 at 12:52:45PM +0100, Andreas Tobler wrote:
> >> Marius Strobl wrote:
> >>
> >>> I think all it takes is the MD _mcount() -> mcount() wrapper but I'm
> >>> not sure what it's actually supposed to do.
> >> Ok, thank you for the pointer. I try to read through the code and see if 
> >> I can get something out of it.
> >>
> >> Build question, if I play around in this section, does it mean to 
> >> rebuild the whole kernel/world everytime, or is it enough to just 
> >> compile and install the modified parts ?
> >>
> > 
> > AFAICT the wrapper has to go into the userland version of the MCOUNT
> > macro in <machine/profile.h> and you'll have to re-compile and re-
> > install libc, specifically libc_p.a, in order to test it.
> 
> Good.
> 
> To my understanding, the wrapper should look similar like in
>   sys/amd64/include/profile.h?
> 

Basically yes.

> 
> #else /* !_KERNEL */
> #define _MCOUNT_DECL \
> static void _mcount(uintfptr_t frompc, uintfptr_t selfpc) __used; \
> static void _mcount
> 
> #ifdef __GNUCLIKE_ASM
> 
> #define MCOUNT \
>         __asm(".global " _mcount);\
>         __asm(_mcount ":");\
>         __asm("add %o7, 8, %o1");\
>         __asm("1: call 2f; nop; 2:");\
>         __asm("add %o7," __mcount "-1b, %o2");\
>         __asm("ld [%o2], %o2");\
>         __asm("jmpl %o2, %g0");\
>         __asm("add %i7, 8, %o0");
> #else /* !__GNUCLIKE_ASM */
> #define MCOUNT                                       \
> void                                                 \
> mcount()                                             \
> {                                                    \
> }
> #endif /* __GNUCLIKE_ASM */
> 
> Or am I looking to far?
> 
> The above asm code comes from NetBSD...
> 

As far as I understand MCOUNT refers to the symbol generated by the
compiler and _MCOUNT_DECL to the name of the real function in libc.
As the compiler apparently generates calls to _mcount() on sparc64
the MCOUNT macro should define _mcount() for userland and _MCOUNT_DECL
mcount() or maybe better __mcount(). I'm not sure wheter the NetBSD
asm applies to FreeBSD.
If you let _MCOUNT_DECL define _mcount() as in your snippet above
you'll bypass the wrapper on sparc64 altogether.

Marius

-- 
This mail was scanned by AntiVir Milter.
This product is licensed for non-commercial use.
See www.antivir.de for details.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20060205175656.S68720>