about summary refs log tree commit diff
path: root/manual/memory.texi
diff options
context:
space:
mode:
authorRical Jasan <ricaljasan@pacific.net>2017-06-15 21:12:39 -0700
committerRical Jasan <ricaljasan@pacific.net>2017-06-15 21:26:20 -0700
commitd08a7e4cbe43d5e4e4b14dea950fea623d96c1a1 (patch)
tree6f27987046ae0e8804f4d641c99ff1666652117a /manual/memory.texi
parent27691d5cec9b896ea0792151a27c6d7d7a4065ea (diff)
downloadglibc-d08a7e4cbe43d5e4e4b14dea950fea623d96c1a1.tar.gz
glibc-d08a7e4cbe43d5e4e4b14dea950fea623d96c1a1.tar.xz
glibc-d08a7e4cbe43d5e4e4b14dea950fea623d96c1a1.zip
manual: Replace summary.awk with summary.pl.
The Summary is now generated from @standards, and syntax-checking is
performed.  If invalid @standards syntax is detected, summary.pl will
fail, reporting all errors.  Failure and error reporting is disabled
for now, however, since much of the manual is still incomplete
wrt. header and standards annotations.

Note that the sorting order of the Summary has changed; summary.pl
respects the locale, like summary.awk did, but the use of LC_ALL=C is
introduced in the Makefile.  Other notable deviations are improved
detection of the annotated elements' names, which are used for
sorting, and improved detection of the @node used to reference into
the manual.  The most noticeable difference in the rendered Summary is
that entries may now contain multiple lines, one for each header and
standard combination.

summary.pl accepts a `--help' option, which details the expected
syntax of @standards.  If errors are reported, the user is directed to
this feature for further information.

	* manual/Makefile: Generate summary.texi with summary.pl.
	Force use of the C locale.  Update Perl dependency comment.
	* manual/header.texi: Update reference to summary.awk.
	* manual/macros.texi: Refer authors to `summary.pl --help'.
	* manual/summary.awk: Remove file.
	* manual/summary.pl: New file.  Generate summary.texi, and
	check for @standards-related syntax errors.
	* manual/argp.texi: Convert header and standards @comments to
	@standards.
	* manual/arith.texi: Likewise.
	* manual/charset.texi: Likewise.
	* manual/conf.texi: Likewise.
	* manual/creature.texi: Likewise.
	* manual/crypt.texi: Likewise.
	* manual/ctype.texi: Likewise.
	* manual/debug.texi: Likewise.
	* manual/errno.texi: Likewise.
	* manual/filesys.texi: Likewise.
	* manual/getopt.texi: Likewise.
	* manual/job.texi: Likewise.
	* manual/lang.texi: Likewise.
	* manual/llio.texi: Likewise.
	* manual/locale.texi: Likewise.
	* manual/math.texi: Likewise.
	* manual/memory.texi: Likewise.
	* manual/message.texi: Likewise.
	* manual/pattern.texi: Likewise.
	* manual/pipe.texi: Likewise.
	* manual/process.texi: Likewise.
	* manual/resource.texi: Likewise.
	* manual/search.texi: Likewise.
	* manual/setjmp.texi: Likewise.
	* manual/signal.texi: Likewise.
	* manual/socket.texi: Likewise.
	* manual/startup.texi: Likewise.
	* manual/stdio.texi: Likewise.
	* manual/string.texi: Likewise.
	* manual/sysinfo.texi: Likewise.
	* manual/syslog.texi: Likewise.
	* manual/terminal.texi: Likewise.
	* manual/threads.texi: Likewise.
	* manual/time.texi: Likewise.
	* manual/users.texi: Likewise.
Diffstat (limited to 'manual/memory.texi')
-rw-r--r--manual/memory.texi156
1 files changed, 57 insertions, 99 deletions
diff --git a/manual/memory.texi b/manual/memory.texi
index fb6b594ef1..82f473806c 100644
--- a/manual/memory.texi
+++ b/manual/memory.texi
@@ -342,9 +342,9 @@ To allocate a block of memory, call @code{malloc}.  The prototype for
 this function is in @file{stdlib.h}.
 @pindex stdlib.h
 
-@comment malloc.h stdlib.h
-@comment ISO
 @deftypefun {void *} malloc (size_t @var{size})
