Date: Sat, 2 Mar 2002 06:36:13 +1100 (EST) From: Bruce Evans <bde@zeta.org.au> To: Mark Murray <mark@grondar.za> Cc: <arch@FreeBSD.ORG> Subject: Re: Warning and lint(1) fixes. Review please. Message-ID: <20020302060943.U58081-100000@gamplex.bde.org> In-Reply-To: <200202281836.g1SIaog4051908@grimreaper.grondar.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, 28 Feb 2002, Mark Murray wrote: > Please review the enclosed fixes. I've been running most of them > for more than a month, and they are heavily useful in fixing up > lint moanings. > Index: i386/include/atomic.h > =================================================================== > RCS file: /home/ncvs/src/sys/i386/include/atomic.h,v > retrieving revision 1.26 > diff -u -d -r1.26 atomic.h > --- i386/include/atomic.h 28 Feb 2002 06:17:05 -0000 1.26 > +++ i386/include/atomic.h 28 Feb 2002 09:43:25 -0000 > @@ -89,6 +89,7 @@ > * The assembly is volatilized to demark potential before-and-after side > * effects if an interrupt or SMP collision were to occur. > */ > +#ifdef __GNUC__ > #define ATOMIC_ASM(NAME, TYPE, OP, CONS, V) \ > static __inline void \ > atomic_##NAME##_##TYPE(volatile u_##TYPE *p, u_##TYPE v)\ > @@ -97,6 +98,9 @@ > : "+m" (*p) \ > : CONS (V)); \ > } > +#else > +#define ATOMIC_ASM(NAME, TYPE, OP, CONS, V) > +#endif Should be an extern function for the non-gcc case. We already have some support for this (we build extern versions in atomic.c). > @@ -112,6 +116,7 @@ > { > int res = exp; > > +#ifdef __GNUC__ > __asm __volatile( > " pushfl ; " > " cli ; " > @@ -127,6 +132,7 @@ > : "r" (src), /* 1 */ > "m" (*(dst)) /* 2 */ > : "memory"); > +#endif > > return (res); > } This works (static function instead of extern), but it gives messier code. Keep the non-gcc declarations separate. > Index: i386/include/bus_at386.h > =================================================================== > RCS file: /home/ncvs/src/sys/i386/include/bus_at386.h,v > retrieving revision 1.18 > diff -u -d -r1.18 bus_at386.h > --- i386/include/bus_at386.h 18 Feb 2002 13:43:19 -0000 1.18 > +++ i386/include/bus_at386.h 24 Feb 2002 21:28:54 -0000 > @@ -274,6 +274,7 @@ > else > #endif > { > +#ifdef __GNUC__ > __asm __volatile(" \n\ > cld \n\ > 1: movb (%2),%%al \n\ As in atomic.h, but more so. There are zillions of interfaces in this file. I'm surprised that you didn't have to change more. > @@ -374,7 +380,8 @@ > if (tag == I386_BUS_SPACE_IO) > #endif > { > - int _port_ = bsh + offset; \ > + int _port_ = bsh + offset; OK to fix all of these :-). > Index: i386/include/pcpu.h > =================================================================== > RCS file: /home/ncvs/src/sys/i386/include/pcpu.h,v > retrieving revision 1.32 > diff -u -d -r1.32 pcpu.h > --- i386/include/pcpu.h 11 Dec 2001 23:33:40 -0000 1.32 > +++ i386/include/pcpu.h 28 Feb 2002 10:44:43 -0000 > @@ -32,8 +32,22 @@ > #ifdef _KERNEL > > #ifndef __GNUC__ > -#error gcc is required to use this file > -#endif > + > +#ifndef lint > +#error gcc or lint is required to use this file > +#else /* lint */ > +#define __PCPU_PTR(name) > +#define __PCPU_GET(name) > +#define __PCPU_SET(name, val) I can't think of any good way to handle this. > Index: sys/cdefs.h > =================================================================== > RCS file: /home/ncvs/src/sys/sys/cdefs.h,v > retrieving revision 1.49 > diff -u -d -r1.49 cdefs.h > --- sys/cdefs.h 4 Dec 2001 01:29:54 -0000 1.49 > +++ sys/cdefs.h 19 Feb 2002 15:32:10 -0000 > @@ -112,6 +112,7 @@ > * properly (old versions of gcc-2 supported the dead and pure features > * in a different (wrong) way). > */ > +#ifdef __GNUC__ > #if __GNUC__ < 2 || __GNUC__ == 2 && __GNUC_MINOR__ < 5 > #define __dead2 > #define __pure2 Bogus. If __GNUC__ is not defined, then it is less than 2. > @@ -176,7 +177,6 @@ > #define __printf0like(fmtarg, firstvararg) > #endif > > -#ifdef __GNUC__ > #define __strong_reference(sym,aliassym) \ > extern __typeof (sym) aliassym __attribute__ ((__alias__ (#sym))); > #ifdef __ELF__ This gcc ifdef is unrelated to the one above. It should have its own version checks. I think __alias__ is a syntax error except for relative recent versions of gcc. > @@ -244,7 +244,7 @@ > #if !defined(lint) && !defined(STRIP_FBSDID) > #define __FBSDID(s) __IDSTRING(__CONCAT(__rcsid_,__LINE__),s) > #else > -#define __FBSDID(s) struct __hack > +#define __FBSDID(s) > #endif > #endif This breaks enforcement of a semicolon after __FBSDID(). > Index: sys/eventhandler.h > =================================================================== > RCS file: /home/ncvs/src/sys/sys/eventhandler.h,v > retrieving revision 1.17 > diff -u -d -r1.17 eventhandler.h > --- sys/eventhandler.h 12 Sep 2001 08:38:05 -0000 1.17 > +++ sys/eventhandler.h 19 Feb 2002 22:17:52 -0000 > @@ -75,31 +75,33 @@ > struct eventhandler_entry ee; \ > type eh_func; \ > }; \ > -struct __hack > +struct __hack_ ## name The same incomplete struct should be used for this everywhere. rm-rf any lint that doesn't like this. > +#define EVENTHANDLER_FAST_INVOKE(name, args...) \ > +do { \ > + struct eventhandler_list *_el = &Xeventhandler_list_ ## name ; \ > + struct eventhandler_entry *_ep, *_en; \ > + \ > + if (_el->el_flags & EHE_INITTED) { \ > + lockmgr(&_el->el_lock, LK_EXCLUSIVE, NULL, curthread); \ > + _ep = TAILQ_FIRST(&(_el->el_entries)); \ > + while (_ep != NULL) { \ > + _en = TAILQ_NEXT(_ep, ee_link); \ > + ((struct eventhandler_entry_ ## name *)_ep)->eh_func( \ > + _ep->ee_arg , \ > + ## args \ > + ); \ > + _ep = _en; \ > + } \ > + lockmgr(&_el->el_lock, LK_RELEASE, NULL, curthread); \ > + } \ > } while (0) This is almost readable now. It still has 4-char indents. Bruce To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-arch" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020302060943.U58081-100000>