Fantastic news :-) Please pass this through the release engineering team, Bruce Evans (who has the largest number of commits to the file), and our gcc folks (David O'Brien, and Alexander Kabaev). If it is considered safe for RELENG_7 (what will become 7.0-RELEASE), then it's probably a good idea to commit it. It looks `harmless' to me, but it certainly won't harm to get a proper review from much more experienced people (added to the Cc: list). It would be marvellous to have non-broken profiling in 7.0. - Giorgos On 2007-11-30 01:38, Nikos Ntarmos <ntarmos_at_ceid.upatras.gr> wrote: > I couldn't wait for Garrett :) so I went on and tested your patch and > gprof seems to work fine for me (at least for the executables I was > interested in profiling anyway). This is i386 on a 7.0-BETA3 kernel and > 7.0-BETA1 world. What are the chances for this to be committed in time > for 7.0R? On 2007-11-29 20:24, Luoqi Chen <luoqi_at_freebsd.org> wrote: > Garrett, would you like to try out my fix? It's actually quite simple, > > Index: profile.h > =================================================================== > RCS file: /home/ncvs/src/sys/i386/include/profile.h,v > retrieving revision 1.42 > diff -u -r1.42 profile.h > --- profile.h 28 Oct 2006 11:03:03 -0000 1.42 > +++ profile.h 29 Nov 2007 20:07:15 -0000 > _at__at_ -115,7 +115,17 _at__at_ > void \ > mcount() \ > { \ > - uintfptr_t selfpc, frompc; \ > + uintfptr_t selfpc, frompc, ecx; \ > + /* \ > + * In gcc 4.2, ecx could be used in the caller as arg pointer \ > + * if stack realignment option is set (-mstackrealign) or \ > + * if the caller has the force_align_arg_pointer atrribute \ > + * (stack realignment is ALWAYS on for main). Preserve ecx \ > + * here. Use volatile to prevent this statement from being \ > + * rescheduled with the next two, just in case the compiler \ > + * decides to use ecx for either selfpc or frompc. \ > + */ \ > + __asm __volatile("movl %%ecx,%0" : "=m" (ecx)); \ > /* \ > * Find the return address for mcount, \ > * and the return address for mcount's caller. \ > _at__at_ -132,6 +142,7 _at__at_ > __asm("movl (%%ebp),%0" : "=r" (frompc)); \ > frompc = ((uintfptr_t *)frompc)[1]; \ > _mcount(frompc, selfpc); \ > + __asm __volatile("movl %0,%%ecx" : : "m" (ecx)); \ > } > #else /* !__GNUCLIKE_ASM */ > #define MCOUNT > > This file is in the kernel tree, but the change only affects libc > build. If you don't want to redo a world build, you may copy the > patched profile.h to /usr/include/machine and "make all install" > inside /usr/src/lib/libc. Then re-link -pg compiled code and try > it out.
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:23 UTC