+@standards{ISO, malloc.h}
+@standards{ISO, stdlib.h}
 @safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}}
 @c Malloc hooks and __morecore pointers, as well as such parameters as
 @c max_n_mmaps and max_mmapped_mem, are accessed without guards, so they
@@ -683,9 +683,9 @@ function @code{free} to make the block available to be allocated again.
 The prototype for this function is in @file{stdlib.h}.
 @pindex stdlib.h
 
-@comment malloc.h stdlib.h
-@comment ISO
 @deftypefun void free (void *@var{ptr})
+@standards{ISO, malloc.h}
+@standards{ISO, stdlib.h}
 @safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}}
 @c __libc_free @asulock @aculock @acsfd @acsmem
 @c   releasing memory into fastbins modifies the arena without taking
@@ -755,9 +755,9 @@ You can make the block longer by calling @code{realloc} or
 @code{reallocarray}.  These functions are declared in @file{stdlib.h}.
 @pindex stdlib.h
 
-@comment malloc.h stdlib.h
-@comment ISO
 @deftypefun {void *} realloc (void *@var{ptr}, size_t @var{newsize})
+@standards{ISO, malloc.h}
+@standards{ISO, stdlib.h}
 @safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}}
 @c It may call the implementations of malloc and free, so all of their
 @c issues arise, plus the realloc hook, also accessed without guards.
@@ -816,9 +816,9 @@ behavior, and will probably crash when @code{realloc} is passed a null
 pointer.
 @end deftypefun
 
-@comment malloc.h stdlib.h
-@comment BSD
 @deftypefun {void *} reallocarray (void *@var{ptr}, size_t @var{nmemb}, size_t @var{size})
+@standards{BSD, malloc.h}
+@standards{BSD, stdlib.h}
 @safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}}
 
 The @code{reallocarray} function changes the size of the block whose address
@@ -877,9 +877,9 @@ The function @code{calloc} allocates memory and clears it to zero.  It
 is declared in @file{stdlib.h}.
 @pindex stdlib.h
 
-@comment malloc.h stdlib.h
-@comment ISO
 @deftypefun {void *} calloc (size_t @var{count}, size_t @var{eltsize})
+@standards{ISO, malloc.h}
+@standards{ISO, stdlib.h}
 @safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}}
 @c Same caveats as malloc.
 
@@ -935,8 +935,8 @@ power of two than that, use @code{aligned_alloc} or @code{posix_memalign}.
 @code{aligned_alloc} and @code{posix_memalign} are declared in
 @file{stdlib.h}.
 
-@comment stdlib.h
 @deftypefun {void *} aligned_alloc (size_t @var{alignment}, size_t @var{size})
+@standards{???, stdlib.h}
 @safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}}
 @c Alias to memalign.
 The @code{aligned_alloc} function allocates a block of @var{size} bytes whose
@@ -959,9 +959,8 @@ portability to modern non-POSIX systems than @code{posix_memalign}.
 
 @end deftypefun
 
-@comment malloc.h
-@comment BSD
 @deftypefun {void *} memalign (size_t @var{boundary}, size_t @var{size})
+@standards{BSD, malloc.h}
 @safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}}
 @c Same issues as malloc.  The padding bytes are safely freed in
 @c _int_memalign, with the arena still locked.
@@ -1007,9 +1006,8 @@ The @code{memalign} function is obsolete and @code{aligned_alloc} or
 @code{posix_memalign} should be used instead.
 @end deftypefun
 
-@comment stdlib.h
-@comment POSIX
 @deftypefun int posix_memalign (void **@var{memptr}, size_t @var{alignment}, size_t @var{size})
+@standards{POSIX, stdlib.h}
 @safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}}
 @c Calls memalign unless the requirements are not met (powerof2 macro is
 @c safe given an automatic variable as an argument) or there's a
@@ -1039,9 +1037,9 @@ superseded by @code{aligned_alloc}, it is more portable to older POSIX
 systems that do not support @w{ISO C11}.
 @end deftypefun
 
-@comment malloc.h stdlib.h
-@comment BSD
 @deftypefun {void *} valloc (size_t @var{size})
