Subject: kern/30439: lkm/compat_freebsd.o is not loadable
To: None <kern-bug-people@netbsd.org, gnats-admin@netbsd.org,>
From: None <m4nb@biff.mail-box.ne.jp>
List: netbsd-bugs
Date: 06/06/2005 06:07:01
>Number:         30439
>Category:       kern
>Synopsis:       lkm/compat_freebsd.o is not loadable
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    kern-bug-people
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Mon Jun 06 06:07:00 +0000 2005
>Originator:     Yomura Masanori
>Release:        NetBSD 3.99.5
>Organization:
>Environment:
NetBSD lmm.localdomain 3.99.5 NetBSD 3.99.5 (CUSTOM) #0: Sat May 28 00:24:21 JST 2005  root@lmm.localdomain:/fs/local/var/i386/obj/sys/arch/i386/compile/TEST

>Description:
LKM compat_freebsd.o is not loadable.

Errors:
# modload /usr/lkm/compat_freebsd.o
/usr/lkm/compat_freebsd.o(.data+0x9a0): undefined reference to `freebsd_sys_sysctl'
/usr/lkm/compat_freebsd.o(.data+0xf34): undefined reference to `freebsd_sys_yield'
/usr/lkm/compat_freebsd.o(.data+0xf7c): undefined reference to `freebsd_sys_sched_setparam'
/usr/lkm/compat_freebsd.o(.data+0xf88): undefined reference to `freebsd_sys_sched_getparam'
/usr/lkm/compat_freebsd.o(.data+0xf94): undefined reference to `freebsd_sys_sched_setscheduler'
/usr/lkm/compat_freebsd.o(.data+0xfa0): undefined reference to `freebsd_sys_sched_getscheduler'
/usr/lkm/compat_freebsd.o(.data+0xfac): undefined reference to `freebsd_sys_sched_yield'
/usr/lkm/compat_freebsd.o(.data+0xfb8): undefined reference to `freebsd_sys_sched_get_priority_max'
/usr/lkm/compat_freebsd.o(.data+0xfc4): undefined reference to `freebsd_sys_sched_get_priority_min'
modload: can't prelink `/usr/lkm/compat_freebsd.o' creating `/usr/lkm/compat_freebsd'

>How-To-Repeat:
1. Build kernel with 'no options COMPAT_FREEBSD'
2. modload /usr/lkm/compat_freebsd.o

>Fix:
Add freebsd_sched.c and freebsd_sysctl.c in Makefile.

--- /usr/src/sys/lkm/compat/freebsd/Makefile.orig   2005-06-06 06:33:56.000000000 +0900
+++ /usr/src/sys/lkm/compat/freebsd/Makefile    2005-06-06 06:31:09.000000000 +0900
@@ -16,7 +16,8 @@
 SRCS+= lkminit_emul.c
 SRCS+= freebsd_exec.c freebsd_file.c freebsd_fork.c \
    freebsd_ioctl.c freebsd_ipc.c \
-   freebsd_misc.c freebsd_ptrace.c freebsd_syscalls.c freebsd_sysent.c
+   freebsd_misc.c freebsd_ptrace.c freebsd_syscalls.c freebsd_sysent.c \
+   freebsd_sched.c freebsd_sysctl.c
 
 # XXXX - temporary, not applicable for kernel with COMPAT_43, OSSAUDIO
 #.PATH: $S/compat/common $S/compat/ossaudio

-------
And prototyping of freebsd_sysctl_setup in somewhere, like this:

--- /usr/src/sys/compat/freebsd/freebsd_sysctl.corig    2005-06-06 06:40:46.000000000 +0900
+++ /usr/src/sys/compat/freebsd/freebsd_sysctl.c    2005-06-06 06:41:32.000000000 +0900
@@ -65,6 +65,8 @@
 
 static int freebsd_sysctl_name2oid(char *, int *, int *);
 
+SYSCTL_SETUP_PROTO(freebsd_sysctl_setup);
+
 SYSCTL_SETUP(freebsd_sysctl_setup, "freebsd emulated sysctl setup")
 {
    sysctl_createv(clog, 0, NULL, NULL,