svn commit: r235786 - in stable/9: include lib/libc/stdlib lib/msun/src sys/sys

David Chisnall theraven at FreeBSD.org
Tue May 22 15:26:56 UTC 2012


Author: theraven
Date: Tue May 22 15:26:55 2012
New Revision: 235786
URL: http://svn.freebsd.org/changeset/base/235786

Log:
  Merge quick_exit and changes required for C++11 code to compile against FreeBSD headers.
  
  Merges changes from: r227472 r227475 r227475 r227476 r227476 r227490 r227490 r228322 r228323 r228329 r228330 r228528 r228529 r228529 r228901 r228918 r228918 r232971 r232971
  
  Also bump __FreeBSD_version for this and the xlocale merge.

Added:
  stable/9/lib/libc/stdlib/at_quick_exit.3
     - copied, changed from r228323, head/lib/libc/stdlib/at_quick_exit.3
  stable/9/lib/libc/stdlib/quick_exit.3
     - copied, changed from r228323, head/lib/libc/stdlib/quick_exit.3
  stable/9/lib/libc/stdlib/quick_exit.c
     - copied, changed from r228323, head/lib/libc/stdlib/quick_exit.c
Modified:
  stable/9/include/ctype.h
  stable/9/include/stdlib.h
  stable/9/include/wctype.h
  stable/9/lib/libc/stdlib/Makefile.inc
  stable/9/lib/libc/stdlib/Symbol.map
  stable/9/lib/libc/stdlib/atexit.3
  stable/9/lib/libc/stdlib/exit.3
  stable/9/lib/msun/src/math.h
  stable/9/sys/sys/_null.h
  stable/9/sys/sys/cdefs.h
  stable/9/sys/sys/param.h
  stable/9/sys/sys/stdint.h
Directory Properties:
  stable/9/include/   (props changed)
  stable/9/lib/libc/   (props changed)
  stable/9/lib/msun/   (props changed)
  stable/9/sys/   (props changed)

Modified: stable/9/include/ctype.h
==============================================================================
--- stable/9/include/ctype.h	Tue May 22 14:40:39 2012	(r235785)
+++ stable/9/include/ctype.h	Tue May 22 15:26:55 2012	(r235786)
@@ -84,6 +84,7 @@ int	isspecial(int);
 #endif
 __END_DECLS
 
+#ifndef __cplusplus
 #define	isalnum(c)	__sbistype((c), _CTYPE_A|_CTYPE_D)
 #define	isalpha(c)	__sbistype((c), _CTYPE_A)
 #define	iscntrl(c)	__sbistype((c), _CTYPE_C)
@@ -97,6 +98,7 @@ __END_DECLS
 #define	isxdigit(c)	__isctype((c), _CTYPE_X) /* ANSI -- locale independent */
 #define	tolower(c)	__sbtolower(c)
 #define	toupper(c)	__sbtoupper(c)
+#endif /* !__cplusplus */
 
 #if __XSI_VISIBLE
 /*
@@ -116,7 +118,7 @@ __END_DECLS
 #define	toascii(c)	((c) & 0x7F)
 #endif
 
-#if __ISO_C_VISIBLE >= 1999
+#if __ISO_C_VISIBLE >= 1999 && !defined(__cplusplus)
 #define	isblank(c)	__sbistype((c), _CTYPE_B)
 #endif
 

Modified: stable/9/include/stdlib.h
==============================================================================
--- stable/9/include/stdlib.h	Tue May 22 14:40:39 2012	(r235785)
+++ stable/9/include/stdlib.h	Tue May 22 15:26:55 2012	(r235786)
@@ -79,7 +79,7 @@ extern int __mb_cur_max;
 extern int ___mb_cur_max(void);
 #define	MB_CUR_MAX	(___mb_cur_max())
 
-void	 abort(void) __dead2;
+_Noreturn void	 abort(void);
 int	 abs(int) __pure2;
 int	 atexit(void (*)(void));
 double	 atof(const char *);
@@ -89,7 +89,7 @@ void	*bsearch(const void *, const void *
 	    size_t, int (*)(const void *, const void *));
 void	*calloc(size_t, size_t) __malloc_like;
 div_t	 div(int, int) __pure2;
-void	 exit(int) __dead2;
+_Noreturn void	 exit(int);
 void	 free(void *);
 char	*getenv(const char *);
 long	 labs(long) __pure2;
@@ -148,10 +148,18 @@ unsigned long long
 	 strtoull(const char * __restrict, char ** __restrict, int);
 #endif /* __LONG_LONG_SUPPORTED */
 
