accf_http.ko breaks without COMPAT_IA32 (module linker
problems?)
John Baldwin
jhb at freebsd.org
Thu Jul 5 17:31:08 UTC 2007
On Tuesday 03 July 2007 04:55:39 pm Jeremy Chadwick wrote:
> On Tue, Jul 03, 2007 at 04:15:09PM -0400, John Baldwin wrote:
> > On Tuesday 03 July 2007 01:53:13 pm Jeremy Chadwick wrote:
> > > Came across this today (and is reproducable):
> > >
> > > With COMPAT_IA32 removed from the kernel configuration, accf_http.ko
> > > breaks in a bad way. Only shown on the console is the message "kldload:
> > > Unsupported file type" when kldload is used to load the module. Worse,
> > > the module linker appears to load a portion of the module anyways:
> > >
> > > # kldstat
> > > Id Refs Address Size Name
> > > 1 2 0xffffffff80100000 566cd0 kernel
> > > 2 1 0xffffffffb468a000 795 accf_http.ko
> > >
> > > # kldstat -v -i 2
> > > Id Refs Address Size Name
> > > 2 1 0xffffffffb468a000 795 accf_http.ko
> > > Contains modules:
> > > Id Name
> > > 173 accf_http
> > >
> > > And attempts to unload the module fail (which is where I question the
> > > reliability of the module linker (no offence intended)):
> > >
> > > # kldunload accf_http.ko
> > > kldunload: can't unload file: Operation not supported
> > > icarus# kldunload -v -f accf_http.ko
> > > Unloading accf_http.ko, id=2
> > > kldunload: can't unload file: Operation not supported
> > >
> > > Minor details:
> > >
> > > -r-xr-xr-x 1 root wheel 5544 Jul 3 10:35 /boot/kernel/accf_http.ko
> > >
> > > /boot/kernel/accf_http.ko: ELF 64-bit LSB relocatable, AMD x86-64,
version 1
> > (FreeBSD), not stripped
> > >
> > > Putting COMPAT_IA32 back in results in proper behaviour all around.
> >
> > What is in dmseg after the kldload? Usually if there is a missing symbol
the
> > kernel will print out its name in dmesg.
>
> This is during bootup, so it happens right as rc.d/apache22 starts.
> rc.d/apache22 loads the module via apache22_http_accept_enable="yes".
> The script also redirects kldload's stderr output to /dev/null, so if
> kldload spits it out to stderr, that might be why nothing gets shown.
dmesg != stderr. The _kernel_ prints out missing symbols to the _dmesg_, not
to userland.
--
John Baldwin
More information about the freebsd-amd64
mailing list