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.