8.x grudges

M. Warner Losh imp at bsdimp.com
Sun Jul 11 20:08:37 UTC 2010


In message: <AANLkTikdJ39LiaFfibdwkFa1VgT4w7M8tOXeVJYkHF_W at mail.gmail.com>
            Garrett Cooper <yanefbsd at gmail.com> writes:
: On Wed, Jul 7, 2010 at 1:17 PM, Mikhail T. <mi+thun at aldan.algebra.com> wrote:
: > 07.07.2010 14:59, Jeremy Chadwick ???????(??):
: >>>
: >>>      FREEBSD_COMPAT7 kernel option is, apparently, a requirement (and
: >>>      thus not an "option") -- the kernel-config files, that worked with
: >>>      7.x, break without this option in them (in addition to all the
: >>>      nuisance, that's documented in UPDATING -- which, somehow, makes
: >>>      the breakage acceptable). config(8) would not warn about this, but
: >>>      kernel build fails.
: >>>
: >>
: >> We don't use this option (meaning it's removed from our kernels).  It's
: >> definitely not required.  All it does is ensure your kernel can
: >> comprehend executables/binaries built on 7.x.
: >>
: >
: > Attached is the kernel config-file (i386), that worked fine under 7.x. The
: > kernel-compile will break (some *freebsd7* structs undefined), without the
: > COMPAT_FREEBSD7 option. Try it for yourself...
: 
: options 	SYSVSHM			# SYSV-style shared memory
: options 	SYSVMSG			# SYSV-style message queues
: options 	SYSVSEM			# SYSV-style semaphores
: 
: Those require COMPAT_FREEBSD7. This does seem like a bug:
: 
: static struct syscall_helper_data shm_syscalls[] = {
:         SYSCALL_INIT_HELPER(shmat),
:         SYSCALL_INIT_HELPER(shmctl),
:         SYSCALL_INIT_HELPER(shmdt),
:         SYSCALL_INIT_HELPER(shmget),
: #if defined(COMPAT_FREEBSD4) || defined(COMPAT_FREEBSD5) || \
:     defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD7)
:         SYSCALL_INIT_HELPER(freebsd7_shmctl),
: #endif
: 
: The check should be for COMPAT_FREEBSD7 only I would think.
: 
: Apart from that, everything else should work without it I would think.

You would think that, but you'd be wrong.

In general, if you have COMPAT_FREEBSDx defined, you need all
COMPAT_FREEBSDy for y > x defined.

The reason for this is that we name the compat shim for the version
where it was removed, but it is needed for all prior versions.
freebsd7_shmctl is needed to emulate the earlier versions as well...

This is why we'd like to move to something more like
COMPAT_MIN_FREEBSD=z, but there's hooks into the config system and
syscall tables that make it tricky...

Warner


More information about the freebsd-stable mailing list