sys/x86/isa/clock.c:189: undefined reference to `cyclic_clock_func'

John Baldwin jhb at freebsd.org
Tue Mar 8 21:32:06 UTC 2011


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


More information about the freebsd-stable mailing list