+@standards{BSD, malloc.h}
+@standards{BSD, stdlib.h}
 @safety{@prelim{}@mtunsafe{@mtuinit{}}@asunsafe{@asuinit{} @asulock{}}@acunsafe{@acuinit{} @aculock{} @acsfd{} @acsmem{}}}
 @c __libc_valloc @mtuinit @asuinit @asulock @aculock @acsfd @acsmem
 @c  ptmalloc_init (once) @mtsenv @asulock @aculock @acsfd @acsmem
@@ -1208,9 +1206,8 @@ using the @code{mcheck} function.  This function is a GNU extension,
 declared in @file{mcheck.h}.
 @pindex mcheck.h
 
-@comment mcheck.h
-@comment GNU
 @deftypefun int mcheck (void (*@var{abortfn}) (enum mcheck_status @var{status}))
+@standards{GNU, mcheck.h}
 @safety{@prelim{}@mtunsafe{@mtasurace{:mcheck} @mtasuconst{:malloc_hooks}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
 @c The hooks must be set up before malloc is first used, which sort of
 @c implies @mtuinit/@asuinit but since the function is a no-op if malloc
@@ -1351,9 +1348,8 @@ dynamic memory allocation, for example.
 The hook variables are declared in @file{malloc.h}.
 @pindex malloc.h
 
-@comment malloc.h
-@comment GNU
 @defvar __malloc_hook
+@standards{GNU, malloc.h}
 The value of this variable is a pointer to the function that
 @code{malloc} uses whenever it is called.  You should define this
 function to look like @code{malloc}; that is, like:
@@ -1367,9 +1363,8 @@ the @code{malloc} function was called.  This value allows you to trace
 the memory consumption of the program.
 @end defvar
 
-@comment malloc.h
-@comment GNU
 @defvar __realloc_hook
+@standards{GNU, malloc.h}
 The value of this variable is a pointer to function that @code{realloc}
 uses whenever it is called.  You should define this function to look
 like @code{realloc}; that is, like:
@@ -1383,9 +1378,8 @@ the @code{realloc} function was called.  This value allows you to trace the
 memory consumption of the program.
 @end defvar
 
-@comment malloc.h
-@comment GNU
 @defvar __free_hook
+@standards{GNU, malloc.h}
 The value of this variable is a pointer to function that @code{free}
 uses whenever it is called.  You should define this function to look
 like @code{free}; that is, like:
@@ -1399,9 +1393,8 @@ the @code{free} function was called.  This value allows you to trace the
 memory consumption of the program.
 @end defvar
 
-@comment malloc.h
-@comment GNU
 @defvar __memalign_hook
+@standards{GNU, malloc.h}
 The value of this variable is a pointer to function that @code{aligned_alloc},
 @code{memalign}, @code{posix_memalign} and @code{valloc} use whenever they
 are called.  You should define this function to look like @code{aligned_alloc};
@@ -1520,9 +1513,8 @@ are declared in @file{malloc.h}; they are an extension of the standard
 SVID/XPG version.
 @pindex malloc.h
 
-@comment malloc.h
-@comment GNU
 @deftp {Data Type} {struct mallinfo}
+@standards{GNU, malloc.h}
 This structure type is used to return information about the dynamic
 memory allocator.  It contains the following members:
 
@@ -1567,9 +1559,8 @@ space's data segment).
 @end table
 @end deftp
 
-@comment malloc.h
-@comment SVID
 @deftypefun {struct mallinfo} mallinfo (void)
+@standards{SVID, malloc.h}
 @safety{@prelim{}@mtunsafe{@mtuinit{} @mtasuconst{:mallopt}}@asunsafe{@asuinit{} @asulock{}}@acunsafe{@acuinit{} @aculock{}}}
 @c Accessing mp_.n_mmaps and mp_.max_mmapped_mem, modified with atomics
 @c but non-atomically elsewhere, may get us inconsistent results.  We
@@ -1688,9 +1679,8 @@ penalties for the program if the debugging mode is not enabled.
 @node Tracing malloc
 @subsubsection How to install the tracing functionality
 
-@comment mcheck.h
-@comment GNU
 @deftypefun void mtrace (void)
+@standards{GNU, mcheck.h}
 @safety{@prelim{}@mtunsafe{@mtsenv{} @mtasurace{:mtrace} @mtasuconst{:malloc_hooks} @mtuinit{}}@asunsafe{@asuinit{} @ascuheap{} @asucorrupt{} @asulock{}}@acunsafe{@acuinit{} @acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
 @c Like the mcheck hooks, these are not designed with thread safety in
 @c mind, because the hook pointers are temporarily modified without
@@ -1725,9 +1715,8 @@ This function is a GNU extension and generally not available on other
 systems.  The prototype can be found in @file{mcheck.h}.
 @end deftypefun
 
-@comment mcheck.h
-@comment GNU
 @deftypefun void muntrace (void)
+@standards{GNU, mcheck.h}
 @safety{@prelim{}@mtunsafe{@mtasurace{:mtrace} @mtasuconst{:malloc_hooks} @mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acucorrupt{} @acsmem{} @aculock{} @acsfd{}}}
 
 @c muntrace @mtasurace:mtrace @mtslocale @asucorrupt @ascuheap @acucorrupt @acsmem @aculock @acsfd
@@ -2030,9 +2019,8 @@ The utilities for manipulating obstacks are declared in the header
 file @file{obstack.h}.
 @pindex obstack.h
 
-@comment obstack.h
-@comment GNU
 @deftp {Data Type} {struct obstack}
+@standards{GNU, obstack.h}
 An obstack is represented by a data structure of type @code{struct
 obstack}.  This structure has a small fixed size; it records the status
 of the obstack and how to find the space in which objects are allocated.
@@ -2102,9 +2090,8 @@ At run time, before the program can use a @code{struct obstack} object
 as an obstack, it must initialize the obstack by calling
 @code{obstack_init}.
 
-@comment obstack.h
-@comment GNU
 @deftypefun int obstack_init (struct obstack *@var{obstack-ptr})
+@standards{GNU, obstack.h}
 @safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acsafe{@acsmem{}}}
 @c obstack_init @mtsrace:obstack-ptr @acsmem
 @c  _obstack_begin @acsmem
@@ -2146,9 +2133,8 @@ struct obstack *myobstack_ptr
 obstack_init (myobstack_ptr);
 @end smallexample
 
-@comment obstack.h
-@comment GNU
 @defvar obstack_alloc_failed_handler
+@standards{GNU, obstack.h}
 The value of this variable is a pointer to a function that
 @code{obstack} uses when @code{obstack_chunk_alloc} fails to allocate
 memory.  The default action is to print a message and abort.
@@ -2171,9 +2157,8 @@ obstack_alloc_failed_handler = &my_obstack_alloc_failed;
 The most direct way to allocate an object in an obstack is with
 @code{obstack_alloc}, which is invoked almost like @code{malloc}.
 
-@comment obstack.h
-@comment GNU
 @deftypefun {void *} obstack_alloc (struct obstack *@var{obstack-ptr}, int @var{size})
+@standards{GNU, obstack.h}
 @safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{} @acsmem{}}}
 @c obstack_alloc @mtsrace:obstack-ptr @acucorrupt @acsmem
 @c  obstack_blank dup @mtsrace:obstack-ptr @acucorrupt @acsmem
@@ -2209,9 +2194,8 @@ copystring (char *string)
 To allocate a block with specified contents, use the function
 @code{obstack_copy}, declared like this:
 
-@comment obstack.h
-@comment GNU
 @deftypefun {void *} obstack_copy (struct obstack *@var{obstack-ptr}, void *@var{address}, int @var{size})
+@standards{GNU, obstack.h}
 @safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{} @acsmem{}}}
 @c obstack_copy @mtsrace:obstack-ptr @acucorrupt @acsmem
 @c  obstack_grow dup @mtsrace:obstack-ptr @acucorrupt @acsmem
