svn commit: r290475 - in head: share/man/man9 sys/kern sys/sys

Konstantin Belousov kostikbel at gmail.com
Sat Nov 7 11:21:56 UTC 2015


On Sat, Nov 07, 2015 at 09:25:32PM +1100, Bruce Evans wrote:
> On Sat, 7 Nov 2015, Svatopluk Kraus wrote:
> 
> > You broke buildkernel. The following patch helps:
> >
> > diff --git a/sys/sys/sysctl.h b/sys/sys/sysctl.h
> > index 950e712..a34c890 100644
> > --- a/sys/sys/sysctl.h
> > +++ b/sys/sys/sysctl.h
> > @@ -37,6 +37,7 @@
> > #define _SYS_SYSCTL_H_
> >
> > #include <sys/queue.h>
> > +#include <sys/stdint.h>
> >
> > struct thread;
> > /*
> 
> This adds namespace pollution.  It shouldn't be needed.  <sys/stdint.h>
> is standard namespace pollution in <sys/systm.h>.  (It has a bogus
> comment there describing only one thing that it is for.)
> 
> This pollution is already in dnv.h, nv.h and racct.h.
> 
> > @@ -949,7 +950,7 @@ extern char kern_ident[];
> > /* Dynamic oid handling */
> > struct sysctl_oid *sysctl_add_oid(struct sysctl_ctx_list *clist,
> >      struct sysctl_oid_list *parent, int nbr, const char *name, int kind,
> > -     void *arg1, intptr_t arg2, int (*handler)(SYSCTL_HANDLER_ARGS),
> > +     void *arg1, intmax_t arg2, int (*handler)(SYSCTL_HANDLER_ARGS),
> >      const char *fmt, const char *descr);
> > int sysctl_remove_name(struct sysctl_oid *parent, const char *name, int del,
> >      int recurse);
> 
> Apparently the original change wasn't tested on 32-bit arches.
> 
> I put intptr_t in <sys/types.h> long ago, since it was more needed and
> less magic than intmax_t.  This was obfuscated by moving it to
> <sys/_stdint.h> and including that in various places.  intmax_t is
> still only in <sys/stdint.h> which is much larger.  It and uintmax_t
> should be together with intptr_t.  That is more polluting in theory
> but less in practice.
> 
> <sys/stdint.h> doesn't declare much else directly, but includes
> <sys/_stdint.h> for the most important types (fixed-width ones).  It
> mainly declares least-width and fast-width types directly.  These
> should be used in most cases where fixed-width types are now used,
> especially in kernels, but their usability is shown by them almost
> never being used.

In other words, do you suggest the following change to fix the compilation ?

diff --git a/sys/sys/_stdint.h b/sys/sys/_stdint.h
index d0f9249..a0fe0ad 100644
--- a/sys/sys/_stdint.h
+++ b/sys/sys/_stdint.h
@@ -78,5 +78,13 @@ typedef	__intptr_t		intptr_t;
 typedef	__uintptr_t		uintptr_t;
 #define	_UINTPTR_T_DECLARED
 #endif
+#ifndef _INTMAX_T_DECLARED
+typedef	__intmax_t		intmax_t;
+#define	_INTMAX_T_DECLARED
+#endif
+#ifndef _UINTMAX_T_DECLARED
+typedef	__uintmax_t		uintmax_t;
+#define	_UINTMAX_T_DECLARED
+#endif
 
 #endif /* !_SYS__STDINT_H_ */
diff --git a/sys/sys/stdint.h b/sys/sys/stdint.h
index 762e879..ec3698b 100644
--- a/sys/sys/stdint.h
+++ b/sys/sys/stdint.h
@@ -55,15 +55,6 @@ typedef	__uint_fast16_t		uint_fast16_t;
 typedef	__uint_fast32_t		uint_fast32_t;
 typedef	__uint_fast64_t		uint_fast64_t;
 
-#ifndef _INTMAX_T_DECLARED
-typedef	__intmax_t		intmax_t;
-#define	_INTMAX_T_DECLARED
-#endif
-#ifndef _UINTMAX_T_DECLARED
-typedef	__uintmax_t		uintmax_t;
-#define	_UINTMAX_T_DECLARED
-#endif
-
 /* GNU and Darwin define this and people seem to think it's portable */
 #if defined(UINTPTR_MAX) && defined(UINT64_MAX) && (UINTPTR_MAX == UINT64_MAX)
 #define	__WORDSIZE		64
diff --git a/sys/sys/sysctl.h b/sys/sys/sysctl.h
index 950e712..f3e2d68 100644
--- a/sys/sys/sysctl.h
+++ b/sys/sys/sysctl.h
@@ -949,7 +949,7 @@ extern char	kern_ident[];
 /* Dynamic oid handling */
 struct sysctl_oid *sysctl_add_oid(struct sysctl_ctx_list *clist,
 	    struct sysctl_oid_list *parent, int nbr, const char *name, int kind,
-	    void *arg1, intptr_t arg2, int (*handler)(SYSCTL_HANDLER_ARGS),
+	    void *arg1, intmax_t arg2, int (*handler)(SYSCTL_HANDLER_ARGS),
 	    const char *fmt, const char *descr);
 int	sysctl_remove_name(struct sysctl_oid *parent, const char *name, int del,
 	    int recurse);


More information about the svn-src-head mailing list