-void	 _Exit(int) __dead2;
+_Noreturn void	 _Exit(int);
 #endif /* __ISO_C_VISIBLE >= 1999 */
 
 /*
+ * If we're in a mode greater than C99, expose C1x functions.
+ */
+#if __ISO_C_VISIBLE >= 2011 || __cplusplus >= 201103L
+_Noreturn void
+	quick_exit(int);
+int	at_quick_exit(void (*)(void));
+#endif /* __ISO_C_VISIBLE >= 2011 */
+/*
  * Extensions made by POSIX relative to C.  We don't know yet which edition
  * of POSIX made these extensions, so assume they've always been there until
  * research can be done.

Modified: stable/9/include/wctype.h
==============================================================================
--- stable/9/include/wctype.h	Tue May 22 14:40:39 2012	(r235785)
+++ stable/9/include/wctype.h	Tue May 22 15:26:55 2012	(r235786)
@@ -94,6 +94,7 @@ wint_t	nextwctype(wint_t, wctype_t);
 #endif /* __POSIX_VISIBLE >= 200809 */
 __END_DECLS
 
+#ifndef __cplusplus
 #define	iswalnum(wc)		__istype((wc), _CTYPE_A|_CTYPE_D)
 #define	iswalpha(wc)		__istype((wc), _CTYPE_A)
 #define	iswblank(wc)		__istype((wc), _CTYPE_B)
@@ -118,6 +119,7 @@ __END_DECLS
 #define	iswphonogram(wc)	__istype((wc), _CTYPE_Q)
 #define	iswrune(wc)		__istype((wc), 0xFFFFFF00L)
 #define	iswspecial(wc)		__istype((wc), _CTYPE_T)
-#endif
+#endif /* __BSD_VISIBLE */
+#endif /* __cplusplus */
 
 #endif		/* _WCTYPE_H_ */

Modified: stable/9/lib/libc/stdlib/Makefile.inc
==============================================================================
--- stable/9/lib/libc/stdlib/Makefile.inc	Tue May 22 14:40:39 2012	(r235785)
+++ stable/9/lib/libc/stdlib/Makefile.inc	Tue May 22 15:26:55 2012	(r235786)
@@ -8,8 +8,8 @@ MISRCS+=_Exit.c a64l.c abort.c abs.c ate
 	bsearch.c div.c exit.c getenv.c getopt.c getopt_long.c \
 	getsubopt.c hcreate.c heapsort.c imaxabs.c imaxdiv.c \
 	insque.c l64a.c labs.c ldiv.c llabs.c lldiv.c lsearch.c malloc.c \
-	merge.c ptsname.c qsort.c qsort_r.c radixsort.c rand.c random.c \
-	reallocf.c realpath.c remque.c strfmon.c strtoimax.c \
+	merge.c ptsname.c qsort.c qsort_r.c quick_exit.c radixsort.c rand.c \
+	random.c reallocf.c realpath.c remque.c strfmon.c strtoimax.c \
 	strtol.c strtoll.c strtoq.c strtoul.c strtonum.c strtoull.c \
         strtoumax.c strtouq.c system.c tdelete.c tfind.c tsearch.c twalk.c
 
@@ -18,10 +18,12 @@ SYM_MAPS+= ${.CURDIR}/stdlib/Symbol.map
 # machine-dependent stdlib sources
 .sinclude "${.CURDIR}/${LIBC_ARCH}/stdlib/Makefile.inc"
 
-MAN+=	a64l.3 abort.3 abs.3 alloca.3 atexit.3 atof.3 atoi.3 atol.3 bsearch.3 \
+MAN+=	a64l.3 abort.3 abs.3 alloca.3 atexit.3 atof.3 atoi.3 atol.3 \
+	at_quick_exit.3 bsearch.3 \
 	div.3 exit.3 getenv.3 getopt.3 getopt_long.3 getsubopt.3 \
 	hcreate.3 imaxabs.3 imaxdiv.3 insque.3 labs.3 ldiv.3 llabs.3 lldiv.3 \
 	lsearch.3 malloc.3 memory.3 posix_memalign.3 ptsname.3 qsort.3 \
+	quick_exit.3 \
 	radixsort.3 rand.3 random.3 \
 	realpath.3 strfmon.3 strtod.3 strtol.3 strtonum.3 strtoul.3 system.3 \
 	tsearch.3

Modified: stable/9/lib/libc/stdlib/Symbol.map
==============================================================================
--- stable/9/lib/libc/stdlib/Symbol.map	Tue May 22 14:40:39 2012	(r235785)
+++ stable/9/lib/libc/stdlib/Symbol.map	Tue May 22 15:26:55 2012	(r235786)
@@ -97,6 +97,8 @@ FBSD_1.3 {
 	atoi_l;
 	atol_l;
 	atoll_l;
+	at_quick_exit;
+	quick_exit;
 	strtod_l;
 	strtol_l;
 	strtoll_l;

Copied and modified: stable/9/lib/libc/stdlib/at_quick_exit.3 (from r228323, head/lib/libc/stdlib/at_quick_exit.3)
==============================================================================
--- head/lib/libc/stdlib/at_quick_exit.3	Wed Dec  7 16:12:54 2011	(r228323, copy source)
+++ stable/9/lib/libc/stdlib/at_quick_exit.3	Tue May 22 15:26:55 2012	(r235786)
@@ -23,13 +23,13 @@
 .\"  SUCH DAMAGE.
 .\" 
 .\"  $FreeBSD$
-.\" /
-.Dd December 7, 2011o.Dt ATEXIT 3
+.\"
+.Dd December 7, 2011
 .Dt AT_QUICK_EXIT 3
 .Os
 .Sh NAME
 .Nm at_quick_exit
-.Nd Registers a cleanup function to run on quick exit.
+.Nd registers a cleanup function to run on quick exit
 .Sh LIBRARY
 .Lb libc
 .Sh SYNOPSIS
@@ -48,10 +48,13 @@ the program exits by calling 
 .Xr _Exit 3 ,
 or
 .Xr abort 3 .
-.El
+.Sh RETURN VALUES
+The 
+.Fn at_quick_exit
+function returns the value 0 if successful and a non-zero value on failure.
 .Sh SEE ALSO
 .Xr exit 3 ,
-.Xr at_quick_exit 3
+.Xr quick_exit 3
 .Sh STANDARDS
 The
 .Fn at_quick_exit

Modified: stable/9/lib/libc/stdlib/atexit.3
==============================================================================
--- stable/9/lib/libc/stdlib/atexit.3	Tue May 22 14:40:39 2012	(r235785)
+++ stable/9/lib/libc/stdlib/atexit.3	Tue May 22 15:26:55 2012	(r235786)
@@ -79,6 +79,7 @@ No memory was available to add the funct
 The existing list of functions is unmodified.
 .El
 .Sh SEE ALSO
+.Xr at_quick_exit 3
 .Xr exit 3
 .Sh STANDARDS
 The

Modified: stable/9/lib/libc/stdlib/exit.3
==============================================================================
--- stable/9/lib/libc/stdlib/exit.3	Tue May 22 14:40:39 2012	(r235785)
+++ stable/9/lib/libc/stdlib/exit.3	Tue May 22 15:26:55 2012	(r235786)
@@ -118,7 +118,9 @@ never return.
 .Xr _exit 2 ,
 .Xr wait 2 ,
 .Xr atexit 3 ,
+.Xr at_quick_exit 3 ,
 .Xr intro 3 ,
+.Xr quick_exit 3 ,
 .Xr sysexits 3 ,
 .Xr tmpfile 3
 .Sh STANDARDS

Copied and modified: stable/9/lib/libc/stdlib/quick_exit.3 (from r228323, head/lib/libc/stdlib/quick_exit.3)
==============================================================================
--- head/lib/libc/stdlib/quick_exit.3	Wed Dec  7 16:12:54 2011	(r228323, copy source)
+++ stable/9/lib/libc/stdlib/quick_exit.3	Tue May 22 15:26:55 2012	(r235786)
@@ -23,13 +23,13 @@
 .\"  SUCH DAMAGE.
 .\" 
 .\"  $FreeBSD$
-.\" /
-.Dd December 7, 2011o.Dt ATEXIT 3
+.\"
+.Dd December 7, 2011
 .Dt QUICK_EXIT 3
 .Os
 .Sh NAME
 .Nm quick_exit
-.Nd Exits a program quickly, running minimal cleanup
+.Nd exits a program quickly, running minimal cleanup
 .Sh LIBRARY
 .Lb libc
 .Sh SYNOPSIS
@@ -44,12 +44,14 @@ with
 .Xr at_quick_exit 3
 but not any C++ destructors or cleanup code registered with
 .Xr atexit 3 .
-.El
+.Sh RETURN VALUES
+The
+.Fn quick_exit
+function does not return.
 .Sh SEE ALSO
-.Xr exit 3 ,
-.Xr at_quick_exit 3
+.Xr at_quick_exit 3 ,
+.Xr exit 3
 .Sh STANDARDS
 The
 .Fn quick_exit
 function conforms to the C1x draft specification.
-

Copied and modified: stable/9/lib/libc/stdlib/quick_exit.c (from r228323, head/lib/libc/stdlib/quick_exit.c)
==============================================================================
--- head/lib/libc/stdlib/quick_exit.c	Wed Dec  7 16:12:54 2011	(r228323, copy source)
+++ stable/9/lib/libc/stdlib/quick_exit.c	Tue May 22 15:26:55 2012	(r235786)
@@ -51,10 +51,12 @@ static struct quick_exit_handler *handle
 int
 at_quick_exit(void (*func)(void))
 {
-	struct quick_exit_handler *h = malloc(sizeof(struct quick_exit_handler));
+	struct quick_exit_handler *h;
+	
+	h = malloc(sizeof(*h));
 
 	if (NULL == h)
-		return 1;
+		return (1);
 	h->cleanup = func;
 	pthread_mutex_lock(&atexit_mutex);
 	h->next = handlers;

Modified: stable/9/lib/msun/src/math.h
==============================================================================
--- stable/9/lib/msun/src/math.h	Tue May 22 14:40:39 2012	(r235785)
+++ stable/9/lib/msun/src/math.h	Tue May 22 15:26:55 2012	(r235786)
@@ -398,32 +398,32 @@ float	significandf(float);
  * long double versions of ISO/POSIX math functions
  */
 #if __ISO_C_VISIBLE >= 1999
-#if 0
+#if _DECLARE_C99_LDBL_MATH
 long double	acoshl(long double);
 #endif
 long double	acosl(long double);
-#if 0
+#if _DECLARE_C99_LDBL_MATH
 long double	asinhl(long double);
 #endif
 long double	asinl(long double);
 long double	atan2l(long double, long double);
-#if 0
+#if _DECLARE_C99_LDBL_MATH
 long double	atanhl(long double);
 #endif
 long double	atanl(long double);
 long double	cbrtl(long double);
 long double	ceill(long double);
 long double	copysignl(long double, long double) __pure2;
-#if 0
+#if _DECLARE_C99_LDBL_MATH
 long double	coshl(long double);
 #endif
 long double	cosl(long double);
-#if 0
+#if _DECLARE_C99_LDBL_MATH
 long double	erfcl(long double);
 long double	erfl(long double);
 #endif
 long double	exp2l(long double);
-#if 0
+#if _DECLARE_C99_LDBL_MATH
 long double	expl(long double);
 long double	expm1l(long double);
 #endif
@@ -438,18 +438,18 @@ long double	frexpl(long double value, in
 long double	hypotl(long double, long double);
 int		ilogbl(long double) __pure2;
 long double	ldexpl(long double, int);
-#if 0
+#if _DECLARE_C99_LDBL_MATH
 long double	lgammal(long double);
 #endif
 long long	llrintl(long double);
 long long	llroundl(long double);
-#if 0
+#if _DECLARE_C99_LDBL_MATH
 long double	log10l(long double);
 long double	log1pl(long double);
 long double	log2l(long double);
 #endif
 long double	logbl(long double);
-#if 0
+#if _DECLARE_C99_LDBL_MATH
 long double	logl(long double);
 #endif
 long		lrintl(long double);
@@ -461,7 +461,7 @@ long double	nextafterl(long double, long
 double		nexttoward(double, long double);
 float		nexttowardf(float, long double);
 long double	nexttowardl(long double, long double);
-#if 0
+#if _DECLARE_C99_LDBL_MATH
 long double	powl(long double, long double);
 #endif
 long double	remainderl(long double, long double);
@@ -470,16 +470,16 @@ long double	rintl(long double);
 long double	roundl(long double);
 long double	scalblnl(long double, long);
 long double	scalbnl(long double, int);
-#if 0
+#if _DECLARE_C99_LDBL_MATH
 long double	sinhl(long double);
 #endif
 long double	sinl(long double);
 long double	sqrtl(long double);
-#if 0
+#if _DECLARE_C99_LDBL_MATH
 long double	tanhl(long double);
 #endif
 long double	tanl(long double);
-#if 0
+#if _DECLARE_C99_LDBL_MATH
 long double	tgammal(long double);
 #endif
 long double	truncl(long double);

Modified: stable/9/sys/sys/_null.h
==============================================================================
--- stable/9/sys/sys/_null.h	Tue May 22 14:40:39 2012	(r235785)
+++ stable/9/sys/sys/_null.h	Tue May 22 15:26:55 2012	(r235786)
@@ -31,7 +31,9 @@
 #if !defined(__cplusplus)
 #define	NULL	((void *)0)
 #else
-#if defined(__GNUG__) && defined(__GNUC__) && __GNUC__ >= 4
+#if __cplusplus >= 201103L
+#define	NULL	nullptr
+#elif defined(__GNUG__) && defined(__GNUC__) && __GNUC__ >= 4
 #define	NULL	__null
 #else
 #if defined(__LP64__)

Modified: stable/9/sys/sys/cdefs.h
==============================================================================
--- stable/9/sys/sys/cdefs.h	Tue May 22 14:40:39 2012	(r235785)
+++ stable/9/sys/sys/cdefs.h	Tue May 22 15:26:55 2012	(r235786)
@@ -308,6 +308,17 @@
 #define	__LONG_LONG_SUPPORTED
 #endif
 
+/* C++11 exposes a load of C99 stuff */
+#if __cplusplus >= 201103L
+#	define	__LONG_LONG_SUPPORTED
+#	ifndef __STDC_LIMIT_MACROS
+#		define __STDC_LIMIT_MACROS
+#	endif
+#	ifndef __STDC_CONSTANT_MACROS
+#		define __STDC_CONSTANT_MACROS
+#	endif
+#endif
+
 /*
  * GCC 2.95 provides `__restrict' as an extension to C90 to support the
  * C99-specific `restrict' type qualifier.  We happen to use `__restrict' as

Modified: stable/9/sys/sys/param.h
==============================================================================
--- stable/9/sys/sys/param.h	Tue May 22 14:40:39 2012	(r235785)
+++ stable/9/sys/sys/param.h	Tue May 22 15:26:55 2012	(r235786)
@@ -58,7 +58,7 @@
  *		in the range 5 to 9.
  */
 #undef __FreeBSD_version
-#define __FreeBSD_version 900505	/* Master, propagated to newvers */
+#define __FreeBSD_version 900506	/* Master, propagated to newvers */
 
 /*
  * __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD,

Modified: stable/9/sys/sys/stdint.h
==============================================================================
--- stable/9/sys/sys/stdint.h	Tue May 22 14:40:39 2012	(r235785)
+++ stable/9/sys/sys/stdint.h	Tue May 22 15:26:55 2012	(r235786)
@@ -64,4 +64,11 @@ 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
+#else
+#define	__WORDSIZE		32
+#endif
+
 #endif /* !_SYS_STDINT_H_ */


More information about the svn-src-stable-9 mailing list