Skip site navigation (1)Skip section navigation (2)
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>