Subject: kern/30522: Variable instantiation in kernel header files (like softnet_cookie) breaking the kernel build
To: None <kern-bug-people@netbsd.org, gnats-admin@netbsd.org,>
From: None <shadum@cinis.com>
List: netbsd-bugs
Date: 06/14/2005 13:08:00
>Number: 30522
>Category: kern
>Synopsis: Variable instantiation in kernel header files (like softnet_cookie) breaking the kernel build
>Confidential: no
>Severity: serious
>Priority: high
>Responsible: kern-bug-people
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Tue Jun 14 13:08:00 +0000 2005
>Originator: Michiel Meijer
>Release: 2.0 - 2.0.2
>Organization:
N.A.
>Environment:
NetBSD sparc 2.0 NetBSD 2.0 (GENERIC_SCSI3) #0: Thu Dec 2 01:58:44 UTC 2004 builds@build:/big/builds/ab/netbsd-2-0-RELEASE/sparc/200411300000Z-obj/big/builds/ab/netbsd-2-0-RELEASE/src/sys/arch/sparc/compile/GENERIC_SCSI3 sparc
>Description:
Within machine depndant parts and include files some variables are instantiated in kernel header files. (This is not limited to softnet_cookie nor to the sparc platform). These files are included in multiple locations resulting in link time clashes. In many cases re defining these instantiations into being 'extern' results in linking errors because now these variables have not been instantiated. This type of error occurs in so many places i gave up trying to fix them.
>How-To-Repeat:
Try building a sparc kernel on a sparc machine (see uname above) using this config file:
# $NetBSD: GENERIC,v 1.149.2.4 2004/07/15 20:31:06 he Exp $
#
# GENERIC machine description file
#
# This machine description file is used to generate the default NetBSD
# kernel. The generic kernel does not include all options, subsystems
# and device drivers, but should be useful for most applications.
#
# The machine description file can be customised for your specific
# machine to reduce the kernel size and improve its performance.
#
# For further information on compiling NetBSD kernels, see the config(8)
# man page.
#
# For further information on hardware support for this architecture, see
# the intro(4) man page. For further information about kernel options
# for this architecture, see the options(4) man page. For an explanation
# of each device driver in this file see the section 4 man page for the
# device.
include "arch/sparc/conf/std.sparc"
makeoptions DEFCOPTS="-O0"
#options INCLUDE_CONFIG_FILE # embed config file in kernel binary
#ident "GENERIC-$Revision: 1.149.2.4 $"
maxusers 256
## System kernel configuration. See options(4) for more detail.
# Options for variants of the Sun SPARC architecure.
# We currently support three architecture types; at least one is required.
#options SUN4 # sun4/100, sun4/200, sun4/300
#options SUN4C # sun4c - SS1, 1+, 2, ELC, SLC, IPC, IPX, etc.
options SUN4M # sun4m - SS10, SS20, Classic, etc.
#options SUN4_MMU3L # sun4/400 3-level MMU
## System options specific to the sparc machine type
# Blink the power LED on some machines to indicate the system load.
options BLINK
## Use a faster console than the PROM's slow drawing routines. Not needed
## for headless (no framebuffer) machines.
#options RASTERCONSOLE # fast rasterop console
#options FONT_GALLANT12x22 # the console font
#options FONT_BOLD8x16 # a somewhat smaller font
## default console colors: black-on-white; this can be changed
## using the following two options.
#options RASTERCONSOLE_FGCOL=WSCOL_BLACK
#options RASTERCONSOLE_BGCOL=WSCOL_WHITE
#### System options that are the same for all ports
## Root device configuration: change the ?'s if you are going to use a
## nonstandard root partition (other than where the kernel is booted from)
## and/or nonstandard root type (not ffs or nfs). Normally this can be
## automagically determined at boot time.
config netbsd root on ? type ?
## System call tracing (see ktrace(1)).
#options KTRACE
#options SYSTRACE # system call vetting via systrace(1)
## Collect statistics on kernel malloc's and free's. This does have a
## significant performance hit on slower machines, so it is intended for
## diagnostic use only.
#options KMEMSTATS
## System V compatible IPC subsystem. (msgctl(2), semctl(2), and shmctl(2))
options SYSVMSG # System V message queues
options SYSVSEM # System V semaphores
#options SEMMNI=10 # number of semaphore identifiers
#options SEMMNS=60 # number of semaphores in system
#options SEMUME=10 # max number of undo entries per process
#options SEMMNU=30 # number of undo structures in system
options SYSVSHM # System V shared memory
#options SHMMAXPGS=1024 # 1024 pages is the default
options P1003_1B_SEMAPHORE # p1003.1b semaphore support
## Loadable kernel module support; still under development.
#options LKM
#options USERCONF # userconf(4) support
#options PIPE_SOCKETPAIR # smaller, but slower pipe(2)
#options SYSCTL_INCLUDE_DESCR # Include sysctl descriptions in kernel
# Enable experimental buffer queue strategy for better responsiveness under
# high disk I/O load. Use it with caution - it's not proven to be stable yet.
options NEW_BUFQ_STRATEGY
## NFS boot options; tries DHCP/BOOTP then BOOTPARAM
#options NFS_BOOT_BOOTPARAM
#options NFS_BOOT_BOOTP
#options NFS_BOOT_DHCP
#### Debugging options
## The DDB in-kernel debugger runs at panic (unless DDB_ONPANIC=0), or at
## serial console break or keyboard reset, where the PROM would normally
## intercept. DDB_HISTORY_SIZE adds up/down arrow command history.
#options DDB # kernel dynamic debugger
#options DDB_HISTORY_SIZE=100 # enable history editing in DDB
#options DDB_ONPANIC=1 # see also sysctl(8): `ddb.onpanic'
## You may also use gdb, on another computer connected to this machine over
## a serial port. Both KGDB_DEV and KGDB_DEVRATE should be specified;
## KGDB_DEV is a dev_t encoded device number of the serial port to use, where
## the minor device number encodes the PROM enumeration of the serial ports,
## i.e.:
## 0xc00 = ttya, 0xc01 = ttyb, 0xc02 = ttyc, 0xc03 = ttyd.
## (Note: ttyc and ttyd are available only on some sun4 models)
#options KGDB # support for kernel gdb
#options KGDB_DEV=0xc01 # kgdb device number (this is `ttyb')
#options KGDB_DEVRATE=38400 # baud rate
## Compile the kernel with debugging symbols (`netbsd.gdb' is the debug file),
## such that gdb(1) can be used on a kernel coredump.
#makeoptions DEBUG="-g"
## Adds code to the kernel that does internal consistency checks, and will
## cause the kernel to panic if corruption of internal data structures
## is detected.
#options DIAGNOSTIC # extra kernel sanity checking
## Enable (possibly expensive) debugging code that may also display messages
## on the system console
#options DEBUG
## Make SCSI error messages more verbose when explaining their meanings.
#options SCSIVERBOSE
#options MIIVERBOSE # verbose PHY autoconfig messages
## `INSECURE' turns off the kernel security level (securelevel = 0 always).
## This allows writing to /dev/mem, loading kernel modules while multi-user,
## and other insecurities good only for development work. Do not use this
## option on a production machine.
#options INSECURE
## `FDSCRIPTS' allows non-readable but executable scripts by providing a
## pre-opened opaque file to the script interpreter. `SETUIDSCRIPTS',
## which implies FDSCRIPTS, allows scripts to be set-user-id using the same
## opaque file mechanism. Perl calls this "secure setuid scripts."
#options FDSCRIPTS
#options SETUIDSCRIPTS
## Options for compatibility with previous releases foreign system binaries.
## In the cases of COMPAT_SUNOS and COMPAT_SVR4, you may need to set up
## additional user-level utilities or system configuration files. See
## compat_sunos(8) and compat_svr4(8).
#options COMPAT_43 # 4.3BSD system interfaces
#options COMPAT_10 # NetBSD 1.0 binary compatibility
#options COMPAT_11 # NetBSD 1.1 binary compatibility
#options COMPAT_12 # NetBSD 1.2 binary compatibility
#options COMPAT_13 # NetBSD 1.3 binary compatibility
#options COMPAT_14 # NetBSD 1.4 binary compatibility
#options COMPAT_16 # NetBSD 1.6 binary compatibility
#options COMPAT_SUNOS # SunOS 4.x binary compatibility
#options COMPAT_SVR4 # SunOS 5.x binary compatibility
## File systems. You probably need at least one of FFS or NFS.
file-system FFS # Berkeley Fast Filesystem
file-system NFS # Sun NFS-compatible filesystem client
file-system KERNFS # kernel data-structure filesystem
file-system NULLFS # NULL layered filesystem
#file-system OVERLAY # overlay file system
file-system MFS # memory-based filesystem
file-system FDESC # user file descriptor filesystem
#file-system UMAPFS # uid/gid remapping filesystem
#file-system LFS # Log-based filesystem (still experimental)
#file-system PORTAL # portal filesystem (still experimental)
file-system PROCFS # /proc
file-system CD9660 # ISO 9660 + Rock Ridge file system
file-system UNION # union file system
file-system MSDOSFS # MS-DOS FAT filesystem(s).
#file-system CODA # Coda File System; also needs vcoda (below)
## File system options.
#options NFSSERVER # Sun NFS-compatible filesystem server
#options QUOTA # FFS quotas
#options FFS_EI # FFS Endian Independent support
options SOFTDEP # FFS soft updates support.
## Network protocol support. In most environments, INET is required.
options INET # IP (Internet Protocol) v4
#options INET6 # IPV6
options IPSEC # IP security
options IPSEC_ESP # IP security (encryption part; define w/IPSEC)
#options IPSEC_DEBUG # debug for IP security
options GATEWAY # packet forwarding ("router switch")
options MROUTING # packet forwarding of multicast packets
options DIRECTED_BROADCAST # allow broadcasts through routers
#options NS # Xerox NS networking
#options NSIP # Xerox NS tunneling over IP
#options ISO,TPIP # OSI networking
#options EON # OSI tunneling over IP
#options CCITT,LLC,HDLC # X.25 packet switched protocol
#options NETATALK # AppleTalk (over Ethernet) protocol
options NTP # Network Time Protocol in-kernel support
#options PPS_SYNC # Add serial line synchronization for NTP
options PFIL_HOOKS # Add pfil(9) hooks, intended for custom LKMs.
options IPFILTER_LOG # Add ipmon(8) logging for ipfilter device
#options IPFILTER_DEFAULT_BLOCK # block all packets by default
#options PPP_BSDCOMP # Add BSD compression to ppp device
#options PPP_DEFLATE # Add deflate (libz) compression to ppp device
#options PPP_FILTER # Add active filters for ppp (via bpf)
#options ALTQ # Manipulate network interfaces' output queues
#options ALTQ_BLUE # Stochastic Fair Blue
#options ALTQ_CBQ # Class-Based Queueing
#options ALTQ_CDNR # Diffserv Traffic Conditioner
#options ALTQ_FIFOQ # First-In First-Out Queue
#options ALTQ_FLOWVALVE # RED/flow-valve (red-penalty-box)
#options ALTQ_HFSC # Hierarchical Fair Service Curve
#options ALTQ_LOCALQ # Local queueing discipline
#options ALTQ_PRIQ # Priority Queueing
#options ALTQ_RED # Random Early Detection
#options ALTQ_RIO # RED with IN/OUT
#options ALTQ_WFQ # Weighted Fair Queueing
#### Main bus and CPU .. all systems.
mainbus0 at root
cpu0 at mainbus0
cpu* at mainbus0
#### Bus types found on SPARC systems.
obio0 at mainbus0 # sun4 and sun4m
iommu0 at mainbus0 # sun4m
sbus0 at iommu0
#### Standard system devices -- all required for a given architecture
## Auxiliary system registers on sun4c and sun4m
auxreg0 at obio0 # sun4m
## Power status and control register on Sun4m systems
power0 at obio0
## Mostek clock found on 4/300, sun4c, and sun4m systems.
## The Mostek clock NVRAM is the "eeprom" on sun4/300 systems.
clock0 at obio0 # sun4m
## Memory error registers.
memreg0 at obio0 # sun4m
## ECC memory control
eccmemctl0 at mainbus0 # sun4m
## Timer chip found on 4/300, sun4c, and sun4m systems.
timer0 at obio0 # sun4m
#### Serial port configuration
## Zilog 8530 serial chips. Each has two-channels.
## zs0 is ttya and ttyb. zs1 is the keyboard and mouse.
zs0 at obio0 # sun4m
zstty0 at zs0 channel 0 # ttya
zstty1 at zs0 channel 1 # ttyb
zs1 at obio0 # sun4m
kbd0 at zs1 channel 0 # keyboard
ms0 at zs1 channel 1 # mouse
# Parallel port.
bpp* at sbus? slot? offset ?
#### Disk controllers and disks
#
## The following flags may be set for the NCR53c94 based esp driver:
## bits 0-7: disable disconnect/reselect for the corresponding target
## bits 8-15: disable synchronous negotiation for target [bit-8]
dma0 at sbus0 slot ? offset ? # sun4c/sun4m
esp0 at dma0 flags 0x0000 # sun4m
# FSBE/S SCSI & SunSwift Sbus FAS366
dma* at sbus? slot ? offset ? # SBus
esp* at sbus? slot ? offset ? flags 0x0000 # SBus
scsibus* at esp?
## These entries find devices on all SCSI busses and assign
## unit numbers dynamically.
sd0 at scsibus? target 3 lun ? # first SCSI disk
sd1 at scsibus? target 1 lun ? # second SCSI disk
sd2 at scsibus? target 2 lun ? # third SCSI disk
sd3 at scsibus? target 0 lun ? # fourth SCSI disk
sd* at scsibus? target ? lun ? # SCSI disks
st* at scsibus? target ? lun ? # SCSI tapes
cd* at scsibus? target ? lun ? # SCSI CD-ROMs
#ch* at scsibus? target ? lun ? # SCSI changer devices
#ss* at scsibus? target ? lun ? # SCSI scanners
#ses* at scsibus? target ? lun ? # SCSI SES/SAF-TE
uk* at scsibus? target ? lun ? # unknown SCSI
## Floppy controller and drive found on SPARCstations.
fdc0 at obio0 # sun4m controller
fd* at fdc0 # the drive itself
## A disk-like interface to files. Can be used to create floppy, CD,
## miniroot images, etc.
pseudo-device vnd 4
## Concatenated and striped disks; with this, you can create a software-based
## disk array similar to a "RAID 0" setup. See ccd(4).
#pseudo-device ccd 4
## Cryptographic disk devices; See cgd(4)
pseudo-device cgd 4
## RAIDframe disk driver: software RAID driver. See raid(4).
#pseudo-device raid 8
#options RAID_AUTOCONFIG # auto-configuration of RAID components
# Options to enable various other RAIDframe RAID types.
# options RF_INCLUDE_EVENODD=1
# options RF_INCLUDE_RAID5_RS=1
# options RF_INCLUDE_PARITYLOGGING=1
# options RF_INCLUDE_CHAINDECLUSTER=1
# options RF_INCLUDE_INTERDECLUSTER=1
# options RF_INCLUDE_PARITY_DECLUSTERING=1
# options RF_INCLUDE_PARITY_DECLUSTERING_DS=1
## Memory disk device, used on boot floppies with compressed
## kernel-plus-root-disk images.
#pseudo-device md 1
#### Network interfaces
## LANCE Ethernet - an AMD 7990 LANCE behind specialized DMA glue
## Three flavors of additional SBus ethernets are available. One attaches
## directly like the sun4c on-board, one uses the ledma device like the
## sun4m on-board, and one uses the lebuffer device.
ledma0 at sbus0 slot ? offset ? # sun4m on-board
le0 at ledma0 # sun4m on-board
ledma* at sbus? slot ? offset ? # SBus
le* at ledma? # SBus
## Loopback network interface; required
pseudo-device loop
## SLIP and CSLIP interfaces, for IP over a serial line.
#pseudo-device sl 2
## PPP, the successor to SLIP. See pppd(8).
#pseudo-device ppp 2
## PPP over Ethernet (RFC 2516)
#pseudo-device pppoe
## Starmode Radio IP, a special hardware network device.
#pseudo-device strip 1
## Network "tunnel" device, allowing protocol stacks to run in the userland.
## This is used by the third-party user-mode "ppp" program, and others.
#pseudo-device tun 4
## Generic L3 over IP tunnel
#pseudo-device gre 2 # generic L3 over IP tunnel
## Berkeley Packet Filter, required to run RARPD. A generic C-language
## interface that allows selective examining of incoming packets.
pseudo-device bpfilter 8
## IP Filter, used in firewall and NAT applications. See ipnat(8) for
## one example of the use of the IP Filter.
pseudo-device ipfilter
## for IPv6
#pseudo-device gif 4 # IPv[46] over IPv[46] tunnel (RFC1933)
#pseudo-device faith 1 # IPv[46] tcp relay translation i/f
#pseudo-device stf 1 # 6to4 IPv6 over IPv4 encapsulation
## IEEE 802.1Q Virtual LAN encapsulation, see vlan(4).
#pseudo-device vlan
## Simple inter-network traffic bridging
#pseudo-device bridge
#options BRIDGE_IPF # bridge uses IP/IPv6 pfil hooks too
#### Audio and video devices
#### Other device configuration
## Pseudo ttys, required for network logins and programs like screen.
pseudo-device pty # pseudo-terminals
## Random device, used to implement /dev/random (a source of random noise),
## and generate randomness for some kernel formulae.
pseudo-device rnd
# a pseudo device needed for Coda # also needs CODA (above)
#pseudo-device vcoda 4 # coda minicache <-> venus comm.
pseudo-device clockctl # user control of clock subsystem
pseudo-device ksyms # /dev/ksyms
>Fix:
Think before you change the way the kernel files should work.