diff options
author | Ulrich Drepper <drepper@redhat.com> | 1997-01-28 03:59:29 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 1997-01-28 03:59:29 +0000 |
commit | 831372e7c1bb907f9f2c3d78909b15717b8ac095 (patch) | |
tree | caaa80503af0be017a6a88df30dcf295cdc2e63c /malloc | |
parent | bdf289b22254f7eb10989ccd933cfd9ee7b8da92 (diff) | |
download | glibc-831372e7c1bb907f9f2c3d78909b15717b8ac095.tar.gz |
update from main archive 970127cvs/libc-970128
1997-01-28 04:23 Ulrich Drepper <drepper@cygnus.com>
* version.h (VERSION): Bump to 2.0.1.
* posix/getopt.c: Handle another problem introduced by the
nonoption_flags array. We must be able to work with reordered
argv arrays. Reported by Andreas Schwab.
1997-01-28 02:38 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/unix/sysv/linux/i386/clone.S: Correct handling of new
1997-01-27 17:34 Thorsten Kukuk <kukuk@weber.uni-paderborn.de>
* nis/rpcsvc/yp_prot.h: Correct definitions and types in file so
that it works with yp.h.
1997-01-27 13:28 Ulrich Drepper <drepper@cygnus.com>
* malloc/malloc.h (__malloc_initialized) [_LIBC]: Define as
__libc_malloc_initialized so that this variable is not shared with
other users of GNU malloc.
Suggested by Martin von Loewis <martin@mira.isdn.cs.tu-berlin.de>.
* mcheck.h: Correct typo. Use malloc/ instead of new-malloc/.
* sysdeps/i386/Makefile (CFLAGS-dl-load.c, CFLAGS-dl-reloc.c): New
variables to prevent warnings.
* sysdeps/i386/dl-machine.h (fixup): Add prototype and declare
using attribute regparm.
(ELF_MACHINE_RUNTIME_TRAMPOLINE): Rewrite so that no register
is changed by the resolver code.
1997-01-14 14:20 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* malloc/malloc.c (weak_variable): Define.
(__malloc_initialize_hook, __free_hook, __malloc_hook, __realloc_hook,
__memalign_hook): Make them weak definitions.
1997-01-26 11:35 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/getdents.c: Don't write beyond buffer
limits, correctly take structure padding into account, use correct
offset when resetting the stream, change heuristic to assume an
average name length of 14 characters.
1997-01-25 18:06 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/alpha/termbits.h: Protect against multiple
inclusion.
See ChangeLog.6 for earlier changes.
Diffstat (limited to 'malloc')
-rw-r--r-- | malloc/Makefile | 3 | ||||
-rw-r--r-- | malloc/malloc.c | 37 | ||||
-rw-r--r-- | malloc/malloc.h | 9 |
3 files changed, 36 insertions, 13 deletions
diff --git a/malloc/Makefile b/malloc/Makefile index 33502a9084..b43ce136cd 100644 --- a/malloc/Makefile +++ b/malloc/Makefile @@ -50,4 +50,5 @@ $(objpfx)libmcheck.a: $(objpfx)mcheck-init.o lib: $(objpfx)libmcheck.a -CPPFLAGS-malloc.o += -DMALLOC_DEBUG +# Uncomment this for test releases. For public releases it is too expensive. +#CPPFLAGS-malloc.o += -DMALLOC_DEBUG diff --git a/malloc/malloc.c b/malloc/malloc.c index 50bba6b446..8ec5f85800 100644 --- a/malloc/malloc.c +++ b/malloc/malloc.c @@ -647,7 +647,7 @@ do { \ might set to a value close to the average size of a process (program) running on your system. Releasing this much memory would allow such a process to run in memory. Generally, it's - worth it to tune for trimming rather tham memory mapping when a + worth it to tune for trimming rather than memory mapping when a program undergoes phases where several large chunks are allocated and released in ways that can reuse each other's storage, perhaps mixed with phases where there are no such @@ -1486,6 +1486,13 @@ static unsigned long max_mmapped_mem = 0; +#ifndef _LIBC +#define weak_variable +#else +/* In GNU libc we want the hook variables to be weak definitions to + avoid a problem with Emacs. */ +#define weak_variable weak_function +#endif /* Already initialized? */ int __malloc_initialized = 0; @@ -1533,12 +1540,20 @@ ptmalloc_init __MALLOC_P((void)) tsd_setspecific(arena_key, (Void_t *)&main_arena); #endif #if defined(_LIBC) || defined(MALLOC_HOOKS) + if((s = getenv("MALLOC_TRIM_THRESHOLD_"))) + mALLOPt(M_TRIM_THRESHOLD, atoi(s)); + if((s = getenv("MALLOC_TOP_PAD_"))) + mALLOPt(M_TOP_PAD, atoi(s)); + if((s = getenv("MALLOC_MMAP_THRESHOLD_"))) + mALLOPt(M_MMAP_THRESHOLD, atoi(s)); + if((s = getenv("MALLOC_MMAP_MAX_"))) + mALLOPt(M_MMAP_MAX, atoi(s)); s = getenv("MALLOC_CHECK_"); __malloc_hook = save_malloc_hook; __free_hook = save_free_hook; if(s) { - if(s[0]) mallopt(M_CHECK_ACTION, (int)(s[0] - '0')); - malloc_check_init(); + if(s[0]) mALLOPt(M_CHECK_ACTION, (int)(s[0] - '0')); + __malloc_check_init(); } if(__malloc_initialize_hook != NULL) (*__malloc_initialize_hook)(); @@ -1592,18 +1607,18 @@ memalign_hook_ini(sz, alignment) size_t sz; size_t alignment; return mEMALIGn(sz, alignment); } -void (*__malloc_initialize_hook) __MALLOC_P ((void)) = NULL; -void (*__free_hook) __MALLOC_P ((__malloc_ptr_t __ptr)) = NULL; -__malloc_ptr_t (*__malloc_hook) +void weak_variable (*__malloc_initialize_hook) __MALLOC_P ((void)) = NULL; +void weak_variable (*__free_hook) __MALLOC_P ((__malloc_ptr_t __ptr)) = NULL; +__malloc_ptr_t weak_variable (*__malloc_hook) __MALLOC_P ((size_t __size)) = malloc_hook_ini; -__malloc_ptr_t (*__realloc_hook) +__malloc_ptr_t weak_variable (*__realloc_hook) __MALLOC_P ((__malloc_ptr_t __ptr, size_t __size)) = realloc_hook_ini; -__malloc_ptr_t (*__memalign_hook) +__malloc_ptr_t weak_variable (*__memalign_hook) __MALLOC_P ((size_t __size, size_t __alignment)) = memalign_hook_ini; /* Activate a standard set of debugging hooks. */ void -malloc_check_init() +__malloc_check_init() { __malloc_hook = malloc_check; __free_hook = free_check; @@ -3265,10 +3280,12 @@ Void_t* cALLOc(n, elem_size) size_t n; size_t elem_size; if (__malloc_hook != NULL) { sz = n * elem_size; mem = (*__malloc_hook)(sz); + if(mem == 0) + return 0; #ifdef HAVE_MEMCPY memset(mem, 0, sz); #else - while(sz > 0) mem[--sz] = 0; /* rather inefficient */ + while(sz > 0) ((char*)mem)[--sz] = 0; /* rather inefficient */ #endif return mem; } diff --git a/malloc/malloc.h b/malloc/malloc.h index ddbc694491..5794f26663 100644 --- a/malloc/malloc.h +++ b/malloc/malloc.h @@ -1,5 +1,5 @@ /* Prototypes and definition for malloc implementation. - Copyright (C) 1996 Free Software Foundation, Inc. + Copyright (C) 1996, 1997 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -74,6 +74,11 @@ extern "C" { #endif /* Nonzero if the malloc is already initialized. */ +#ifdef _LIBC +/* In the GNU libc we rename the global variable + `__malloc_initialized' to `__libc_malloc_initialized'. */ +#define __malloc_initialized __libc_malloc_initialized +#endif extern int __malloc_initialized; /* Initialize global configuration. Not needed with GNU libc. */ @@ -178,7 +183,7 @@ extern __malloc_ptr_t (*__memalign_hook) __MALLOC_P ((size_t __size, size_t __alignment)); /* Activate a standard set of debugging hooks. */ -extern void malloc_check_init __MALLOC_P ((void)); +extern void __malloc_check_init __MALLOC_P ((void)); #endif |