@@ -2222,9 +2206,8 @@ bytes of data starting at @var{address}.  It calls
 @code{obstack_chunk_alloc} failed.
 @end deftypefun
 
-@comment obstack.h
-@comment GNU
 @deftypefun {void *} obstack_copy0 (struct obstack *@var{obstack-ptr}, void *@var{address}, int @var{size})
+@standards{GNU, obstack.h}
 @safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{} @acsmem{}}}
 @c obstack_copy0 @mtsrace:obstack-ptr @acucorrupt @acsmem
 @c  obstack_grow0 dup @mtsrace:obstack-ptr @acucorrupt @acsmem
@@ -2258,9 +2241,8 @@ To free an object allocated in an obstack, use the function
 one object automatically frees all other objects allocated more recently
 in the same obstack.
 
-@comment obstack.h
-@comment GNU
 @deftypefun void obstack_free (struct obstack *@var{obstack-ptr}, void *@var{object})
+@standards{GNU, obstack.h}
 @safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{}}}
 @c obstack_free @mtsrace:obstack-ptr @acucorrupt
 @c  (obstack_free) @mtsrace:obstack-ptr @acucorrupt
@@ -2366,9 +2348,8 @@ While the obstack is in use for a growing object, you cannot use it for
 ordinary allocation of another object.  If you try to do so, the space
 already added to the growing object will become part of the other object.
 
