Date: Tue, 8 Mar 2011 16:31:54 -0500 From: John Baldwin <jhb@freebsd.org> To: freebsd-stable@freebsd.org Subject: Re: sys/x86/isa/clock.c:189: undefined reference to `cyclic_clock_func' Message-ID: <201103081631.54304.jhb@freebsd.org> In-Reply-To: <alpine.BSF.2.00.1103080947340.40738@qvfongpu.qngnvk.ybpny> References: <alpine.BSF.2.00.1103080311520.13536@qvfongpu.qngnvk.ybpny> <alpine.BSF.2.00.1103080415520.58425@qvfongpu.qngnvk.ybpny> <alpine.BSF.2.00.1103080947340.40738@qvfongpu.qngnvk.ybpny>
next in thread | previous in thread | raw e-mail | index | archive | help
On Tuesday, March 08, 2011 10:19:30 am J. Hellenthal wrote: > > On Tue, 8 Mar 2011 04:18, jhell@ wrote: > > On Tue, 8 Mar 2011 03:29, jhell@ wrote: > >> > >> Hello Stable@, > >> > >> Compiling a kernel on stable/8 with DTrace support is failing with the > >> above > >> subject line upon linking kernel.debug. > >> > >> The text leading up to this is: > >> ... > >> ctfconvert -L VERSION -g vers.o > >> linking kernel.debug > >> clock.o(.text+0x84c): In function `clkintr': > >> /usr/src/sys/x86/isa/clock.c:189: undefined reference to > >> `cyclic_clock_func' > >> > >> And upon inspection of clock.c: > >> #ifdef KDTRACE_HOOKS > >> #include <sys/dtrace_bsd.h> > >> #endif > >> > >> And in clkintr(): > >> #ifdef KDTRACE_HOOKS > >> /* > >> * If the DTrace hooks are configured and a callback function > >> * has been registered, then call it to process the high speed > >> * timers. > >> */ > >> int cpu = PCPU_GET(cpuid); > >> if (cyclic_clock_func[cpu] != NULL) > >> (*cyclic_clock_func[cpu])(frame); > >> #endif > >> > >> > >> It seems for some odd reason that <sys/dtrace_bsd.h> is being forgotten > >> when > >> it comes time for linking ? What is going on here ? > >> > >> Id like to just remove the ifdef's for KDTRACE_HOOKS just to get the build > >> to > >> finish but in the case that I want to build another kernel without dtrace I > >> would have to add them back. Anyone have a better fitting solution to this > >> ? > >> > >> Would it be just as good to re-ifdef this to ?WITH_CTF? instead. > >> > >> Anyway... this is latest code from stable/8 on i386. And yes options > >> KDTRACE_HOOKS is in the kernel config. > >> > >> And the command that caused all this: > >> ( make kernel WITH_CTF=1 ) > >> > > > > In light of this I decided to just remove the effected section of clock.c > > and move forward as this part of the kernel with DTrace is not what I am > > looking into. > > > > Attached is a small patch that removes it in case someone else comes > > across the same thing and needs a quick workaround. > > > > To my best belief the cause is this i386 build is being done without > "device apic" that includes I/O APIC (local_apic.c) which defines in a > ifdef KDTRACE_HOOKS ( cyclic_clock_func_t cyclic_clock_func[MAXCPU]; ). > Since the lack of I/O APIC being used, sys/x86/isa/clock.c needs its own > definition of the same cyclic_clock_func, so I have added this in the same > way that its implemented in local_apic.c to clock.c and the build succeeds > and is usable. > > Would it be best to just move cyclic_clock_func definition to dtrace_bsd.h > instead ? and remove the definition in local_apic.c ? I think DTrace requires the local APIC to work as it hooks directly into the local APIC timer interrupt IIRC. -- John Baldwin
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201103081631.54304.jhb>