Subject: Re: CVS commit: src/sys/arch/mips/conf
To: Izumi Tsutsui <tsutsui@ceres.dti.ne.jp>
From: Simon Burge <simonb@wasabisystems.com>
List: source-changes
Date: 11/13/2005 23:39:06
Hi Izumi,

Izumi Tsutsui wrote:

> In article <20051111062204.542AF2DA27@cvs.netbsd.org>
> simonb@NetBSD.org wrote:
> 
> > Module Name:	src
> > Committed By:	simonb
> > Date:		Fri Nov 11 06:22:04 UTC 2005
> > 
> > Modified Files:
> > 	src/sys/arch/mips/conf: Makefile.mips
> > 
> > Log Message:
> > Build libkern as a .o if LKMs are enabled so that all libkern functions
> > are available to LKMs, not just those needed by the kernel at link time.
> 
> This seems to cause the following errors on arc:
> ---
> ld -T ../../../../arch/mips/conf/kern.ldscript -Ttext 0x80200000 -e start \
> -G 0 -x -o netbsd ${SYSTEM_OBJ} ${EXTRA_OBJ} vers.o
> /usr/src/sys/arch/arc/compile/GENERIC/lib/kern/libkern.o(.text+0x640): \
> In function `_insque':
> : multiple definition of `_insque'
> locore.o(.text+0x5a4): first defined here
> /usr/src/sys/arch/arc/compile/GENERIC/lib/kern/libkern.o(.text+0x658): \
> In function `_remque':
> : multiple definition of `_remque'
> locore.o(.text+0x5bc): first defined here
> *** Error code 1
> ---

Using the libkern versions of _insque and _remque work fine.  In fact,
the MIPS locore of version doesn't do the "elem->q_prev = 0;" part of
_remque, and yet because it uses a nop the gcc version still gets away
with the same number of instructions (6) for this function.  The gcc and
locore versions of _insque are the same.

I'm still not sure why my test kernel worked (built for sbmips).  I'll
switch now to the libkern versions.

Simon.
--
Simon Burge                            <simonb@wasabisystems.com>
NetBSD Support and Service:         http://www.wasabisystems.com/