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,