-@comment obstack.h
-@comment GNU
 @deftypefun void obstack_blank (struct obstack *@var{obstack-ptr}, int @var{size})
+@standards{GNU, obstack.h}
 @safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{} @acsmem{}}}
 @c obstack_blank @mtsrace:obstack-ptr @acucorrupt @acsmem
 @c  _obstack_newchunk @mtsrace:obstack-ptr @acucorrupt @acsmem
@@ -2380,9 +2361,8 @@ The most basic function for adding to a growing object is
 @code{obstack_blank}, which adds space without initializing it.
 @end deftypefun
 
-@comment obstack.h
-@comment GNU
 @deftypefun void obstack_grow (struct obstack *@var{obstack-ptr}, void *@var{data}, int @var{size})
+@standards{GNU, obstack.h}
 @safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{} @acsmem{}}}
 @c obstack_grow @mtsrace:obstack-ptr @acucorrupt @acsmem
 @c  _obstack_newchunk dup @mtsrace:obstack-ptr @acucorrupt @acsmem
@@ -2393,9 +2373,8 @@ bytes of data to the growing object, copying the contents from
 @var{data}.
 @end deftypefun
 
-@comment obstack.h
-@comment GNU
 @deftypefun void obstack_grow0 (struct obstack *@var{obstack-ptr}, void *@var{data}, int @var{size})
+@standards{GNU, obstack.h}
 @safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{} @acsmem{}}}
 @c obstack_grow0 @mtsrace:obstack-ptr @acucorrupt @acsmem
 @c   (no sequence point between storing NUL and incrementing next_free)
@@ -2407,9 +2386,8 @@ This is the growing-object analogue of @code{obstack_copy0}.  It adds
 character.
 @end deftypefun
 
-@comment obstack.h
-@comment GNU
 @deftypefun void obstack_1grow (struct obstack *@var{obstack-ptr}, char @var{c})
+@standards{GNU, obstack.h}
 @safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{} @acsmem{}}}
 @c obstack_1grow @mtsrace:obstack-ptr @acucorrupt @acsmem
 @c  _obstack_newchunk dup @mtsrace:obstack-ptr @acucorrupt @acsmem
@@ -2418,9 +2396,8 @@ To add one character at a time, use the function @code{obstack_1grow}.
 It adds a single byte containing @var{c} to the growing object.
 @end deftypefun
 
-@comment obstack.h
-@comment GNU
 @deftypefun void obstack_ptr_grow (struct obstack *@var{obstack-ptr}, void *@var{data})
+@standards{GNU, obstack.h}
 @safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{} @acsmem{}}}
 @c obstack_ptr_grow @mtsrace:obstack-ptr @acucorrupt @acsmem
 @c  _obstack_newchunk dup @mtsrace:obstack-ptr @acucorrupt @acsmem
@@ -2430,9 +2407,8 @@ Adding the value of a pointer one can use the function
 containing the value of @var{data}.
 @end deftypefun
 
-@comment obstack.h
-@comment GNU
 @deftypefun void obstack_int_grow (struct obstack *@var{obstack-ptr}, int @var{data})
+@standards{GNU, obstack.h}
 @safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{} @acsmem{}}}
 @c obstack_int_grow @mtsrace:obstack-ptr @acucorrupt @acsmem
 @c  _obstack_newchunk dup @mtsrace:obstack-ptr @acucorrupt @acsmem
@@ -2442,9 +2418,8 @@ A single value of type @code{int} can be added by using the
 the growing object and initializes them with the value of @var{data}.
 @end deftypefun
 
-@comment obstack.h
-@comment GNU
 @deftypefun {void *} obstack_finish (struct obstack *@var{obstack-ptr})
