kern/99979: Get Ready for Kernel Module in C++

Intron intron at intron.ac
Sun Jul 9 21:40:23 UTC 2006


>Number:         99979
>Category:       kern
>Synopsis:       Get Ready for Kernel Module in C++
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Sun Jul 09 21:40:17 GMT 2006
>Closed-Date:
>Last-Modified:
>Originator:     Intron
>Release:        7.0-CURRENT
>Organization:
China
>Environment:
7.0-CURRENT, Intel Celeron 1.7GHz
>Description:
     I would write my kernel module in C++, just like IOKit of OpenDarwin. Thus, all conflicts against C++ in current FreeBSD kernel source must be swept out firstly.
     Here, I submit patches for _null.h, libkern.h and systm.h in /sys/sys/.
1. _null.h.diff:
     Now C++ code may also appear inside kernel source.
2. libkern.h.diff:
     C++ prohibits undeclared incompatible cast.
3. systm.h.diff:
     The word "new" is a perserved word of C++.

>How-To-Repeat:

>Fix:
--- _null.h.orig	Mon Jul 10 05:13:36 2006
+++ _null.h	Mon Jul 10 04:58:08 2006
@@ -23,12 +23,12 @@
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
- * $FreeBSD: /repoman/r/ncvs/src/sys/sys/_null.h,v 1.7 2005/01/07 02:29:23 imp Exp $
+ * $FreeBSD: src/sys/sys/_null.h,v 1.7 2005/01/07 02:29:23 imp Exp $
  */
 
 #ifndef NULL
 
-#if defined(_KERNEL) || !defined(__cplusplus)
+#if defined(_KERNEL) && !defined(__cplusplus)
 #define	NULL	((void *)0)
 #else
 #if defined(__LP64__)
@@ -36,6 +36,6 @@
 #else
 #define	NULL	0
 #endif	/* __LP64__ */
-#endif	/* _KERNEL || !__cplusplus */
+#endif	/* _KERNEL && !__cplusplus */
 
 #endif



-----------------------------------------------------------------------------



--- libkern.h.orig	Mon Jul 10 05:15:46 2006
+++ libkern.h	Mon Jul 10 04:09:36 2006
@@ -27,7 +27,7 @@
  * SUCH DAMAGE.
  *
  *	@(#)libkern.h	8.1 (Berkeley) 6/10/93
- * $FreeBSD: /repoman/r/ncvs/src/sys/sys/libkern.h,v 1.52 2005/10/06 19:06:07 pjd Exp $
+ * $FreeBSD: src/sys/sys/libkern.h,v 1.52 2005/10/06 19:06:07 pjd Exp $
  */
 
 #ifndef _SYS_LIBKERN_H_
@@ -115,7 +115,7 @@
 static __inline uint32_t
 crc32_raw(const void *buf, size_t size, uint32_t crc)
 {
-	const uint8_t *p = buf;
+	const uint8_t *p = (const uint8_t *) buf;
 
 	while (size--)
 		crc = crc32_tab[(crc ^ *p++) & 0xFF] ^ (crc >> 8);



-----------------------------------------------------------------------------



--- systm.h.orig	Mon Jul 10 05:17:29 2006
+++ systm.h	Mon Jul 10 04:07:15 2006
@@ -32,7 +32,7 @@
  * SUCH DAMAGE.
  *
  *	@(#)systm.h	8.7 (Berkeley) 3/29/95
- * $FreeBSD: /repoman/r/ncvs/src/sys/sys/systm.h,v 1.240 2006/02/11 09:33:07 phk Exp $
+ * $FreeBSD: src/sys/sys/systm.h,v 1.240 2006/02/11 09:33:07 phk Exp $
  */
 
 #ifndef _SYS_SYSTM_H_
@@ -203,7 +203,7 @@
 int	suword16(void *base, int word);
 int	suword32(void *base, int32_t word);
 int	suword64(void *base, int64_t word);
-intptr_t casuptr(intptr_t *p, intptr_t old, intptr_t new);
+intptr_t casuptr(intptr_t *p, intptr_t old, intptr_t _new);
 
 void	realitexpire(void *);
 

>Release-Note:
>Audit-Trail:
>Unformatted:


More information about the freebsd-bugs mailing list