[Bug 208464] [svr4] svr4.ko fails to load due to not finding symbol svr4_delete_socket even though it is present in same module

bugzilla-noreply at freebsd.org bugzilla-noreply at freebsd.org
Fri Apr 8 18:43:24 UTC 2016


https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=208464

--- Comment #1 from Kristoffer Eriksson <ske-89 at pkmab.se> ---
Created attachment 169112
  --> https://bugs.freebsd.org/bugzilla/attachment.cgi?id=169112&action=edit
Patch for dependencies between svr4.ko & streams.ko due to symbols
svr4_delete_socket & svr4_stream_get

This attachment fixes the bug with both svr4.ko & streams.ko complaining about
undefined symbol svr4_delete_socket. The symbol is present in svr4.ko, but was
not found. Additionally fixes the same problem in reverse for the symbol
svr4_stream_get, which was revealed after the first fix. These created a
two-way dependency between the two modules, preventing both of them from being
loaded.

Moved EXPORT_SYMS=svr4_delete_socket from modules/streams/Makefile to
modules/svr4/Makefile. The function had already moved from streams.ko to
svr4.ko in revision 160558 in 2006, but EXPORT_SYMS was not updated.

Added MODULE_DEPEND(streams, svr4elf) to dev/streams/streams.c to reflect this,
and a matching MODULE_VERSION to compat/svr4/svr4_sysvec.c. Otherwise
streams.ko still didn't find svr4_delete_socket in svr4.ko.

Moved the function svr4_stream_get() from dev/streams/streams.c to
compat/svr4/svr4_socket.c like svr4_delete_socket() was already moved in 2006.
There were no callers in streams.ko, only in svr4.ko. Included svr4_stropts.h
to declare it.

Then removed svr4_stream_get too from EXPORT_SYMS in modules/streams/Makefile
for streams.ko. Removed MODULE_DEPEND(svr4elf, streams) from
compat/svr4/svr4_sysvec.c, since no calls from svr4.ko to streams.ko remained
now. - This dissolves the two-way dependency, leaving only streams.ko depending
on svr4.ko to call svr4_delete_socket().

(Alternatively svr4_delete_socket() might perhaps have been moved back to
streams.ko, or perhaps even all of svr4_sockets.c could have moved there, or
both modules could just as well have been joined into a single module, like it
was originally in NetBSD.)

Removed EXPORT_SYMS=svr4_str_initialized, which doesn't exist currently.

The source I patched came from 10.3-RELEASE.

After this I can successfully kldload these modules again.

-- 
You are receiving this mail because:
You are on the CC list for the bug.


More information about the freebsd-i386 mailing list