+@standards{GNU, obstack.h}
 @safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{}}}
 @c obstack_finish @mtsrace:obstack-ptr @acucorrupt
 When you are finished growing the object, use the function
@@ -2463,9 +2438,8 @@ the object, because you can find out the length from the obstack just
 before finishing the object with the function @code{obstack_object_size},
 declared as follows:
 
-@comment obstack.h
-@comment GNU
 @deftypefun int obstack_object_size (struct obstack *@var{obstack-ptr})
+@standards{GNU, obstack.h}
 @safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acsafe{}}
 This function returns the current size of the growing object, in bytes.
 Remember to call this function @emph{before} finishing the object.
@@ -2507,9 +2481,8 @@ more efficiently, then you make the program faster.
 The function @code{obstack_room} returns the amount of room available
 in the current chunk.  It is declared as follows:
 
-@comment obstack.h
-@comment GNU
 @deftypefun int obstack_room (struct obstack *@var{obstack-ptr})
+@standards{GNU, obstack.h}
 @safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acsafe{}}
 This returns the number of bytes that can be added safely to the current
 growing object (or to an object about to be started) in obstack
@@ -2519,9 +2492,8 @@ growing object (or to an object about to be started) in obstack
 While you know there is room, you can use these fast growth functions
 for adding data to a growing object:
 
-@comment obstack.h
-@comment GNU
 @deftypefun void obstack_1grow_fast (struct obstack *@var{obstack-ptr}, char @var{c})
+@standards{GNU, obstack.h}
 @safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{} @acsmem{}}}
 @c obstack_1grow_fast @mtsrace:obstack-ptr @acucorrupt @acsmem
 @c   (no sequence point between copying c and incrementing next_free)
@@ -2529,9 +2501,8 @@ The function @code{obstack_1grow_fast} adds one byte containing the
 character @var{c} to the growing object in obstack @var{obstack-ptr}.
 @end deftypefun
 
-@comment obstack.h
-@comment GNU
 @deftypefun void obstack_ptr_grow_fast (struct obstack *@var{obstack-ptr}, void *@var{data})
+@standards{GNU, obstack.h}
 @safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acsafe{}}
 @c obstack_ptr_grow_fast @mtsrace:obstack-ptr
 The function @code{obstack_ptr_grow_fast} adds @code{sizeof (void *)}
@@ -2539,9 +2510,8 @@ bytes containing the value of @var{data} to the growing object in
 obstack @var{obstack-ptr}.
 @end deftypefun
 
-@comment obstack.h
-@comment GNU
 @deftypefun void obstack_int_grow_fast (struct obstack *@var{obstack-ptr}, int @var{data})
+@standards{GNU, obstack.h}
 @safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acsafe{}}
 @c obstack_int_grow_fast @mtsrace:obstack-ptr
 The function @code{obstack_int_grow_fast} adds @code{sizeof (int)} bytes
@@ -2549,9 +2519,8 @@ containing the value of @var{data} to the growing object in obstack
 @var{obstack-ptr}.
 @end deftypefun
 
-@comment obstack.h
-@comment GNU
 @deftypefun void obstack_blank_fast (struct obstack *@var{obstack-ptr}, int @var{size})
+@standards{GNU, obstack.h}
 @safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acsafe{}}
 @c obstack_blank_fast @mtsrace:obstack-ptr
 The function @code{obstack_blank_fast} adds @var{size} bytes to the
@@ -2609,9 +2578,8 @@ Here are functions that provide information on the current status of
 allocation in an obstack.  You can use them to learn about an object while
 still growing it.
 
-@comment obstack.h
-@comment GNU
 @deftypefun {void *} obstack_base (struct obstack *@var{obstack-ptr})
+@standards{GNU, obstack.h}
 @safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acsafe{}}
 This function returns the tentative address of the beginning of the
 currently growing object in @var{obstack-ptr}.  If you finish the object
@@ -2623,9 +2591,8 @@ allocate will start (once again assuming it fits in the current
 chunk).
 @end deftypefun
 
-@comment obstack.h
-@comment GNU
 @deftypefun {void *} obstack_next_free (struct obstack *@var{obstack-ptr})
+@standards{GNU, obstack.h}
 @safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acsafe{}}
 This function returns the address of the first free byte in the current
 chunk of obstack @var{obstack-ptr}.  This is the end of the currently
