From nobody@FreeBSD.ORG  Sat Jun 24 05:13:39 2000
Return-Path: <nobody@FreeBSD.ORG>
Received: by hub.freebsd.org (Postfix, from userid 32767)
	id 03E0F37B6B1; Sat, 24 Jun 2000 05:13:39 -0700 (PDT)
Message-Id: <20000624121339.03E0F37B6B1@hub.freebsd.org>
Date: Sat, 24 Jun 2000 05:13:39 -0700 (PDT)
From: mhenry@speednet.com.au
Sender: nobody@FreeBSD.ORG
To: freebsd-gnats-submit@FreeBSD.org
Subject: Syscall module example fails to compile
X-Send-Pr-Version: www-1.0

>Number:         19485
>Category:       kern
>Synopsis:       Syscall module example fails to compile
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    freebsd-bugs
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Sat Jun 24 05:20:00 PDT 2000
>Closed-Date:    Sat Jun 24 07:27:09 PDT 2000
>Last-Modified:  Sat Jun 24 07:30:01 PDT 2000
>Originator:     Michael Henry
>Release:        FreeBSD 4.0-STABLE i386
>Organization:
>Environment:
FreeBSD playground.foonet 4.0-STABLE FreeBSD 4.0-STABLE #0: Thu Jun 15 20:54:58 EST 2000     root@playground.foonet:/usr/obj/usr/src/sys/PLAYGROUND  i386
>Description:

I'm getting errors when trying to compile the example system
call in /usr/share/examples/kld/syscall/module/syscall.c.
The version of the file is 1.2.

The errors are as follows:

*** In file included from syscall.c:35:
*** /usr/include/sys/systm.h:327: syntax error before `int'
*** /usr/include/sys/systm.h:328: syntax error before `int'
*** /usr/include/sys/systm.h:329: syntax error before `('

The corresponding lines from the header are:

*** int major(dev_t x);
*** int minor(dev_t x);
*** dev_t makedev(int x, int y);

There is a comment above these lines: "Common `dev_t'
stuff are declared here to avoid #include poisoning".
But these lines are getting mangled by the following
macros defined in <sys/types.h>:

*** #define major(x)        ((int)(((u_int)(x) >> 8)&0xff)) /* major number */
*** #define minor(x)        ((int)((x)&0xffff00ff))         /* minor number */
*** #define makedev(x,y)    ((dev_t)(((x) << 8) | (y)))     /* create dev_t */

which, after pre-processing, results in the following:

*** int ((int)(((u_int)( dev_t x ) >> 8)&0xff)) ;
*** int ((int)(( dev_t x )&0xffff00ff)) ;
*** dev_t ((dev_t)((( int x ) << 8) | (  int y ))) ;

Clearly this is nonsense.


>How-To-Repeat:
cd /usr/share/examples/kld/syscall/module/
gcc -c syscall.c

>Fix:
Remove offending lines from <sys/systm.h>


>Release-Note:
>Audit-Trail:
State-Changed-From-To: open->closed 
State-Changed-By: ru 
State-Changed-When: Sat Jun 24 07:27:09 PDT 2000 
State-Changed-Why:  
syscall module example compiles just fine on 4.0-STABLE. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=19485 

From: Ruslan Ermilov <ru@sunbay.com>
To: mhenry@speednet.com.au
Cc: bug-followup@FreeBSD.org
Subject: Re: kern/19485: Syscall module example fails to compile
Date: Sat, 24 Jun 2000 17:26:31 +0300

 On Sat, Jun 24, 2000 at 05:13:39AM -0700, mhenry@speednet.com.au wrote:
 > 
 > I'm getting errors when trying to compile the example system
 > call in /usr/share/examples/kld/syscall/module/syscall.c.
 > The version of the file is 1.2.
 > 
 > The errors are as follows:
 > 
 > *** In file included from syscall.c:35:
 > *** /usr/include/sys/systm.h:327: syntax error before `int'
 > *** /usr/include/sys/systm.h:328: syntax error before `int'
 > *** /usr/include/sys/systm.h:329: syntax error before `('
 > 
 > The corresponding lines from the header are:
 > 
 > *** int major(dev_t x);
 > *** int minor(dev_t x);
 > *** dev_t makedev(int x, int y);
 > 
 > There is a comment above these lines: "Common `dev_t'
 > stuff are declared here to avoid #include poisoning".
 > But these lines are getting mangled by the following
 > macros defined in <sys/types.h>:
 > 
 > *** #define major(x)        ((int)(((u_int)(x) >> 8)&0xff)) /* major number */
 > *** #define minor(x)        ((int)((x)&0xffff00ff))         /* minor number */
 > *** #define makedev(x,y)    ((dev_t)(((x) << 8) | (y)))     /* create dev_t */
 > 
 > which, after pre-processing, results in the following:
 > 
 > *** int ((int)(((u_int)( dev_t x ) >> 8)&0xff)) ;
 > *** int ((int)(( dev_t x )&0xffff00ff)) ;
 > *** dev_t ((dev_t)((( int x ) << 8) | (  int y ))) ;
 > 
 > Clearly this is nonsense.
 > 
 > 
 > >How-To-Repeat:
 > cd /usr/share/examples/kld/syscall/module/
 > gcc -c syscall.c
 > 
 Try `gcc -D_KERNEL -c syscall.c' or better yet just `make' :-)
 
 > >Fix:
 > Remove offending lines from <sys/systm.h>
 > 
 Add -D_KERNEL to CFLAGS.
 
 
 -- 
 Ruslan Ermilov		Oracle Developer/DBA,
 ru@sunbay.com		Sunbay Software AG,
 ru@FreeBSD.org		FreeBSD committer,
 +380.652.512.251	Simferopol, Ukraine
 
 http://www.FreeBSD.org	The Power To Serve
 http://www.oracle.com	Enabling The Information Age
 
>Unformatted:
