1996-12-08 08:01:13 +00:00
|
|
|
/* obstack.c - subroutines used implicitly by object stack macros
|
2019-01-01 00:11:28 +00:00
|
|
|
Copyright (C) 1988-2019 Free Software Foundation, Inc.
|
[BZ #321]
2005-10-14 Paul Eggert <eggert@cs.ucla.edu>
* malloc/obstack.c: Fix old comments. Update FSF snail mail address.
* malloc/obstack.h: Likewise.
[BZ #321]
Fix portability bugs encountered when porting to Itanium.
* malloc/obstack.h (obstack_empty_p, obstack_finish): Do not
assume that the "contents" member is suitably aligned. It is
not, for some hosts and alignments: e.g., Itanium, long-double.
* malloc/obstack.c (_obstack_begin, _obstack_begin_1,
_obstack_newchunk): Likewise.
* malloc/obstack.c: Include <stddef.h>, for size_t.
Include <inttypes.h>, <stdint.h> if needed and available.
(DEFAULT_ALIGNMENT): Now an enum constant, not a macro.
Use C89 offsetof rather than K&R trick.
Use the maximum alignment of uintmax_t, long double, void *
rather than the alignment of double.
(union fooround): Use uintmax_t, long double, void * members
rather than just long and double.
[BZ #321]
Fix portability bugs encountered when porting to the IBM iSeries,
where pointers are 256 bits wide and no integers are that wide.
* malloc/obstack.h (__PTR_TO_INT, __INT_TO_PTR): Remove.
All uses changed to:
(__BPTR_ALIGN, __PTR_ALIGN): New macros.
(struct _obstack_chunk.temp): Change from int to a union
of pointer and int. All uses changed.
[BZ #321]
* malloc/obstack.c (print_and_abort) [!_LIBC]:
Call fprintf (stderr, ...), not __fxprintf (NULL, ...).
[_LIBC && USE_IN_LIBIO]: Don't include <wchar.h>; no longer needed.
2006-01-11 05:43:11 +00:00
|
|
|
This file is part of the GNU C Library.
|
1996-12-08 08:01:13 +00:00
|
|
|
|
|
|
|
The GNU C Library is free software; you can redistribute it and/or
|
2001-07-06 04:58:11 +00:00
|
|
|
modify it under the terms of the GNU Lesser General Public
|
|
|
|
License as published by the Free Software Foundation; either
|
|
|
|
version 2.1 of the License, or (at your option) any later version.
|
1996-12-08 08:01:13 +00:00
|
|
|
|
|
|
|
The GNU C Library is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
2001-07-06 04:58:11 +00:00
|
|
|
Lesser General Public License for more details.
|
1996-12-08 08:01:13 +00:00
|
|
|
|
2001-07-06 04:58:11 +00:00
|
|
|
You should have received a copy of the GNU Lesser General Public
|
2012-02-09 23:18:22 +00:00
|
|
|
License along with the GNU C Library; if not, see
|
Prefer https to http for gnu.org and fsf.org URLs
Also, change sources.redhat.com to sourceware.org.
This patch was automatically generated by running the following shell
script, which uses GNU sed, and which avoids modifying files imported
from upstream:
sed -ri '
s,(http|ftp)(://(.*\.)?(gnu|fsf|sourceware)\.org($|[^.]|\.[^a-z])),https\2,g
s,(http|ftp)(://(.*\.)?)sources\.redhat\.com($|[^.]|\.[^a-z]),https\2sourceware.org\4,g
' \
$(find $(git ls-files) -prune -type f \
! -name '*.po' \
! -name 'ChangeLog*' \
! -path COPYING ! -path COPYING.LIB \
! -path manual/fdl-1.3.texi ! -path manual/lgpl-2.1.texi \
! -path manual/texinfo.tex ! -path scripts/config.guess \
! -path scripts/config.sub ! -path scripts/install-sh \
! -path scripts/mkinstalldirs ! -path scripts/move-if-change \
! -path INSTALL ! -path locale/programs/charmap-kw.h \
! -path po/libc.pot ! -path sysdeps/gnu/errlist.c \
! '(' -name configure \
-execdir test -f configure.ac -o -f configure.in ';' ')' \
! '(' -name preconfigure \
-execdir test -f preconfigure.ac ';' ')' \
-print)
and then by running 'make dist-prepare' to regenerate files built
from the altered files, and then executing the following to cleanup:
chmod a+x sysdeps/unix/sysv/linux/riscv/configure
# Omit irrelevant whitespace and comment-only changes,
# perhaps from a slightly-different Autoconf version.
git checkout -f \
sysdeps/csky/configure \
sysdeps/hppa/configure \
sysdeps/riscv/configure \
sysdeps/unix/sysv/linux/csky/configure
# Omit changes that caused a pre-commit check to fail like this:
# remote: *** error: sysdeps/powerpc/powerpc64/ppc-mcount.S: trailing lines
git checkout -f \
sysdeps/powerpc/powerpc64/ppc-mcount.S \
sysdeps/unix/sysv/linux/s390/s390-64/syscall.S
# Omit change that caused a pre-commit check to fail like this:
# remote: *** error: sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S: last line does not end in newline
git checkout -f sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S
2019-09-07 05:40:42 +00:00
|
|
|
<https://www.gnu.org/licenses/>. */
|
[BZ #321]
2005-10-14 Paul Eggert <eggert@cs.ucla.edu>
* malloc/obstack.c: Fix old comments. Update FSF snail mail address.
* malloc/obstack.h: Likewise.
[BZ #321]
Fix portability bugs encountered when porting to Itanium.
* malloc/obstack.h (obstack_empty_p, obstack_finish): Do not
assume that the "contents" member is suitably aligned. It is
not, for some hosts and alignments: e.g., Itanium, long-double.
* malloc/obstack.c (_obstack_begin, _obstack_begin_1,
_obstack_newchunk): Likewise.
* malloc/obstack.c: Include <stddef.h>, for size_t.
Include <inttypes.h>, <stdint.h> if needed and available.
(DEFAULT_ALIGNMENT): Now an enum constant, not a macro.
Use C89 offsetof rather than K&R trick.
Use the maximum alignment of uintmax_t, long double, void *
rather than the alignment of double.
(union fooround): Use uintmax_t, long double, void * members
rather than just long and double.
[BZ #321]
Fix portability bugs encountered when porting to the IBM iSeries,
where pointers are 256 bits wide and no integers are that wide.
* malloc/obstack.h (__PTR_TO_INT, __INT_TO_PTR): Remove.
All uses changed to:
(__BPTR_ALIGN, __PTR_ALIGN): New macros.
(struct _obstack_chunk.temp): Change from int to a union
of pointer and int. All uses changed.
[BZ #321]
* malloc/obstack.c (print_and_abort) [!_LIBC]:
Call fprintf (stderr, ...), not __fxprintf (NULL, ...).
[_LIBC && USE_IN_LIBIO]: Don't include <wchar.h>; no longer needed.
2006-01-11 05:43:11 +00:00
|
|
|
|
1996-12-08 08:01:13 +00:00
|
|
|
|
Update.
2002-08-04 Ulrich Drepper <drepper@redhat.com>
* elf/dl-addr.c (_dl_addr): Add libc_hidden_def.
* elf/dl-close.c (_dl_close): Add libc_hidden_def.
* elf/dl-open.c (_dl_open): Add libc_hidden_def.
* include/dlfcn.h: Add libc_hidden_proto for _dl_addr, _dl_open,
_dl_close.
* include/libio.h: Add libc_hidden_proto for __underflow, __wuflow,
__wunderflow.
* libio/genops.c (__underflow): Add libc_hidden_def.
* libio/wgenops.c (__wuflow): Likewise.
(__wunderflow): Likewise.
* include/obstack.h: Add libc_hidden_proto for _obstack_newchunk.
* malloc/obstack.c (_obstack_newchunk): Add libc_hidden_def.
* include/stdio.h: Add libc_hidden_proto for __vfscanf.
* stdio-common/vfscanf.c (__vfscanf): Add libc_hidden_def.
* include/string.h: Add libc_hidden_proto for __strverscmp.
* string/strverscmp.c (__strverscmp): Add libc_hidden_def.
* include/unistd.h: Add libc_hidden_proto for __sysconf.
* sysdeps/generic/sysconf.c (__sysconf): Add libc_hidden_def.
* sysdeps/posix/sysconf.c: Likewise.
* sysdeps/unix/sysv/irix4/sysconf.c: Likewise.
* sysdeps/unix/sysv/sysv4/sysconf.c: Likewise.
* include/wctype.h: Use libc_hidden_proto for __iswctype, __iswalnum_l,
__iswalpha_l, __iswblank_l, __iswcntrl_l, __iswdigit_l, __iswlower_l,
__iswgraph_l, __iswprint_l, __iswpunct_l, __iswspace_l, __iswupper_l,
__iswxdigit_l, __towlower_l, __towupper_l.
* wcsmbs/wcstype.c (__iswctype): Use libc_hidden_def.
* wcsmbs/wcfuncs_l.c: Use libc_hidden_def for all functions.
* include/sys/wait.h: Add libc_hidden_proto for __xmknod.
* sysdeps/generic/xmknod.c (__xmknod): Add libc_hidden_def.
* sysdeps/mach/hurd/xmknod.c: Likewise.
* sysdeps/unix/xmknod.c: Likewise.
* sysdeps/unix/sysv/linux/xmknod.c: Likewise.
* sysdeps/unix/sysv/linux/alpha/xmknod.c: Likewise.
* sysdeps/unix/sysv/linux/mips/xmknod.c: Likewise.
* sunrpc/svc.c: Add missing INTUSE for _authenticate.
2002-08-04 09:27:27 +00:00
|
|
|
#ifdef _LIBC
|
2004-01-28 03:54:31 +00:00
|
|
|
# include <obstack.h>
|
2004-05-24 05:20:48 +00:00
|
|
|
# include <shlib-compat.h>
|
Update.
2002-08-04 Ulrich Drepper <drepper@redhat.com>
* elf/dl-addr.c (_dl_addr): Add libc_hidden_def.
* elf/dl-close.c (_dl_close): Add libc_hidden_def.
* elf/dl-open.c (_dl_open): Add libc_hidden_def.
* include/dlfcn.h: Add libc_hidden_proto for _dl_addr, _dl_open,
_dl_close.
* include/libio.h: Add libc_hidden_proto for __underflow, __wuflow,
__wunderflow.
* libio/genops.c (__underflow): Add libc_hidden_def.
* libio/wgenops.c (__wuflow): Likewise.
(__wunderflow): Likewise.
* include/obstack.h: Add libc_hidden_proto for _obstack_newchunk.
* malloc/obstack.c (_obstack_newchunk): Add libc_hidden_def.
* include/stdio.h: Add libc_hidden_proto for __vfscanf.
* stdio-common/vfscanf.c (__vfscanf): Add libc_hidden_def.
* include/string.h: Add libc_hidden_proto for __strverscmp.
* string/strverscmp.c (__strverscmp): Add libc_hidden_def.
* include/unistd.h: Add libc_hidden_proto for __sysconf.
* sysdeps/generic/sysconf.c (__sysconf): Add libc_hidden_def.
* sysdeps/posix/sysconf.c: Likewise.
* sysdeps/unix/sysv/irix4/sysconf.c: Likewise.
* sysdeps/unix/sysv/sysv4/sysconf.c: Likewise.
* include/wctype.h: Use libc_hidden_proto for __iswctype, __iswalnum_l,
__iswalpha_l, __iswblank_l, __iswcntrl_l, __iswdigit_l, __iswlower_l,
__iswgraph_l, __iswprint_l, __iswpunct_l, __iswspace_l, __iswupper_l,
__iswxdigit_l, __towlower_l, __towupper_l.
* wcsmbs/wcstype.c (__iswctype): Use libc_hidden_def.
* wcsmbs/wcfuncs_l.c: Use libc_hidden_def for all functions.
* include/sys/wait.h: Add libc_hidden_proto for __xmknod.
* sysdeps/generic/xmknod.c (__xmknod): Add libc_hidden_def.
* sysdeps/mach/hurd/xmknod.c: Likewise.
* sysdeps/unix/xmknod.c: Likewise.
* sysdeps/unix/sysv/linux/xmknod.c: Likewise.
* sysdeps/unix/sysv/linux/alpha/xmknod.c: Likewise.
* sysdeps/unix/sysv/linux/mips/xmknod.c: Likewise.
* sunrpc/svc.c: Add missing INTUSE for _authenticate.
2002-08-04 09:27:27 +00:00
|
|
|
#else
|
2014-06-23 15:53:30 +00:00
|
|
|
# include <config.h>
|
2004-01-28 03:54:31 +00:00
|
|
|
# include "obstack.h"
|
Update.
2002-08-04 Ulrich Drepper <drepper@redhat.com>
* elf/dl-addr.c (_dl_addr): Add libc_hidden_def.
* elf/dl-close.c (_dl_close): Add libc_hidden_def.
* elf/dl-open.c (_dl_open): Add libc_hidden_def.
* include/dlfcn.h: Add libc_hidden_proto for _dl_addr, _dl_open,
_dl_close.
* include/libio.h: Add libc_hidden_proto for __underflow, __wuflow,
__wunderflow.
* libio/genops.c (__underflow): Add libc_hidden_def.
* libio/wgenops.c (__wuflow): Likewise.
(__wunderflow): Likewise.
* include/obstack.h: Add libc_hidden_proto for _obstack_newchunk.
* malloc/obstack.c (_obstack_newchunk): Add libc_hidden_def.
* include/stdio.h: Add libc_hidden_proto for __vfscanf.
* stdio-common/vfscanf.c (__vfscanf): Add libc_hidden_def.
* include/string.h: Add libc_hidden_proto for __strverscmp.
* string/strverscmp.c (__strverscmp): Add libc_hidden_def.
* include/unistd.h: Add libc_hidden_proto for __sysconf.
* sysdeps/generic/sysconf.c (__sysconf): Add libc_hidden_def.
* sysdeps/posix/sysconf.c: Likewise.
* sysdeps/unix/sysv/irix4/sysconf.c: Likewise.
* sysdeps/unix/sysv/sysv4/sysconf.c: Likewise.
* include/wctype.h: Use libc_hidden_proto for __iswctype, __iswalnum_l,
__iswalpha_l, __iswblank_l, __iswcntrl_l, __iswdigit_l, __iswlower_l,
__iswgraph_l, __iswprint_l, __iswpunct_l, __iswspace_l, __iswupper_l,
__iswxdigit_l, __towlower_l, __towupper_l.
* wcsmbs/wcstype.c (__iswctype): Use libc_hidden_def.
* wcsmbs/wcfuncs_l.c: Use libc_hidden_def for all functions.
* include/sys/wait.h: Add libc_hidden_proto for __xmknod.
* sysdeps/generic/xmknod.c (__xmknod): Add libc_hidden_def.
* sysdeps/mach/hurd/xmknod.c: Likewise.
* sysdeps/unix/xmknod.c: Likewise.
* sysdeps/unix/sysv/linux/xmknod.c: Likewise.
* sysdeps/unix/sysv/linux/alpha/xmknod.c: Likewise.
* sysdeps/unix/sysv/linux/mips/xmknod.c: Likewise.
* sunrpc/svc.c: Add missing INTUSE for _authenticate.
2002-08-04 09:27:27 +00:00
|
|
|
#endif
|
1996-12-08 08:01:13 +00:00
|
|
|
|
|
|
|
/* NOTE BEFORE MODIFYING THIS FILE: This version number must be
|
|
|
|
incremented whenever callers compiled using an old obstack.h can no
|
|
|
|
longer properly call the functions in this obstack.c. */
|
update from main archive 961211
Thu Dec 12 03:32:21 1996 Ulrich Drepper <drepper@cygnus.com>
* libio/_G_config.h: Add definition of _G_int16_t, _G_int32_t,
_G_uint16_t, _G_uin32_t, _G_HAVE_BOOL, _G_HAVE_MMAP, and
_G_ARGS.
Change libio buffer handling to allocate internal buffers using
mmap if possible.
* libio/filedoalloc.c (_IO_file_doallocate): Change call to
ALLOC_BUF.
* libio/genops.c (_IO_setb, _IO_default_finish): Change call
to FREE_BUF.
(_IO_default_doallocate): Change call to ALLOC_BUF.
* libio/libioP.h: Change definition of ALLOC_BUF and FREE_BUF
to use mmap/munmap when possible.
* libio/memstream.c: Don't use ALLOC_BUF, but directly malloc.
* libio/vasprintf.c: Likewise.
Patch by HJ Lu.
* libio/libio.h: Define NULL as __null only for gcc-2.8 and up.
* libio/libioP.h: Likewise.
* libio/fileops.c (_IO_file_read, _IO_file_write): Don't
restart syscall when EINTR was returned. Necessary for POSIX.1.
* libio/strops.c (_IO_str_overflow): Add cast to prevent warning.
* new-malloc/malloc.c (heap_trim): Correctly place parentheses to
prevent warnings.
* nis/Makefile: Remove rules for bsd-tools which are not part
of glibc.
Patch by Thorsten Kukuk.
* nis/ypclnt.c: Add prototype for xdr_free.
Add const to first parameter for __yp_bind.
* nis/nss_compat/compat-pwd.c (getpwent_next_netgr, getpwent_next_nis,
getpwent_next_file): Variable `p2len' must have type size_t.
* nis/nss_nis/nis-alias.c: Add casts to prevent warnings.
* nis/nss_nis/nis-ethers.c: Likewise.
* nis/nss_nis/nis-grp.c: Likewise.
* nis/nss_nis/nis-hosts.c: Likewise.
* nis/nss_nis/nis-network.c: Likewise.
* nis/nss_nis/nis-proto.c: Likewise.
* nis/nss_nis/nis-pwd.c: Likewise.
* nis/nss_nis/nis-rpc.c: Likewise.
* nis/nss_nis/nis-service.c: Likewise.
* nis/nss_nis/nis-spwd.c: Likewise.
* nis/rpcsvc/yp_prot.h (ypreq_key): Change type of members to
`const char *'.
(ypmaplist): Change member names to `map' and `next' and provide
#defines for old names.
Patch by Thorsten Kukuk.
* nss/nss_files/files-parse.c (parse_line, parse_list): Change
type for `datalen' parameter to size_t.
* shsdow/lckpwdf.c: Use fcntl forlocking, not flock.
* stdio-common/printf.c [USE_IN_LIBIO]: Provide alias _IO_printf
for printf.
* stdio-common/sscanf.c [USE_IN_LIBIO]: Provide alias _IO_sscanf
for sscanf.
Patch by HJ Lu.
* stdio-common/tmpfile.c: Update copyright.
* stdio-common/vfscanf.c: Correctly handle EINTR error from fgetc
function.
Don't eat white space for `C' format.
* stdlib/tst-strtol.c [~0UL != 0xffffffff]: Fix typo in test data.
* sysdeps/generic/abort.c: Update copyright. De-ANSI-declfy.
* sysdeps/i386/abort.c: Removed. This version does not use
signal SIGABRT.
* sysdeps/i386/fpu/__math.h: Define __NO_MATH_INLINES if not using
gcc-2.8 or up.
Patch by HJ Lu.
* sysdeps/posix/tempname.c: Test for error but EEXIST after open
call. If EMFILE, ENFILE, or EINTR return with error.
Wed Dec 11 14:43:52 1996 Ulrich Drepper <drepper@cygnus.com>
* gnu-versions.h: Set _GNU_OBSTACK_INTERFACE_VERSION back to 1.
We are compatible again.
* new-malloc/obstack.h (struct obstack): Add back alloc_failed bit
even though it is not used.
* malloc/obstack.h: Likewise.
* new-malloc/obstack.c (_obstack_begin, _obstack_begin_1): Initialize
alloc_failed bit to 0.
* time/strftime.c: Extend for Emacs' needs. Recognize field width,
%P format and `0' modifier.
Tue Dec 10 21:20:44 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* Makerules (make-link): Don't discard exit codes of intermediate
commands. Always use rellns-sh if symbolic links are available.
Tue Dec 10 20:09:51 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/netinet/in.h: Enclose #include
<linux/in.h> in __BEGIN_DECLS/__END_DECLS to avoid linkage
conflict of ntohs etc. in <asm/byteorder.h>.
1996-12-12 03:24:48 +00:00
|
|
|
#define OBSTACK_INTERFACE_VERSION 1
|
1996-12-08 08:01:13 +00:00
|
|
|
|
|
|
|
/* Comment out all this code if we are using the GNU C Library, and are not
|
|
|
|
actually compiling the library itself, and the installed library
|
|
|
|
supports the same library interface we do. This code is part of the GNU
|
|
|
|
C Library, but also included in many other GNU distributions. Compiling
|
|
|
|
and linking in this code is a waste when using the GNU C library
|
|
|
|
(especially if it is a shared library). Rather than having every GNU
|
2014-06-23 15:53:30 +00:00
|
|
|
program understand 'configure --with-gnu-libc' and omit the object
|
1996-12-08 08:01:13 +00:00
|
|
|
files, it is simpler to just do this in the source for each such file. */
|
|
|
|
|
2014-01-02 08:38:18 +00:00
|
|
|
#include <stdio.h> /* Random thing to get __GNU_LIBRARY__. */
|
2001-08-23 23:36:47 +00:00
|
|
|
#if !defined _LIBC && defined __GNU_LIBRARY__ && __GNU_LIBRARY__ > 1
|
|
|
|
# include <gnu-versions.h>
|
|
|
|
# if _GNU_OBSTACK_INTERFACE_VERSION == OBSTACK_INTERFACE_VERSION
|
|
|
|
# define ELIDE_CODE
|
|
|
|
# endif
|
1996-12-08 08:01:13 +00:00
|
|
|
#endif
|
|
|
|
|
[BZ #321]
2005-10-14 Paul Eggert <eggert@cs.ucla.edu>
* malloc/obstack.c: Fix old comments. Update FSF snail mail address.
* malloc/obstack.h: Likewise.
[BZ #321]
Fix portability bugs encountered when porting to Itanium.
* malloc/obstack.h (obstack_empty_p, obstack_finish): Do not
assume that the "contents" member is suitably aligned. It is
not, for some hosts and alignments: e.g., Itanium, long-double.
* malloc/obstack.c (_obstack_begin, _obstack_begin_1,
_obstack_newchunk): Likewise.
* malloc/obstack.c: Include <stddef.h>, for size_t.
Include <inttypes.h>, <stdint.h> if needed and available.
(DEFAULT_ALIGNMENT): Now an enum constant, not a macro.
Use C89 offsetof rather than K&R trick.
Use the maximum alignment of uintmax_t, long double, void *
rather than the alignment of double.
(union fooround): Use uintmax_t, long double, void * members
rather than just long and double.
[BZ #321]
Fix portability bugs encountered when porting to the IBM iSeries,
where pointers are 256 bits wide and no integers are that wide.
* malloc/obstack.h (__PTR_TO_INT, __INT_TO_PTR): Remove.
All uses changed to:
(__BPTR_ALIGN, __PTR_ALIGN): New macros.
(struct _obstack_chunk.temp): Change from int to a union
of pointer and int. All uses changed.
[BZ #321]
* malloc/obstack.c (print_and_abort) [!_LIBC]:
Call fprintf (stderr, ...), not __fxprintf (NULL, ...).
[_LIBC && USE_IN_LIBIO]: Don't include <wchar.h>; no longer needed.
2006-01-11 05:43:11 +00:00
|
|
|
#include <stddef.h>
|
1996-12-08 08:01:13 +00:00
|
|
|
|
|
|
|
#ifndef ELIDE_CODE
|
|
|
|
|
|
|
|
|
2014-06-23 15:53:30 +00:00
|
|
|
# include <stdint.h>
|
[BZ #321]
2005-10-14 Paul Eggert <eggert@cs.ucla.edu>
* malloc/obstack.c: Fix old comments. Update FSF snail mail address.
* malloc/obstack.h: Likewise.
[BZ #321]
Fix portability bugs encountered when porting to Itanium.
* malloc/obstack.h (obstack_empty_p, obstack_finish): Do not
assume that the "contents" member is suitably aligned. It is
not, for some hosts and alignments: e.g., Itanium, long-double.
* malloc/obstack.c (_obstack_begin, _obstack_begin_1,
_obstack_newchunk): Likewise.
* malloc/obstack.c: Include <stddef.h>, for size_t.
Include <inttypes.h>, <stdint.h> if needed and available.
(DEFAULT_ALIGNMENT): Now an enum constant, not a macro.
Use C89 offsetof rather than K&R trick.
Use the maximum alignment of uintmax_t, long double, void *
rather than the alignment of double.
(union fooround): Use uintmax_t, long double, void * members
rather than just long and double.
[BZ #321]
Fix portability bugs encountered when porting to the IBM iSeries,
where pointers are 256 bits wide and no integers are that wide.
* malloc/obstack.h (__PTR_TO_INT, __INT_TO_PTR): Remove.
All uses changed to:
(__BPTR_ALIGN, __PTR_ALIGN): New macros.
(struct _obstack_chunk.temp): Change from int to a union
of pointer and int. All uses changed.
[BZ #321]
* malloc/obstack.c (print_and_abort) [!_LIBC]:
Call fprintf (stderr, ...), not __fxprintf (NULL, ...).
[_LIBC && USE_IN_LIBIO]: Don't include <wchar.h>; no longer needed.
2006-01-11 05:43:11 +00:00
|
|
|
|
1996-12-08 08:01:13 +00:00
|
|
|
/* Determine default alignment. */
|
[BZ #321]
2005-10-14 Paul Eggert <eggert@cs.ucla.edu>
* malloc/obstack.c: Fix old comments. Update FSF snail mail address.
* malloc/obstack.h: Likewise.
[BZ #321]
Fix portability bugs encountered when porting to Itanium.
* malloc/obstack.h (obstack_empty_p, obstack_finish): Do not
assume that the "contents" member is suitably aligned. It is
not, for some hosts and alignments: e.g., Itanium, long-double.
* malloc/obstack.c (_obstack_begin, _obstack_begin_1,
_obstack_newchunk): Likewise.
* malloc/obstack.c: Include <stddef.h>, for size_t.
Include <inttypes.h>, <stdint.h> if needed and available.
(DEFAULT_ALIGNMENT): Now an enum constant, not a macro.
Use C89 offsetof rather than K&R trick.
Use the maximum alignment of uintmax_t, long double, void *
rather than the alignment of double.
(union fooround): Use uintmax_t, long double, void * members
rather than just long and double.
[BZ #321]
Fix portability bugs encountered when porting to the IBM iSeries,
where pointers are 256 bits wide and no integers are that wide.
* malloc/obstack.h (__PTR_TO_INT, __INT_TO_PTR): Remove.
All uses changed to:
(__BPTR_ALIGN, __PTR_ALIGN): New macros.
(struct _obstack_chunk.temp): Change from int to a union
of pointer and int. All uses changed.
[BZ #321]
* malloc/obstack.c (print_and_abort) [!_LIBC]:
Call fprintf (stderr, ...), not __fxprintf (NULL, ...).
[_LIBC && USE_IN_LIBIO]: Don't include <wchar.h>; no longer needed.
2006-01-11 05:43:11 +00:00
|
|
|
union fooround
|
|
|
|
{
|
|
|
|
uintmax_t i;
|
|
|
|
long double d;
|
|
|
|
void *p;
|
|
|
|
};
|
|
|
|
struct fooalign
|
|
|
|
{
|
|
|
|
char c;
|
|
|
|
union fooround u;
|
|
|
|
};
|
1996-12-08 08:01:13 +00:00
|
|
|
/* If malloc were really smart, it would round addresses to DEFAULT_ALIGNMENT.
|
|
|
|
But in fact it might be less smart and round addresses to as much as
|
|
|
|
DEFAULT_ROUNDING. So we prepare for it to do that. */
|
[BZ #321]
2005-10-14 Paul Eggert <eggert@cs.ucla.edu>
* malloc/obstack.c: Fix old comments. Update FSF snail mail address.
* malloc/obstack.h: Likewise.
[BZ #321]
Fix portability bugs encountered when porting to Itanium.
* malloc/obstack.h (obstack_empty_p, obstack_finish): Do not
assume that the "contents" member is suitably aligned. It is
not, for some hosts and alignments: e.g., Itanium, long-double.
* malloc/obstack.c (_obstack_begin, _obstack_begin_1,
_obstack_newchunk): Likewise.
* malloc/obstack.c: Include <stddef.h>, for size_t.
Include <inttypes.h>, <stdint.h> if needed and available.
(DEFAULT_ALIGNMENT): Now an enum constant, not a macro.
Use C89 offsetof rather than K&R trick.
Use the maximum alignment of uintmax_t, long double, void *
rather than the alignment of double.
(union fooround): Use uintmax_t, long double, void * members
rather than just long and double.
[BZ #321]
Fix portability bugs encountered when porting to the IBM iSeries,
where pointers are 256 bits wide and no integers are that wide.
* malloc/obstack.h (__PTR_TO_INT, __INT_TO_PTR): Remove.
All uses changed to:
(__BPTR_ALIGN, __PTR_ALIGN): New macros.
(struct _obstack_chunk.temp): Change from int to a union
of pointer and int. All uses changed.
[BZ #321]
* malloc/obstack.c (print_and_abort) [!_LIBC]:
Call fprintf (stderr, ...), not __fxprintf (NULL, ...).
[_LIBC && USE_IN_LIBIO]: Don't include <wchar.h>; no longer needed.
2006-01-11 05:43:11 +00:00
|
|
|
enum
|
2014-01-02 08:38:18 +00:00
|
|
|
{
|
|
|
|
DEFAULT_ALIGNMENT = offsetof (struct fooalign, u),
|
|
|
|
DEFAULT_ROUNDING = sizeof (union fooround)
|
|
|
|
};
|
1996-12-08 08:01:13 +00:00
|
|
|
|
|
|
|
/* When we copy a long block of data, this is the unit to do it with.
|
|
|
|
On some machines, copying successive ints does not work;
|
2014-06-23 15:53:30 +00:00
|
|
|
in such a case, redefine COPYING_UNIT to 'long' (if that works)
|
|
|
|
or 'char' as a last resort. */
|
2001-08-23 23:36:47 +00:00
|
|
|
# ifndef COPYING_UNIT
|
|
|
|
# define COPYING_UNIT int
|
|
|
|
# endif
|
1996-12-08 08:01:13 +00:00
|
|
|
|
|
|
|
|
2014-06-23 15:53:30 +00:00
|
|
|
/* The functions allocating more room by calling 'obstack_chunk_alloc'
|
|
|
|
jump to the handler pointed to by 'obstack_alloc_failed_handler'.
|
Update.
1998-10-02 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* sysdeps/unix/sysv/linux/sys/swap.h (SWAP_FLAG_PREFER,
SWAP_FLAG_PRIO_MASK,SWAP_FLAG_PRIO_SHIFT): Added.
Remove inclusion of <linux/swap.h>.
1998-10-05 Ulrich Drepper <drepper@cygnus.com>
* io/sys/stat.h: Use __P in definitions of inline stat functions
so that they match the declaration.
1998-10-02 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* sysdeps/unix/sysv/linux/sys/quota.h (Q_RSQUASH): Added.
1998-10-02 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* sysdeps/unix/sysv/linux/sys/acct.h: Bring in sync with current
linux 2.1 version.
1998-10-02 Philip Blundell <pb@nexus.co.uk>
* sysdeps/arm/dl-machine.h: Fix typo in last change.
* sysdeps/arm/bits/huge_val.h: New file.
1998-10-02 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* sysdeps/unix/sysv/linux/sys/reboot.h (RB_POWER_OFF): Added.
* sysdeps/unix/sysv/linux/sys/ptrace.h (PTRACE_SYSCALL): Add
define.
1998-10-05 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/posix/getcwd.c (__getcwd): Use temporary variable to
store result of realloc instead of using BUF.
1998-10-04 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* misc/sgtty.h (_SGTTY_H): Correct spelling.
Reported by Rouben Rostamian <rostamian@umbc.edu> [PR libc/817].
1998-10-04 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* manual/memory.texi (Obstacks): Document
obstack_alloc_failed_handler usage.
* malloc/obstack.h: Enhance comment about
obstack_alloc_failed_handler usage.
* malloc/obstack.c: Likewise.
1998-10-05 Ulrich Drepper <drepper@cygnus.com>
* misc/sys/cdefs.h (__extension__): Define as empty if no gcc or
gcc before 2.8 is used.
1998-10-01 Philip Blundell <pb@nexus.co.uk>
* sysdeps/arm/machine-gmon.h: Correct args to mcount(). Patch
from Scott Bambrough.
* sysdeps/unix/sysv/linux/arm/register-dump.h: New file.
* libio/libioP.h (FILEBUF_LITERAL) [! _IO_MTSAFE_IO]: Don't
include the lock member.
1998-09-03 Philip Blundell <pb@nexus.co.uk>
* sysdeps/arm/fpu/__longjmp.S: Cope with fussy assembler.
1998-09-29 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* string/bits/string2.h (__string2_1bptr_p): Don't use a statement
expression.
(__mempcpy, strcpy, __stpcpy, strcmp, strcspn, strspn, strpbrk,
__strsep): Greatly reduce size of expansion by combining common
expressions.
(__mempcpy_small, __strcpy_small, __stpcpy_small): Convert to
inline function.
(__mempcpy_args, __strcpy_args, __stpcpy_args): New macros, used
by the above definitions.
1998-09-27 Geoff Keating <geoffk@ozemail.com.au>
* sysdeps/unix/sysv/linux/powerpc/bits/ipc.h: New file, use
correct struct ipc_perm definition.
1998-09-29 Thorsten Kukuk <kukuk@vt.uni-paderborn.de>
* nis/ypclnt.c (yp_all): Close UDP socket und give CLIENT handle free.
* sysdeps/unix/sysv/linux/alpha/ioperm.c: List Ruffian in platforms[].
* sysdeps/unix/sysv/linux/net/if_shaper.h: New file.
1998-10-05 13:40:47 +00:00
|
|
|
This can be set to a user defined function which should either
|
|
|
|
abort gracefully or use longjump - but shouldn't return. This
|
|
|
|
variable by default points to the internal function
|
2014-06-23 15:53:30 +00:00
|
|
|
'print_and_abort'. */
|
|
|
|
static _Noreturn void print_and_abort (void);
|
1996-12-08 08:01:13 +00:00
|
|
|
void (*obstack_alloc_failed_handler) (void) = print_and_abort;
|
|
|
|
|
2014-06-23 15:53:30 +00:00
|
|
|
/* Exit value used when 'print_and_abort' is used. */
|
2004-01-28 03:54:31 +00:00
|
|
|
# include <stdlib.h>
|
|
|
|
# ifdef _LIBC
|
1996-12-08 08:01:13 +00:00
|
|
|
int obstack_exit_failure = EXIT_FAILURE;
|
2004-01-28 03:54:31 +00:00
|
|
|
# else
|
|
|
|
# include "exitfail.h"
|
|
|
|
# define obstack_exit_failure exit_failure
|
|
|
|
# endif
|
1996-12-08 08:01:13 +00:00
|
|
|
|
2004-05-20 21:55:10 +00:00
|
|
|
# ifdef _LIBC
|
2004-05-24 05:20:48 +00:00
|
|
|
# if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4)
|
2004-05-20 21:55:10 +00:00
|
|
|
/* A looong time ago (before 1994, anyway; we're not sure) this global variable
|
|
|
|
was used by non-GNU-C macros to avoid multiple evaluation. The GNU C
|
|
|
|
library still exports it because somebody might use it. */
|
2013-05-15 18:28:08 +00:00
|
|
|
struct obstack *_obstack_compat = 0;
|
2004-05-24 05:20:48 +00:00
|
|
|
compat_symbol (libc, _obstack_compat, _obstack, GLIBC_2_0);
|
|
|
|
# endif
|
2004-05-20 21:55:10 +00:00
|
|
|
# endif
|
1996-12-08 08:01:13 +00:00
|
|
|
|
|
|
|
/* Define a macro that either calls functions with the traditional malloc/free
|
|
|
|
calling interface, or calls functions with the mmalloc/mfree interface
|
|
|
|
(that adds an extra first argument), based on the state of use_extra_arg.
|
|
|
|
For free, do not use ?:, since some compilers, like the MIPS compilers,
|
|
|
|
do not allow (expr) ? void : void. */
|
|
|
|
|
2004-01-28 03:54:31 +00:00
|
|
|
# define CALL_CHUNKFUN(h, size) \
|
2014-01-02 08:38:18 +00:00
|
|
|
(((h)->use_extra_arg) \
|
|
|
|
? (*(h)->chunkfun)((h)->extra_arg, (size)) \
|
|
|
|
: (*(struct _obstack_chunk *(*)(long))(h)->chunkfun)((size)))
|
1996-12-22 00:32:43 +00:00
|
|
|
|
2004-01-28 03:54:31 +00:00
|
|
|
# define CALL_FREEFUN(h, old_chunk) \
|
1996-12-22 00:32:43 +00:00
|
|
|
do { \
|
2014-01-02 08:38:18 +00:00
|
|
|
if ((h)->use_extra_arg) \
|
2014-06-23 15:53:30 +00:00
|
|
|
(*(h)->freefun)((h)->extra_arg, (old_chunk)); \
|
2014-01-02 08:38:18 +00:00
|
|
|
else \
|
2014-06-23 15:53:30 +00:00
|
|
|
(*(void (*)(void *))(h)->freefun)((old_chunk)); \
|
2014-01-02 08:38:18 +00:00
|
|
|
} while (0)
|
|
|
|
|
1996-12-08 08:01:13 +00:00
|
|
|
|
|
|
|
/* Initialize an obstack H for use. Specify chunk size SIZE (0 means default).
|
|
|
|
Objects start on multiples of ALIGNMENT (0 means use default).
|
|
|
|
CHUNKFUN is the function to use to allocate chunks,
|
|
|
|
and FREEFUN the function to free them.
|
|
|
|
|
Update.
1998-10-02 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* sysdeps/unix/sysv/linux/sys/swap.h (SWAP_FLAG_PREFER,
SWAP_FLAG_PRIO_MASK,SWAP_FLAG_PRIO_SHIFT): Added.
Remove inclusion of <linux/swap.h>.
1998-10-05 Ulrich Drepper <drepper@cygnus.com>
* io/sys/stat.h: Use __P in definitions of inline stat functions
so that they match the declaration.
1998-10-02 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* sysdeps/unix/sysv/linux/sys/quota.h (Q_RSQUASH): Added.
1998-10-02 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* sysdeps/unix/sysv/linux/sys/acct.h: Bring in sync with current
linux 2.1 version.
1998-10-02 Philip Blundell <pb@nexus.co.uk>
* sysdeps/arm/dl-machine.h: Fix typo in last change.
* sysdeps/arm/bits/huge_val.h: New file.
1998-10-02 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* sysdeps/unix/sysv/linux/sys/reboot.h (RB_POWER_OFF): Added.
* sysdeps/unix/sysv/linux/sys/ptrace.h (PTRACE_SYSCALL): Add
define.
1998-10-05 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/posix/getcwd.c (__getcwd): Use temporary variable to
store result of realloc instead of using BUF.
1998-10-04 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* misc/sgtty.h (_SGTTY_H): Correct spelling.
Reported by Rouben Rostamian <rostamian@umbc.edu> [PR libc/817].
1998-10-04 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* manual/memory.texi (Obstacks): Document
obstack_alloc_failed_handler usage.
* malloc/obstack.h: Enhance comment about
obstack_alloc_failed_handler usage.
* malloc/obstack.c: Likewise.
1998-10-05 Ulrich Drepper <drepper@cygnus.com>
* misc/sys/cdefs.h (__extension__): Define as empty if no gcc or
gcc before 2.8 is used.
1998-10-01 Philip Blundell <pb@nexus.co.uk>
* sysdeps/arm/machine-gmon.h: Correct args to mcount(). Patch
from Scott Bambrough.
* sysdeps/unix/sysv/linux/arm/register-dump.h: New file.
* libio/libioP.h (FILEBUF_LITERAL) [! _IO_MTSAFE_IO]: Don't
include the lock member.
1998-09-03 Philip Blundell <pb@nexus.co.uk>
* sysdeps/arm/fpu/__longjmp.S: Cope with fussy assembler.
1998-09-29 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* string/bits/string2.h (__string2_1bptr_p): Don't use a statement
expression.
(__mempcpy, strcpy, __stpcpy, strcmp, strcspn, strspn, strpbrk,
__strsep): Greatly reduce size of expansion by combining common
expressions.
(__mempcpy_small, __strcpy_small, __stpcpy_small): Convert to
inline function.
(__mempcpy_args, __strcpy_args, __stpcpy_args): New macros, used
by the above definitions.
1998-09-27 Geoff Keating <geoffk@ozemail.com.au>
* sysdeps/unix/sysv/linux/powerpc/bits/ipc.h: New file, use
correct struct ipc_perm definition.
1998-09-29 Thorsten Kukuk <kukuk@vt.uni-paderborn.de>
* nis/ypclnt.c (yp_all): Close UDP socket und give CLIENT handle free.
* sysdeps/unix/sysv/linux/alpha/ioperm.c: List Ruffian in platforms[].
* sysdeps/unix/sysv/linux/net/if_shaper.h: New file.
1998-10-05 13:40:47 +00:00
|
|
|
Return nonzero if successful, calls obstack_alloc_failed_handler if
|
|
|
|
allocation fails. */
|
1996-12-08 08:01:13 +00:00
|
|
|
|
|
|
|
int
|
2004-01-28 03:54:31 +00:00
|
|
|
_obstack_begin (struct obstack *h,
|
2014-06-23 15:53:30 +00:00
|
|
|
int size, int alignment,
|
|
|
|
void *(*chunkfun) (long),
|
|
|
|
void (*freefun) (void *))
|
1996-12-08 08:01:13 +00:00
|
|
|
{
|
2013-06-07 22:24:35 +00:00
|
|
|
struct _obstack_chunk *chunk; /* points to new chunk */
|
1996-12-08 08:01:13 +00:00
|
|
|
|
|
|
|
if (alignment == 0)
|
[BZ #321]
2005-10-14 Paul Eggert <eggert@cs.ucla.edu>
* malloc/obstack.c: Fix old comments. Update FSF snail mail address.
* malloc/obstack.h: Likewise.
[BZ #321]
Fix portability bugs encountered when porting to Itanium.
* malloc/obstack.h (obstack_empty_p, obstack_finish): Do not
assume that the "contents" member is suitably aligned. It is
not, for some hosts and alignments: e.g., Itanium, long-double.
* malloc/obstack.c (_obstack_begin, _obstack_begin_1,
_obstack_newchunk): Likewise.
* malloc/obstack.c: Include <stddef.h>, for size_t.
Include <inttypes.h>, <stdint.h> if needed and available.
(DEFAULT_ALIGNMENT): Now an enum constant, not a macro.
Use C89 offsetof rather than K&R trick.
Use the maximum alignment of uintmax_t, long double, void *
rather than the alignment of double.
(union fooround): Use uintmax_t, long double, void * members
rather than just long and double.
[BZ #321]
Fix portability bugs encountered when porting to the IBM iSeries,
where pointers are 256 bits wide and no integers are that wide.
* malloc/obstack.h (__PTR_TO_INT, __INT_TO_PTR): Remove.
All uses changed to:
(__BPTR_ALIGN, __PTR_ALIGN): New macros.
(struct _obstack_chunk.temp): Change from int to a union
of pointer and int. All uses changed.
[BZ #321]
* malloc/obstack.c (print_and_abort) [!_LIBC]:
Call fprintf (stderr, ...), not __fxprintf (NULL, ...).
[_LIBC && USE_IN_LIBIO]: Don't include <wchar.h>; no longer needed.
2006-01-11 05:43:11 +00:00
|
|
|
alignment = DEFAULT_ALIGNMENT;
|
1996-12-08 08:01:13 +00:00
|
|
|
if (size == 0)
|
2014-06-23 15:53:30 +00:00
|
|
|
/* Default size is what GNU malloc can fit in a 4096-byte block. */
|
1996-12-08 08:01:13 +00:00
|
|
|
{
|
|
|
|
/* 12 is sizeof (mhead) and 4 is EXTRA from GNU malloc.
|
2014-06-23 15:53:30 +00:00
|
|
|
Use the values for range checking, because if range checking is off,
|
|
|
|
the extra bytes won't be missed terribly, but if range checking is on
|
|
|
|
and we used a larger request, a whole extra 4096 bytes would be
|
|
|
|
allocated.
|
1996-12-08 08:01:13 +00:00
|
|
|
|
2014-06-23 15:53:30 +00:00
|
|
|
These number are irrelevant to the new GNU malloc. I suspect it is
|
|
|
|
less sensitive to the size of the request. */
|
1996-12-08 08:01:13 +00:00
|
|
|
int extra = ((((12 + DEFAULT_ROUNDING - 1) & ~(DEFAULT_ROUNDING - 1))
|
2014-06-23 15:53:30 +00:00
|
|
|
+ 4 + DEFAULT_ROUNDING - 1)
|
|
|
|
& ~(DEFAULT_ROUNDING - 1));
|
1996-12-08 08:01:13 +00:00
|
|
|
size = 4096 - extra;
|
|
|
|
}
|
|
|
|
|
2014-06-23 15:53:30 +00:00
|
|
|
h->chunkfun = (struct _obstack_chunk * (*) (void *, long)) chunkfun;
|
|
|
|
h->freefun = (void (*) (void *, struct _obstack_chunk *)) freefun;
|
1996-12-08 08:01:13 +00:00
|
|
|
h->chunk_size = size;
|
|
|
|
h->alignment_mask = alignment - 1;
|
|
|
|
h->use_extra_arg = 0;
|
|
|
|
|
2014-01-02 08:38:18 +00:00
|
|
|
chunk = h->chunk = CALL_CHUNKFUN (h, h->chunk_size);
|
1996-12-08 08:01:13 +00:00
|
|
|
if (!chunk)
|
2014-06-23 15:53:30 +00:00
|
|
|
(*obstack_alloc_failed_handler) ();
|
[BZ #321]
2005-10-14 Paul Eggert <eggert@cs.ucla.edu>
* malloc/obstack.c: Fix old comments. Update FSF snail mail address.
* malloc/obstack.h: Likewise.
[BZ #321]
Fix portability bugs encountered when porting to Itanium.
* malloc/obstack.h (obstack_empty_p, obstack_finish): Do not
assume that the "contents" member is suitably aligned. It is
not, for some hosts and alignments: e.g., Itanium, long-double.
* malloc/obstack.c (_obstack_begin, _obstack_begin_1,
_obstack_newchunk): Likewise.
* malloc/obstack.c: Include <stddef.h>, for size_t.
Include <inttypes.h>, <stdint.h> if needed and available.
(DEFAULT_ALIGNMENT): Now an enum constant, not a macro.
Use C89 offsetof rather than K&R trick.
Use the maximum alignment of uintmax_t, long double, void *
rather than the alignment of double.
(union fooround): Use uintmax_t, long double, void * members
rather than just long and double.
[BZ #321]
Fix portability bugs encountered when porting to the IBM iSeries,
where pointers are 256 bits wide and no integers are that wide.
* malloc/obstack.h (__PTR_TO_INT, __INT_TO_PTR): Remove.
All uses changed to:
(__BPTR_ALIGN, __PTR_ALIGN): New macros.
(struct _obstack_chunk.temp): Change from int to a union
of pointer and int. All uses changed.
[BZ #321]
* malloc/obstack.c (print_and_abort) [!_LIBC]:
Call fprintf (stderr, ...), not __fxprintf (NULL, ...).
[_LIBC && USE_IN_LIBIO]: Don't include <wchar.h>; no longer needed.
2006-01-11 05:43:11 +00:00
|
|
|
h->next_free = h->object_base = __PTR_ALIGN ((char *) chunk, chunk->contents,
|
2014-06-23 15:53:30 +00:00
|
|
|
alignment - 1);
|
1996-12-08 08:01:13 +00:00
|
|
|
h->chunk_limit = chunk->limit
|
2014-06-23 15:53:30 +00:00
|
|
|
= (char *) chunk + h->chunk_size;
|
1996-12-08 08:01:13 +00:00
|
|
|
chunk->prev = 0;
|
|
|
|
/* The initial chunk now contains no empty object. */
|
|
|
|
h->maybe_empty_object = 0;
|
update from main archive 961211
Thu Dec 12 03:32:21 1996 Ulrich Drepper <drepper@cygnus.com>
* libio/_G_config.h: Add definition of _G_int16_t, _G_int32_t,
_G_uint16_t, _G_uin32_t, _G_HAVE_BOOL, _G_HAVE_MMAP, and
_G_ARGS.
Change libio buffer handling to allocate internal buffers using
mmap if possible.
* libio/filedoalloc.c (_IO_file_doallocate): Change call to
ALLOC_BUF.
* libio/genops.c (_IO_setb, _IO_default_finish): Change call
to FREE_BUF.
(_IO_default_doallocate): Change call to ALLOC_BUF.
* libio/libioP.h: Change definition of ALLOC_BUF and FREE_BUF
to use mmap/munmap when possible.
* libio/memstream.c: Don't use ALLOC_BUF, but directly malloc.
* libio/vasprintf.c: Likewise.
Patch by HJ Lu.
* libio/libio.h: Define NULL as __null only for gcc-2.8 and up.
* libio/libioP.h: Likewise.
* libio/fileops.c (_IO_file_read, _IO_file_write): Don't
restart syscall when EINTR was returned. Necessary for POSIX.1.
* libio/strops.c (_IO_str_overflow): Add cast to prevent warning.
* new-malloc/malloc.c (heap_trim): Correctly place parentheses to
prevent warnings.
* nis/Makefile: Remove rules for bsd-tools which are not part
of glibc.
Patch by Thorsten Kukuk.
* nis/ypclnt.c: Add prototype for xdr_free.
Add const to first parameter for __yp_bind.
* nis/nss_compat/compat-pwd.c (getpwent_next_netgr, getpwent_next_nis,
getpwent_next_file): Variable `p2len' must have type size_t.
* nis/nss_nis/nis-alias.c: Add casts to prevent warnings.
* nis/nss_nis/nis-ethers.c: Likewise.
* nis/nss_nis/nis-grp.c: Likewise.
* nis/nss_nis/nis-hosts.c: Likewise.
* nis/nss_nis/nis-network.c: Likewise.
* nis/nss_nis/nis-proto.c: Likewise.
* nis/nss_nis/nis-pwd.c: Likewise.
* nis/nss_nis/nis-rpc.c: Likewise.
* nis/nss_nis/nis-service.c: Likewise.
* nis/nss_nis/nis-spwd.c: Likewise.
* nis/rpcsvc/yp_prot.h (ypreq_key): Change type of members to
`const char *'.
(ypmaplist): Change member names to `map' and `next' and provide
#defines for old names.
Patch by Thorsten Kukuk.
* nss/nss_files/files-parse.c (parse_line, parse_list): Change
type for `datalen' parameter to size_t.
* shsdow/lckpwdf.c: Use fcntl forlocking, not flock.
* stdio-common/printf.c [USE_IN_LIBIO]: Provide alias _IO_printf
for printf.
* stdio-common/sscanf.c [USE_IN_LIBIO]: Provide alias _IO_sscanf
for sscanf.
Patch by HJ Lu.
* stdio-common/tmpfile.c: Update copyright.
* stdio-common/vfscanf.c: Correctly handle EINTR error from fgetc
function.
Don't eat white space for `C' format.
* stdlib/tst-strtol.c [~0UL != 0xffffffff]: Fix typo in test data.
* sysdeps/generic/abort.c: Update copyright. De-ANSI-declfy.
* sysdeps/i386/abort.c: Removed. This version does not use
signal SIGABRT.
* sysdeps/i386/fpu/__math.h: Define __NO_MATH_INLINES if not using
gcc-2.8 or up.
Patch by HJ Lu.
* sysdeps/posix/tempname.c: Test for error but EEXIST after open
call. If EMFILE, ENFILE, or EINTR return with error.
Wed Dec 11 14:43:52 1996 Ulrich Drepper <drepper@cygnus.com>
* gnu-versions.h: Set _GNU_OBSTACK_INTERFACE_VERSION back to 1.
We are compatible again.
* new-malloc/obstack.h (struct obstack): Add back alloc_failed bit
even though it is not used.
* malloc/obstack.h: Likewise.
* new-malloc/obstack.c (_obstack_begin, _obstack_begin_1): Initialize
alloc_failed bit to 0.
* time/strftime.c: Extend for Emacs' needs. Recognize field width,
%P format and `0' modifier.
Tue Dec 10 21:20:44 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* Makerules (make-link): Don't discard exit codes of intermediate
commands. Always use rellns-sh if symbolic links are available.
Tue Dec 10 20:09:51 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/netinet/in.h: Enclose #include
<linux/in.h> in __BEGIN_DECLS/__END_DECLS to avoid linkage
conflict of ntohs etc. in <asm/byteorder.h>.
1996-12-12 03:24:48 +00:00
|
|
|
h->alloc_failed = 0;
|
1996-12-08 08:01:13 +00:00
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
int
|
2004-01-28 03:54:31 +00:00
|
|
|
_obstack_begin_1 (struct obstack *h, int size, int alignment,
|
2014-06-23 15:53:30 +00:00
|
|
|
void *(*chunkfun) (void *, long),
|
|
|
|
void (*freefun) (void *, void *),
|
|
|
|
void *arg)
|
1996-12-08 08:01:13 +00:00
|
|
|
{
|
2013-06-07 22:24:35 +00:00
|
|
|
struct _obstack_chunk *chunk; /* points to new chunk */
|
1996-12-08 08:01:13 +00:00
|
|
|
|
|
|
|
if (alignment == 0)
|
[BZ #321]
2005-10-14 Paul Eggert <eggert@cs.ucla.edu>
* malloc/obstack.c: Fix old comments. Update FSF snail mail address.
* malloc/obstack.h: Likewise.
[BZ #321]
Fix portability bugs encountered when porting to Itanium.
* malloc/obstack.h (obstack_empty_p, obstack_finish): Do not
assume that the "contents" member is suitably aligned. It is
not, for some hosts and alignments: e.g., Itanium, long-double.
* malloc/obstack.c (_obstack_begin, _obstack_begin_1,
_obstack_newchunk): Likewise.
* malloc/obstack.c: Include <stddef.h>, for size_t.
Include <inttypes.h>, <stdint.h> if needed and available.
(DEFAULT_ALIGNMENT): Now an enum constant, not a macro.
Use C89 offsetof rather than K&R trick.
Use the maximum alignment of uintmax_t, long double, void *
rather than the alignment of double.
(union fooround): Use uintmax_t, long double, void * members
rather than just long and double.
[BZ #321]
Fix portability bugs encountered when porting to the IBM iSeries,
where pointers are 256 bits wide and no integers are that wide.
* malloc/obstack.h (__PTR_TO_INT, __INT_TO_PTR): Remove.
All uses changed to:
(__BPTR_ALIGN, __PTR_ALIGN): New macros.
(struct _obstack_chunk.temp): Change from int to a union
of pointer and int. All uses changed.
[BZ #321]
* malloc/obstack.c (print_and_abort) [!_LIBC]:
Call fprintf (stderr, ...), not __fxprintf (NULL, ...).
[_LIBC && USE_IN_LIBIO]: Don't include <wchar.h>; no longer needed.
2006-01-11 05:43:11 +00:00
|
|
|
alignment = DEFAULT_ALIGNMENT;
|
1996-12-08 08:01:13 +00:00
|
|
|
if (size == 0)
|
2014-06-23 15:53:30 +00:00
|
|
|
/* Default size is what GNU malloc can fit in a 4096-byte block. */
|
1996-12-08 08:01:13 +00:00
|
|
|
{
|
|
|
|
/* 12 is sizeof (mhead) and 4 is EXTRA from GNU malloc.
|
2014-06-23 15:53:30 +00:00
|
|
|
Use the values for range checking, because if range checking is off,
|
|
|
|
the extra bytes won't be missed terribly, but if range checking is on
|
|
|
|
and we used a larger request, a whole extra 4096 bytes would be
|
|
|
|
allocated.
|
1996-12-08 08:01:13 +00:00
|
|
|
|
2014-06-23 15:53:30 +00:00
|
|
|
These number are irrelevant to the new GNU malloc. I suspect it is
|
|
|
|
less sensitive to the size of the request. */
|
1996-12-08 08:01:13 +00:00
|
|
|
int extra = ((((12 + DEFAULT_ROUNDING - 1) & ~(DEFAULT_ROUNDING - 1))
|
2014-06-23 15:53:30 +00:00
|
|
|
+ 4 + DEFAULT_ROUNDING - 1)
|
|
|
|
& ~(DEFAULT_ROUNDING - 1));
|
1996-12-08 08:01:13 +00:00
|
|
|
size = 4096 - extra;
|
|
|
|
}
|
|
|
|
|
2014-06-23 15:53:30 +00:00
|
|
|
h->chunkfun = (struct _obstack_chunk * (*)(void *,long)) chunkfun;
|
|
|
|
h->freefun = (void (*) (void *, struct _obstack_chunk *)) freefun;
|
1996-12-08 08:01:13 +00:00
|
|
|
h->chunk_size = size;
|
|
|
|
h->alignment_mask = alignment - 1;
|
|
|
|
h->extra_arg = arg;
|
|
|
|
h->use_extra_arg = 1;
|
|
|
|
|
2014-01-02 08:38:18 +00:00
|
|
|
chunk = h->chunk = CALL_CHUNKFUN (h, h->chunk_size);
|
1996-12-08 08:01:13 +00:00
|
|
|
if (!chunk)
|
2014-06-23 15:53:30 +00:00
|
|
|
(*obstack_alloc_failed_handler) ();
|
[BZ #321]
2005-10-14 Paul Eggert <eggert@cs.ucla.edu>
* malloc/obstack.c: Fix old comments. Update FSF snail mail address.
* malloc/obstack.h: Likewise.
[BZ #321]
Fix portability bugs encountered when porting to Itanium.
* malloc/obstack.h (obstack_empty_p, obstack_finish): Do not
assume that the "contents" member is suitably aligned. It is
not, for some hosts and alignments: e.g., Itanium, long-double.
* malloc/obstack.c (_obstack_begin, _obstack_begin_1,
_obstack_newchunk): Likewise.
* malloc/obstack.c: Include <stddef.h>, for size_t.
Include <inttypes.h>, <stdint.h> if needed and available.
(DEFAULT_ALIGNMENT): Now an enum constant, not a macro.
Use C89 offsetof rather than K&R trick.
Use the maximum alignment of uintmax_t, long double, void *
rather than the alignment of double.
(union fooround): Use uintmax_t, long double, void * members
rather than just long and double.
[BZ #321]
Fix portability bugs encountered when porting to the IBM iSeries,
where pointers are 256 bits wide and no integers are that wide.
* malloc/obstack.h (__PTR_TO_INT, __INT_TO_PTR): Remove.
All uses changed to:
(__BPTR_ALIGN, __PTR_ALIGN): New macros.
(struct _obstack_chunk.temp): Change from int to a union
of pointer and int. All uses changed.
[BZ #321]
* malloc/obstack.c (print_and_abort) [!_LIBC]:
Call fprintf (stderr, ...), not __fxprintf (NULL, ...).
[_LIBC && USE_IN_LIBIO]: Don't include <wchar.h>; no longer needed.
2006-01-11 05:43:11 +00:00
|
|
|
h->next_free = h->object_base = __PTR_ALIGN ((char *) chunk, chunk->contents,
|
2014-06-23 15:53:30 +00:00
|
|
|
alignment - 1);
|
1996-12-08 08:01:13 +00:00
|
|
|
h->chunk_limit = chunk->limit
|
2014-06-23 15:53:30 +00:00
|
|
|
= (char *) chunk + h->chunk_size;
|
1996-12-08 08:01:13 +00:00
|
|
|
chunk->prev = 0;
|
|
|
|
/* The initial chunk now contains no empty object. */
|
|
|
|
h->maybe_empty_object = 0;
|
update from main archive 961211
Thu Dec 12 03:32:21 1996 Ulrich Drepper <drepper@cygnus.com>
* libio/_G_config.h: Add definition of _G_int16_t, _G_int32_t,
_G_uint16_t, _G_uin32_t, _G_HAVE_BOOL, _G_HAVE_MMAP, and
_G_ARGS.
Change libio buffer handling to allocate internal buffers using
mmap if possible.
* libio/filedoalloc.c (_IO_file_doallocate): Change call to
ALLOC_BUF.
* libio/genops.c (_IO_setb, _IO_default_finish): Change call
to FREE_BUF.
(_IO_default_doallocate): Change call to ALLOC_BUF.
* libio/libioP.h: Change definition of ALLOC_BUF and FREE_BUF
to use mmap/munmap when possible.
* libio/memstream.c: Don't use ALLOC_BUF, but directly malloc.
* libio/vasprintf.c: Likewise.
Patch by HJ Lu.
* libio/libio.h: Define NULL as __null only for gcc-2.8 and up.
* libio/libioP.h: Likewise.
* libio/fileops.c (_IO_file_read, _IO_file_write): Don't
restart syscall when EINTR was returned. Necessary for POSIX.1.
* libio/strops.c (_IO_str_overflow): Add cast to prevent warning.
* new-malloc/malloc.c (heap_trim): Correctly place parentheses to
prevent warnings.
* nis/Makefile: Remove rules for bsd-tools which are not part
of glibc.
Patch by Thorsten Kukuk.
* nis/ypclnt.c: Add prototype for xdr_free.
Add const to first parameter for __yp_bind.
* nis/nss_compat/compat-pwd.c (getpwent_next_netgr, getpwent_next_nis,
getpwent_next_file): Variable `p2len' must have type size_t.
* nis/nss_nis/nis-alias.c: Add casts to prevent warnings.
* nis/nss_nis/nis-ethers.c: Likewise.
* nis/nss_nis/nis-grp.c: Likewise.
* nis/nss_nis/nis-hosts.c: Likewise.
* nis/nss_nis/nis-network.c: Likewise.
* nis/nss_nis/nis-proto.c: Likewise.
* nis/nss_nis/nis-pwd.c: Likewise.
* nis/nss_nis/nis-rpc.c: Likewise.
* nis/nss_nis/nis-service.c: Likewise.
* nis/nss_nis/nis-spwd.c: Likewise.
* nis/rpcsvc/yp_prot.h (ypreq_key): Change type of members to
`const char *'.
(ypmaplist): Change member names to `map' and `next' and provide
#defines for old names.
Patch by Thorsten Kukuk.
* nss/nss_files/files-parse.c (parse_line, parse_list): Change
type for `datalen' parameter to size_t.
* shsdow/lckpwdf.c: Use fcntl forlocking, not flock.
* stdio-common/printf.c [USE_IN_LIBIO]: Provide alias _IO_printf
for printf.
* stdio-common/sscanf.c [USE_IN_LIBIO]: Provide alias _IO_sscanf
for sscanf.
Patch by HJ Lu.
* stdio-common/tmpfile.c: Update copyright.
* stdio-common/vfscanf.c: Correctly handle EINTR error from fgetc
function.
Don't eat white space for `C' format.
* stdlib/tst-strtol.c [~0UL != 0xffffffff]: Fix typo in test data.
* sysdeps/generic/abort.c: Update copyright. De-ANSI-declfy.
* sysdeps/i386/abort.c: Removed. This version does not use
signal SIGABRT.
* sysdeps/i386/fpu/__math.h: Define __NO_MATH_INLINES if not using
gcc-2.8 or up.
Patch by HJ Lu.
* sysdeps/posix/tempname.c: Test for error but EEXIST after open
call. If EMFILE, ENFILE, or EINTR return with error.
Wed Dec 11 14:43:52 1996 Ulrich Drepper <drepper@cygnus.com>
* gnu-versions.h: Set _GNU_OBSTACK_INTERFACE_VERSION back to 1.
We are compatible again.
* new-malloc/obstack.h (struct obstack): Add back alloc_failed bit
even though it is not used.
* malloc/obstack.h: Likewise.
* new-malloc/obstack.c (_obstack_begin, _obstack_begin_1): Initialize
alloc_failed bit to 0.
* time/strftime.c: Extend for Emacs' needs. Recognize field width,
%P format and `0' modifier.
Tue Dec 10 21:20:44 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* Makerules (make-link): Don't discard exit codes of intermediate
commands. Always use rellns-sh if symbolic links are available.
Tue Dec 10 20:09:51 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/netinet/in.h: Enclose #include
<linux/in.h> in __BEGIN_DECLS/__END_DECLS to avoid linkage
conflict of ntohs etc. in <asm/byteorder.h>.
1996-12-12 03:24:48 +00:00
|
|
|
h->alloc_failed = 0;
|
1996-12-08 08:01:13 +00:00
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Allocate a new current chunk for the obstack *H
|
|
|
|
on the assumption that LENGTH bytes need to be added
|
|
|
|
to the current object, or a new object of length LENGTH allocated.
|
|
|
|
Copies any partial object from the end of the old chunk
|
|
|
|
to the beginning of the new one. */
|
|
|
|
|
|
|
|
void
|
2004-01-28 03:54:31 +00:00
|
|
|
_obstack_newchunk (struct obstack *h, int length)
|
1996-12-08 08:01:13 +00:00
|
|
|
{
|
2013-06-07 22:24:35 +00:00
|
|
|
struct _obstack_chunk *old_chunk = h->chunk;
|
|
|
|
struct _obstack_chunk *new_chunk;
|
2014-01-02 08:38:18 +00:00
|
|
|
long new_size;
|
2013-06-07 22:24:35 +00:00
|
|
|
long obj_size = h->next_free - h->object_base;
|
|
|
|
long i;
|
1997-08-29 01:19:12 +00:00
|
|
|
long already;
|
2000-10-24 08:23:06 +00:00
|
|
|
char *object_base;
|
1996-12-08 08:01:13 +00:00
|
|
|
|
|
|
|
/* Compute size for new chunk. */
|
2000-10-24 08:23:06 +00:00
|
|
|
new_size = (obj_size + length) + (obj_size >> 3) + h->alignment_mask + 100;
|
1996-12-08 08:01:13 +00:00
|
|
|
if (new_size < h->chunk_size)
|
|
|
|
new_size = h->chunk_size;
|
|
|
|
|
|
|
|
/* Allocate and initialize the new chunk. */
|
|
|
|
new_chunk = CALL_CHUNKFUN (h, new_size);
|
|
|
|
if (!new_chunk)
|
2014-01-02 08:38:18 +00:00
|
|
|
(*obstack_alloc_failed_handler)();
|
1996-12-08 08:01:13 +00:00
|
|
|
h->chunk = new_chunk;
|
|
|
|
new_chunk->prev = old_chunk;
|
|
|
|
new_chunk->limit = h->chunk_limit = (char *) new_chunk + new_size;
|
|
|
|
|
2000-10-24 08:23:06 +00:00
|
|
|
/* Compute an aligned object_base in the new chunk */
|
|
|
|
object_base =
|
[BZ #321]
2005-10-14 Paul Eggert <eggert@cs.ucla.edu>
* malloc/obstack.c: Fix old comments. Update FSF snail mail address.
* malloc/obstack.h: Likewise.
[BZ #321]
Fix portability bugs encountered when porting to Itanium.
* malloc/obstack.h (obstack_empty_p, obstack_finish): Do not
assume that the "contents" member is suitably aligned. It is
not, for some hosts and alignments: e.g., Itanium, long-double.
* malloc/obstack.c (_obstack_begin, _obstack_begin_1,
_obstack_newchunk): Likewise.
* malloc/obstack.c: Include <stddef.h>, for size_t.
Include <inttypes.h>, <stdint.h> if needed and available.
(DEFAULT_ALIGNMENT): Now an enum constant, not a macro.
Use C89 offsetof rather than K&R trick.
Use the maximum alignment of uintmax_t, long double, void *
rather than the alignment of double.
(union fooround): Use uintmax_t, long double, void * members
rather than just long and double.
[BZ #321]
Fix portability bugs encountered when porting to the IBM iSeries,
where pointers are 256 bits wide and no integers are that wide.
* malloc/obstack.h (__PTR_TO_INT, __INT_TO_PTR): Remove.
All uses changed to:
(__BPTR_ALIGN, __PTR_ALIGN): New macros.
(struct _obstack_chunk.temp): Change from int to a union
of pointer and int. All uses changed.
[BZ #321]
* malloc/obstack.c (print_and_abort) [!_LIBC]:
Call fprintf (stderr, ...), not __fxprintf (NULL, ...).
[_LIBC && USE_IN_LIBIO]: Don't include <wchar.h>; no longer needed.
2006-01-11 05:43:11 +00:00
|
|
|
__PTR_ALIGN ((char *) new_chunk, new_chunk->contents, h->alignment_mask);
|
2000-10-24 08:23:06 +00:00
|
|
|
|
1996-12-08 08:01:13 +00:00
|
|
|
/* Move the existing object to the new chunk.
|
|
|
|
Word at a time is fast and is safe if the object
|
|
|
|
is sufficiently aligned. */
|
|
|
|
if (h->alignment_mask + 1 >= DEFAULT_ALIGNMENT)
|
|
|
|
{
|
|
|
|
for (i = obj_size / sizeof (COPYING_UNIT) - 1;
|
2014-06-23 15:53:30 +00:00
|
|
|
i >= 0; i--)
|
|
|
|
((COPYING_UNIT *) object_base)[i]
|
|
|
|
= ((COPYING_UNIT *) h->object_base)[i];
|
1996-12-08 08:01:13 +00:00
|
|
|
/* We used to copy the odd few remaining bytes as one extra COPYING_UNIT,
|
2014-06-23 15:53:30 +00:00
|
|
|
but that can cross a page boundary on a machine
|
|
|
|
which does not do strict alignment for COPYING_UNITS. */
|
1996-12-08 08:01:13 +00:00
|
|
|
already = obj_size / sizeof (COPYING_UNIT) * sizeof (COPYING_UNIT);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
already = 0;
|
|
|
|
/* Copy remaining bytes one by one. */
|
|
|
|
for (i = already; i < obj_size; i++)
|
2000-10-24 08:23:06 +00:00
|
|
|
object_base[i] = h->object_base[i];
|
1996-12-08 08:01:13 +00:00
|
|
|
|
|
|
|
/* If the object just copied was the only data in OLD_CHUNK,
|
|
|
|
free that chunk and remove it from the chain.
|
|
|
|
But not if that chunk might contain an empty object. */
|
2014-01-02 08:38:18 +00:00
|
|
|
if (!h->maybe_empty_object
|
[BZ #321]
2005-10-14 Paul Eggert <eggert@cs.ucla.edu>
* malloc/obstack.c: Fix old comments. Update FSF snail mail address.
* malloc/obstack.h: Likewise.
[BZ #321]
Fix portability bugs encountered when porting to Itanium.
* malloc/obstack.h (obstack_empty_p, obstack_finish): Do not
assume that the "contents" member is suitably aligned. It is
not, for some hosts and alignments: e.g., Itanium, long-double.
* malloc/obstack.c (_obstack_begin, _obstack_begin_1,
_obstack_newchunk): Likewise.
* malloc/obstack.c: Include <stddef.h>, for size_t.
Include <inttypes.h>, <stdint.h> if needed and available.
(DEFAULT_ALIGNMENT): Now an enum constant, not a macro.
Use C89 offsetof rather than K&R trick.
Use the maximum alignment of uintmax_t, long double, void *
rather than the alignment of double.
(union fooround): Use uintmax_t, long double, void * members
rather than just long and double.
[BZ #321]
Fix portability bugs encountered when porting to the IBM iSeries,
where pointers are 256 bits wide and no integers are that wide.
* malloc/obstack.h (__PTR_TO_INT, __INT_TO_PTR): Remove.
All uses changed to:
(__BPTR_ALIGN, __PTR_ALIGN): New macros.
(struct _obstack_chunk.temp): Change from int to a union
of pointer and int. All uses changed.
[BZ #321]
* malloc/obstack.c (print_and_abort) [!_LIBC]:
Call fprintf (stderr, ...), not __fxprintf (NULL, ...).
[_LIBC && USE_IN_LIBIO]: Don't include <wchar.h>; no longer needed.
2006-01-11 05:43:11 +00:00
|
|
|
&& (h->object_base
|
2014-06-23 15:53:30 +00:00
|
|
|
== __PTR_ALIGN ((char *) old_chunk, old_chunk->contents,
|
|
|
|
h->alignment_mask)))
|
1996-12-08 08:01:13 +00:00
|
|
|
{
|
|
|
|
new_chunk->prev = old_chunk->prev;
|
|
|
|
CALL_FREEFUN (h, old_chunk);
|
|
|
|
}
|
|
|
|
|
2000-10-24 08:23:06 +00:00
|
|
|
h->object_base = object_base;
|
1996-12-08 08:01:13 +00:00
|
|
|
h->next_free = h->object_base + obj_size;
|
|
|
|
/* The new chunk certainly contains no empty object yet. */
|
|
|
|
h->maybe_empty_object = 0;
|
|
|
|
}
|
2004-01-28 03:54:31 +00:00
|
|
|
# ifdef _LIBC
|
Update.
2002-08-04 Ulrich Drepper <drepper@redhat.com>
* elf/dl-addr.c (_dl_addr): Add libc_hidden_def.
* elf/dl-close.c (_dl_close): Add libc_hidden_def.
* elf/dl-open.c (_dl_open): Add libc_hidden_def.
* include/dlfcn.h: Add libc_hidden_proto for _dl_addr, _dl_open,
_dl_close.
* include/libio.h: Add libc_hidden_proto for __underflow, __wuflow,
__wunderflow.
* libio/genops.c (__underflow): Add libc_hidden_def.
* libio/wgenops.c (__wuflow): Likewise.
(__wunderflow): Likewise.
* include/obstack.h: Add libc_hidden_proto for _obstack_newchunk.
* malloc/obstack.c (_obstack_newchunk): Add libc_hidden_def.
* include/stdio.h: Add libc_hidden_proto for __vfscanf.
* stdio-common/vfscanf.c (__vfscanf): Add libc_hidden_def.
* include/string.h: Add libc_hidden_proto for __strverscmp.
* string/strverscmp.c (__strverscmp): Add libc_hidden_def.
* include/unistd.h: Add libc_hidden_proto for __sysconf.
* sysdeps/generic/sysconf.c (__sysconf): Add libc_hidden_def.
* sysdeps/posix/sysconf.c: Likewise.
* sysdeps/unix/sysv/irix4/sysconf.c: Likewise.
* sysdeps/unix/sysv/sysv4/sysconf.c: Likewise.
* include/wctype.h: Use libc_hidden_proto for __iswctype, __iswalnum_l,
__iswalpha_l, __iswblank_l, __iswcntrl_l, __iswdigit_l, __iswlower_l,
__iswgraph_l, __iswprint_l, __iswpunct_l, __iswspace_l, __iswupper_l,
__iswxdigit_l, __towlower_l, __towupper_l.
* wcsmbs/wcstype.c (__iswctype): Use libc_hidden_def.
* wcsmbs/wcfuncs_l.c: Use libc_hidden_def for all functions.
* include/sys/wait.h: Add libc_hidden_proto for __xmknod.
* sysdeps/generic/xmknod.c (__xmknod): Add libc_hidden_def.
* sysdeps/mach/hurd/xmknod.c: Likewise.
* sysdeps/unix/xmknod.c: Likewise.
* sysdeps/unix/sysv/linux/xmknod.c: Likewise.
* sysdeps/unix/sysv/linux/alpha/xmknod.c: Likewise.
* sysdeps/unix/sysv/linux/mips/xmknod.c: Likewise.
* sunrpc/svc.c: Add missing INTUSE for _authenticate.
2002-08-04 09:27:27 +00:00
|
|
|
libc_hidden_def (_obstack_newchunk)
|
2004-01-28 03:54:31 +00:00
|
|
|
# endif
|
1996-12-08 08:01:13 +00:00
|
|
|
|
|
|
|
/* Return nonzero if object OBJ has been allocated from obstack H.
|
|
|
|
This is here for debugging.
|
|
|
|
If you use it in a program, you are probably losing. */
|
|
|
|
|
|
|
|
/* Suppress -Wmissing-prototypes warning. We don't want to declare this in
|
|
|
|
obstack.h because it is just for debugging. */
|
2014-06-23 15:53:30 +00:00
|
|
|
int _obstack_allocated_p (struct obstack *h, void *obj) __attribute_pure__;
|
1996-12-08 08:01:13 +00:00
|
|
|
|
|
|
|
int
|
2004-01-28 03:54:31 +00:00
|
|
|
_obstack_allocated_p (struct obstack *h, void *obj)
|
1996-12-08 08:01:13 +00:00
|
|
|
{
|
2014-01-02 08:38:18 +00:00
|
|
|
struct _obstack_chunk *lp; /* below addr of any objects in this chunk */
|
|
|
|
struct _obstack_chunk *plp; /* point to previous chunk if any */
|
1996-12-08 08:01:13 +00:00
|
|
|
|
|
|
|
lp = (h)->chunk;
|
|
|
|
/* We use >= rather than > since the object cannot be exactly at
|
|
|
|
the beginning of the chunk but might be an empty object exactly
|
|
|
|
at the end of an adjacent chunk. */
|
2004-01-28 03:54:31 +00:00
|
|
|
while (lp != 0 && ((void *) lp >= obj || (void *) (lp)->limit < obj))
|
1996-12-08 08:01:13 +00:00
|
|
|
{
|
|
|
|
plp = lp->prev;
|
|
|
|
lp = plp;
|
|
|
|
}
|
|
|
|
return lp != 0;
|
|
|
|
}
|
2014-01-02 08:38:18 +00:00
|
|
|
|
1996-12-08 08:01:13 +00:00
|
|
|
/* Free objects in obstack H, including OBJ and everything allocate
|
|
|
|
more recently than OBJ. If OBJ is zero, free everything in H. */
|
|
|
|
|
2001-08-23 23:36:47 +00:00
|
|
|
# undef obstack_free
|
1996-12-08 08:01:13 +00:00
|
|
|
|
|
|
|
void
|
2014-06-23 15:53:30 +00:00
|
|
|
__obstack_free (struct obstack *h, void *obj)
|
1996-12-08 08:01:13 +00:00
|
|
|
{
|
2014-01-02 08:38:18 +00:00
|
|
|
struct _obstack_chunk *lp; /* below addr of any objects in this chunk */
|
|
|
|
struct _obstack_chunk *plp; /* point to previous chunk if any */
|
1996-12-08 08:01:13 +00:00
|
|
|
|
|
|
|
lp = h->chunk;
|
|
|
|
/* We use >= because there cannot be an object at the beginning of a chunk.
|
|
|
|
But there can be an empty object at that address
|
|
|
|
at the end of another chunk. */
|
2004-01-28 03:54:31 +00:00
|
|
|
while (lp != 0 && ((void *) lp >= obj || (void *) (lp)->limit < obj))
|
1996-12-08 08:01:13 +00:00
|
|
|
{
|
|
|
|
plp = lp->prev;
|
|
|
|
CALL_FREEFUN (h, lp);
|
|
|
|
lp = plp;
|
|
|
|
/* If we switch chunks, we can't tell whether the new current
|
2014-06-23 15:53:30 +00:00
|
|
|
chunk contains an empty object, so assume that it may. */
|
1996-12-08 08:01:13 +00:00
|
|
|
h->maybe_empty_object = 1;
|
|
|
|
}
|
|
|
|
if (lp)
|
|
|
|
{
|
|
|
|
h->object_base = h->next_free = (char *) (obj);
|
|
|
|
h->chunk_limit = lp->limit;
|
|
|
|
h->chunk = lp;
|
|
|
|
}
|
|
|
|
else if (obj != 0)
|
|
|
|
/* obj is not in any of the chunks! */
|
|
|
|
abort ();
|
|
|
|
}
|
|
|
|
|
2004-01-28 03:54:31 +00:00
|
|
|
# ifdef _LIBC
|
|
|
|
/* Older versions of libc used a function _obstack_free intended to be
|
|
|
|
called by non-GCC compilers. */
|
|
|
|
strong_alias (obstack_free, _obstack_free)
|
|
|
|
# endif
|
2014-01-02 08:38:18 +00:00
|
|
|
|
1996-12-08 08:01:13 +00:00
|
|
|
int
|
2004-01-28 03:54:31 +00:00
|
|
|
_obstack_memory_used (struct obstack *h)
|
1996-12-08 08:01:13 +00:00
|
|
|
{
|
2014-01-02 08:38:18 +00:00
|
|
|
struct _obstack_chunk *lp;
|
2013-06-07 22:24:35 +00:00
|
|
|
int nbytes = 0;
|
1996-12-08 08:01:13 +00:00
|
|
|
|
|
|
|
for (lp = h->chunk; lp != 0; lp = lp->prev)
|
|
|
|
{
|
|
|
|
nbytes += lp->limit - (char *) lp;
|
|
|
|
}
|
|
|
|
return nbytes;
|
|
|
|
}
|
2014-01-02 08:38:18 +00:00
|
|
|
|
1996-12-08 08:01:13 +00:00
|
|
|
/* Define the error handler. */
|
2004-01-28 03:54:31 +00:00
|
|
|
# ifdef _LIBC
|
|
|
|
# include <libintl.h>
|
|
|
|
# else
|
|
|
|
# include "gettext.h"
|
|
|
|
# endif
|
2001-08-23 23:36:47 +00:00
|
|
|
# ifndef _
|
2004-01-28 03:54:31 +00:00
|
|
|
# define _(msgid) gettext (msgid)
|
1996-12-08 08:01:13 +00:00
|
|
|
# endif
|
2004-01-28 03:54:31 +00:00
|
|
|
|
2002-08-04 23:32:14 +00:00
|
|
|
# ifdef _LIBC
|
2001-08-23 23:36:47 +00:00
|
|
|
# include <libio/iolibio.h>
|
|
|
|
# endif
|
1996-12-08 08:01:13 +00:00
|
|
|
|
2014-06-23 15:53:30 +00:00
|
|
|
static _Noreturn void
|
2004-01-28 03:54:31 +00:00
|
|
|
print_and_abort (void)
|
1996-12-08 08:01:13 +00:00
|
|
|
{
|
2001-08-22 16:06:53 +00:00
|
|
|
/* Don't change any of these strings. Yes, it would be possible to add
|
|
|
|
the newline to the string and use fputs or so. But this must not
|
|
|
|
happen because the "memory exhausted" message appears in other places
|
|
|
|
like this and the translation should be reused instead of creating
|
|
|
|
a very similar string which requires a separate translation. */
|
[BZ #321]
2005-10-14 Paul Eggert <eggert@cs.ucla.edu>
* malloc/obstack.c: Fix old comments. Update FSF snail mail address.
* malloc/obstack.h: Likewise.
[BZ #321]
Fix portability bugs encountered when porting to Itanium.
* malloc/obstack.h (obstack_empty_p, obstack_finish): Do not
assume that the "contents" member is suitably aligned. It is
not, for some hosts and alignments: e.g., Itanium, long-double.
* malloc/obstack.c (_obstack_begin, _obstack_begin_1,
_obstack_newchunk): Likewise.
* malloc/obstack.c: Include <stddef.h>, for size_t.
Include <inttypes.h>, <stdint.h> if needed and available.
(DEFAULT_ALIGNMENT): Now an enum constant, not a macro.
Use C89 offsetof rather than K&R trick.
Use the maximum alignment of uintmax_t, long double, void *
rather than the alignment of double.
(union fooround): Use uintmax_t, long double, void * members
rather than just long and double.
[BZ #321]
Fix portability bugs encountered when porting to the IBM iSeries,
where pointers are 256 bits wide and no integers are that wide.
* malloc/obstack.h (__PTR_TO_INT, __INT_TO_PTR): Remove.
All uses changed to:
(__BPTR_ALIGN, __PTR_ALIGN): New macros.
(struct _obstack_chunk.temp): Change from int to a union
of pointer and int. All uses changed.
[BZ #321]
* malloc/obstack.c (print_and_abort) [!_LIBC]:
Call fprintf (stderr, ...), not __fxprintf (NULL, ...).
[_LIBC && USE_IN_LIBIO]: Don't include <wchar.h>; no longer needed.
2006-01-11 05:43:11 +00:00
|
|
|
# ifdef _LIBC
|
2014-06-23 15:53:30 +00:00
|
|
|
(void) __fxprintf (NULL, "%s\n", _("memory exhausted"));
|
[BZ #321]
2005-10-14 Paul Eggert <eggert@cs.ucla.edu>
* malloc/obstack.c: Fix old comments. Update FSF snail mail address.
* malloc/obstack.h: Likewise.
[BZ #321]
Fix portability bugs encountered when porting to Itanium.
* malloc/obstack.h (obstack_empty_p, obstack_finish): Do not
assume that the "contents" member is suitably aligned. It is
not, for some hosts and alignments: e.g., Itanium, long-double.
* malloc/obstack.c (_obstack_begin, _obstack_begin_1,
_obstack_newchunk): Likewise.
* malloc/obstack.c: Include <stddef.h>, for size_t.
Include <inttypes.h>, <stdint.h> if needed and available.
(DEFAULT_ALIGNMENT): Now an enum constant, not a macro.
Use C89 offsetof rather than K&R trick.
Use the maximum alignment of uintmax_t, long double, void *
rather than the alignment of double.
(union fooround): Use uintmax_t, long double, void * members
rather than just long and double.
[BZ #321]
Fix portability bugs encountered when porting to the IBM iSeries,
where pointers are 256 bits wide and no integers are that wide.
* malloc/obstack.h (__PTR_TO_INT, __INT_TO_PTR): Remove.
All uses changed to:
(__BPTR_ALIGN, __PTR_ALIGN): New macros.
(struct _obstack_chunk.temp): Change from int to a union
of pointer and int. All uses changed.
[BZ #321]
* malloc/obstack.c (print_and_abort) [!_LIBC]:
Call fprintf (stderr, ...), not __fxprintf (NULL, ...).
[_LIBC && USE_IN_LIBIO]: Don't include <wchar.h>; no longer needed.
2006-01-11 05:43:11 +00:00
|
|
|
# else
|
2014-06-23 15:53:30 +00:00
|
|
|
fprintf (stderr, "%s\n", _("memory exhausted"));
|
[BZ #321]
2005-10-14 Paul Eggert <eggert@cs.ucla.edu>
* malloc/obstack.c: Fix old comments. Update FSF snail mail address.
* malloc/obstack.h: Likewise.
[BZ #321]
Fix portability bugs encountered when porting to Itanium.
* malloc/obstack.h (obstack_empty_p, obstack_finish): Do not
assume that the "contents" member is suitably aligned. It is
not, for some hosts and alignments: e.g., Itanium, long-double.
* malloc/obstack.c (_obstack_begin, _obstack_begin_1,
_obstack_newchunk): Likewise.
* malloc/obstack.c: Include <stddef.h>, for size_t.
Include <inttypes.h>, <stdint.h> if needed and available.
(DEFAULT_ALIGNMENT): Now an enum constant, not a macro.
Use C89 offsetof rather than K&R trick.
Use the maximum alignment of uintmax_t, long double, void *
rather than the alignment of double.
(union fooround): Use uintmax_t, long double, void * members
rather than just long and double.
[BZ #321]
Fix portability bugs encountered when porting to the IBM iSeries,
where pointers are 256 bits wide and no integers are that wide.
* malloc/obstack.h (__PTR_TO_INT, __INT_TO_PTR): Remove.
All uses changed to:
(__BPTR_ALIGN, __PTR_ALIGN): New macros.
(struct _obstack_chunk.temp): Change from int to a union
of pointer and int. All uses changed.
[BZ #321]
* malloc/obstack.c (print_and_abort) [!_LIBC]:
Call fprintf (stderr, ...), not __fxprintf (NULL, ...).
[_LIBC && USE_IN_LIBIO]: Don't include <wchar.h>; no longer needed.
2006-01-11 05:43:11 +00:00
|
|
|
# endif
|
1996-12-08 08:01:13 +00:00
|
|
|
exit (obstack_exit_failure);
|
|
|
|
}
|
2014-06-23 15:53:30 +00:00
|
|
|
|
2014-01-02 08:38:18 +00:00
|
|
|
#endif /* !ELIDE_CODE */
|