@@ -2633,9 +2600,8 @@ growing object.  If no object is growing, @code{obstack_next_free}
 returns the same value as @code{obstack_base}.
 @end deftypefun
 
-@comment obstack.h
-@comment GNU
 @deftypefun int obstack_object_size (struct obstack *@var{obstack-ptr})
+@standards{GNU, obstack.h}
 @c dup
 @safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acsafe{}}
 This function returns the size in bytes of the currently growing object.
@@ -2659,9 +2625,8 @@ To access an obstack's alignment boundary, use the macro
 @code{obstack_alignment_mask}, whose function prototype looks like
 this:
 
-@comment obstack.h
-@comment GNU
 @deftypefn Macro int obstack_alignment_mask (struct obstack *@var{obstack-ptr})
+@standards{GNU, obstack.h}
 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
 The value is a bit mask; a bit that is 1 indicates that the corresponding
 bit in the address of an object should be 0.  The mask value should be one
@@ -2727,9 +2692,8 @@ power of 2.  The default chunk size, 4096, was chosen because it is long
 enough to satisfy many typical requests on the obstack yet short enough
 not to waste too much memory in the portion of the last chunk not yet used.
 
-@comment obstack.h
-@comment GNU
 @deftypefn Macro int obstack_chunk_size (struct obstack *@var{obstack-ptr})
+@standards{GNU, obstack.h}
 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
 This returns the chunk size of the given obstack.
 @end deftypefn
@@ -2847,9 +2811,9 @@ The prototype for @code{alloca} is in @file{stdlib.h}.  This function is
 a BSD extension.
 @pindex stdlib.h
 
-@comment stdlib.h
-@comment GNU, BSD
 @deftypefun {void *} alloca (size_t @var{size})
+@standards{GNU, stdlib.h}
+@standards{BSD, stdlib.h}
 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
 The return value of @code{alloca} is the address of a block of @var{size}
 bytes of memory, allocated in the stack frame of the calling function.
@@ -3030,9 +2994,8 @@ are interfaces to a @glibcadj{} memory allocator that uses the
 functions below itself.  The functions below are simple interfaces to
 system calls.
 
-@comment unistd.h
-@comment BSD
 @deftypefun int brk (void *@var{addr})
+@standards{BSD, unistd.h}
 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
 
 @code{brk} sets the high end of the calling process' data segment to
@@ -3073,9 +3036,8 @@ exceed the process' data storage limit.
 @end deftypefun
 
 
-@comment unistd.h
-@comment BSD
 @deftypefun void *sbrk (ptrdiff_t @var{delta})
+@standards{BSD, unistd.h}
 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
 
 This function is the same as @code{brk} except that you specify the new
@@ -3214,9 +3176,8 @@ memory page in bytes.  It requires that when the @code{mlockall} and
 define the macro @code{_POSIX_MEMLOCK}.  @Theglibc{} conforms to
 this requirement.
 
-@comment sys/mman.h
-@comment POSIX.1b
 @deftypefun int mlock (const void *@var{addr}, size_t @var{len})
+@standards{POSIX.1b, sys/mman.h}
 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
 
 @code{mlock} locks a range of the calling process' virtual pages.
@@ -3268,9 +3229,8 @@ wouldn't know what address to tell @code{mlock}.
 
 @end deftypefun
 
-@comment sys/mman.h
-@comment POSIX.1b
 @deftypefun int munlock (const void *@var{addr}, size_t @var{len})
+@standards{POSIX.1b, sys/mman.h}
 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
 
 @code{munlock} unlocks a range of the calling process' virtual pages.
@@ -3281,9 +3241,8 @@ failure.
 
 @end deftypefun
 
-@comment sys/mman.h
-@comment POSIX.1b
 @deftypefun int mlockall (int @var{flags})
+@standards{POSIX.1b, sys/mman.h}
 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
 
 @code{mlockall} locks all the pages in a process' virtual memory address
@@ -3358,9 +3317,8 @@ with @code{munlockall} and @code{munlock}.
 @end deftypefun
 
 
-@comment sys/mman.h
-@comment POSIX.1b
 @deftypefun int munlockall (void)
+@standards{POSIX.1b, sys/mman.h}
 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
 
 @code{munlockall} unlocks every page in the calling process' virtual