Module Name: src Committed By: jruoho Date: Thu Dec 16 17:47:54 UTC 2010
Modified Files: src/distrib/sets/lists/comp: mi src/share/man/man3: Makefile attribute.3 Log Message: Document __dead, __pure, __constfunc, __noinline, __unused, and __used. To generate a diff of this commit: cvs rdiff -u -r1.1547 -r1.1548 src/distrib/sets/lists/comp/mi cvs rdiff -u -r1.60 -r1.61 src/share/man/man3/Makefile cvs rdiff -u -r1.4 -r1.5 src/share/man/man3/attribute.3 Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/distrib/sets/lists/comp/mi diff -u src/distrib/sets/lists/comp/mi:1.1547 src/distrib/sets/lists/comp/mi:1.1548 --- src/distrib/sets/lists/comp/mi:1.1547 Thu Dec 16 10:19:13 2010 +++ src/distrib/sets/lists/comp/mi Thu Dec 16 17:47:53 2010 @@ -1,4 +1,4 @@ -# $NetBSD: mi,v 1.1547 2010/12/16 10:19:13 jruoho Exp $ +# $NetBSD: mi,v 1.1548 2010/12/16 17:47:53 jruoho Exp $ # # Note: don't delete entries from here - mark them as "obsolete" instead. # @@ -4908,9 +4908,15 @@ ./usr/share/man/cat3/__aligned.0 comp-c-catman .cat ./usr/share/man/cat3/__arraycount.0 comp-c-catman .cat ./usr/share/man/cat3/__builtin_object_size.0 comp-c-catman .cat +./usr/share/man/cat3/__constfunc.0 comp-c-catman .cat +./usr/share/man/cat3/__dead.0 comp-c-catman .cat +./usr/share/man/cat3/__noinline.0 comp-c-catman .cat ./usr/share/man/cat3/__packed.0 comp-c-catman .cat +./usr/share/man/cat3/__pure.0 comp-c-catman .cat ./usr/share/man/cat3/__section.0 comp-c-catman .cat ./usr/share/man/cat3/__svc_getcallercreds.0 comp-c-catman .cat +./usr/share/man/cat3/__unused.0 comp-c-catman .cat +./usr/share/man/cat3/__used.0 comp-c-catman .cat ./usr/share/man/cat3/_longjmp.0 comp-c-catman .cat ./usr/share/man/cat3/_lwp_makecontext.0 comp-c-catman .cat ./usr/share/man/cat3/_setjmp.0 comp-c-catman .cat @@ -10975,9 +10981,15 @@ ./usr/share/man/html3/__aligned.html comp-c-htmlman html ./usr/share/man/html3/__arraycount.html comp-c-htmlman html ./usr/share/man/html3/__builtin_object_size.html comp-c-htmlman html +./usr/share/man/html3/__constfunc.html comp-c-htmlman html +./usr/share/man/html3/__dead.html comp-c-htmlman html +./usr/share/man/html3/__noinline.html comp-c-htmlman html ./usr/share/man/html3/__packed.html comp-c-htmlman html +./usr/share/man/html3/__pure.html comp-c-htmlman html ./usr/share/man/html3/__section.html comp-c-htmlman html ./usr/share/man/html3/__svc_getcallercreds.html comp-c-htmlman html +./usr/share/man/html3/__unused.html comp-c-htmlman html +./usr/share/man/html3/__used.html comp-c-htmlman html ./usr/share/man/html3/_longjmp.html comp-c-htmlman html ./usr/share/man/html3/_lwp_makecontext.html comp-c-htmlman html ./usr/share/man/html3/_setjmp.html comp-c-htmlman html @@ -16842,9 +16854,15 @@ ./usr/share/man/man3/__aligned.3 comp-c-man .man ./usr/share/man/man3/__arraycount.3 comp-c-man .man ./usr/share/man/man3/__builtin_object_size.3 comp-c-man .man +./usr/share/man/man3/__constfunc.3 comp-c-man .man +./usr/share/man/man3/__dead.3 comp-c-man .man +./usr/share/man/man3/__noinline.3 comp-c-man .man ./usr/share/man/man3/__packed.3 comp-c-man .man +./usr/share/man/man3/__pure.3 comp-c-man .man ./usr/share/man/man3/__section.3 comp-c-man .man ./usr/share/man/man3/__svc_getcallercreds.3 comp-c-man .man +./usr/share/man/man3/__unused.3 comp-c-man .man +./usr/share/man/man3/__used.3 comp-c-man .man ./usr/share/man/man3/_longjmp.3 comp-c-man .man ./usr/share/man/man3/_lwp_makecontext.3 comp-c-man .man ./usr/share/man/man3/_setjmp.3 comp-c-man .man Index: src/share/man/man3/Makefile diff -u src/share/man/man3/Makefile:1.60 src/share/man/man3/Makefile:1.61 --- src/share/man/man3/Makefile:1.60 Thu Dec 16 10:19:14 2010 +++ src/share/man/man3/Makefile Thu Dec 16 17:47:54 2010 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.60 2010/12/16 10:19:14 jruoho Exp $ +# $NetBSD: Makefile,v 1.61 2010/12/16 17:47:54 jruoho Exp $ # @(#)Makefile 8.2 (Berkeley) 12/13/93 MAN= _DIAGASSERT.3 __CONCAT.3 __UNCONST.3 CMSG_DATA.3 \ @@ -14,7 +14,13 @@ MLINKS+=__CONCAT.3 __STRING.3 MLINKS+=__UNCONST.3 __UNVOLATILE.3 -MLINKS+=attribute.3 __packed.3 \ +MLINKS+=attribute.3 __dead.3 \ + attribute.3 __pure.3 \ + attribute.3 __constfunc.3 \ + attribute.3 __noinline.3 \ + attribute.3 __unused.3 \ + attribute.3 __used.3 \ + attribute.3 __packed.3 \ attribute.3 __aligned.3 \ attribute.3 __section.3 MLINKS+=bitstring.3 bit_alloc.3 \ Index: src/share/man/man3/attribute.3 diff -u src/share/man/man3/attribute.3:1.4 src/share/man/man3/attribute.3:1.5 --- src/share/man/man3/attribute.3:1.4 Thu Dec 16 15:55:41 2010 +++ src/share/man/man3/attribute.3 Thu Dec 16 17:47:54 2010 @@ -1,4 +1,4 @@ -.\" $NetBSD: attribute.3,v 1.4 2010/12/16 15:55:41 jruoho Exp $ +.\" $NetBSD: attribute.3,v 1.5 2010/12/16 17:47:54 jruoho Exp $ .\" .\" Copyright (c) 2010 The NetBSD Foundation, Inc. .\" All rights reserved. @@ -32,10 +32,22 @@ .Os .Sh NAME .Nm attribute -.Nd non-standard GCC extensions +.Nd non-standard GCC attribute extensions .Sh SYNOPSIS .In sys/cdefs.h .Pp +.Ic __dead +.Pp +.Ic __pure +.Pp +.Ic __constfunc +.Pp +.Ic __noinline +.Pp +.Ic __unused +.Pp +.Ic __used +.Pp .Ic __packed .Pp .Fn __aligned "x" @@ -54,8 +66,91 @@ .Tn GCC's .Em __attribute__ extension directly. -.Sh FUNCTIONS +.Sh ATTRIBUTES .Bl -tag -width abc +.It Ic __dead +The +.Xr gcc 1 +compiler knows that certain functions such as +.Xr abort 3 +and +.Xr exit 3 +can never return any value. +When such a function is equipped with +.Ic __dead , +certain optimizations are possible. +Obviously a +.Ic __dead +function can never have return type other than +.Vt void . +.It Ic __pure +A +.Ic __pure +function is defined to be one that has no effects except +the return value, which is assumed to depend only on the +function parameters and/or global variables. +Any access to parameters and/or global variables must also be read-only. +A function that depends on volatile memory, or other comparable +system resource that can change between two consecutive calls, +can never be +.Ic __pure . +Many +.Xr math 3 +functions satisfy the definition of a +.Ic __pure +function, at least in theory. +Other examples include +.Xr strlen 3 +and +.Xr strcmp 3 . +.It Ic __constfunc +A +.Dq const function +is a stricter variant of +.Dq pure functions . +In addition to the restrictions of pure functions, a function declared with +.Ic __constfunc +can never access global variables nor take pointers as parameters. +The return value of these functions must depend +only on the passed-by-value parameters. +Note also that a function that calls non-const functions can not be +.Ic __constfunc . +The canonical example of a const function would be +.Xr abs 3 . +As with pure functions, +certain micro-optimizations are possible for functions declared with +.Ic __constfunc . +.It Ic __noinline +.Tn GCC +is known for aggressive function inlining. +Sometimes it is known that inlining is undesirable or that +a function will perform incorrectly when inlined. +The +.Ic __noinline +macro expands to a function attribute that prevents +.Tn GCC +for inlining the function, irrespective +whether the function was declared with the +.Em inline +keyword. +The attribute takes precedence over all +other compiler options related to inlining. +.It Ic __unused +In most +.Tn GCC +versions the common +.Fl Wall +flag enables warnings produced by functions that are defined but unused. +Marking an unused function with the +.Ic __unused +macro inhibits these warnings. +.It Ic __used +The +.Ic __used +macro expands to an attribute that informs +.Tn GCC +that a static variable or function is to be always retained +in the object file even if it is unreferenced. .It Ic __packed The .Ic __packed