From 831372e7c1bb907f9f2c3d78909b15717b8ac095 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Tue, 28 Jan 1997 03:59:29 +0000 Subject: update from main archive 970127 1997-01-28 04:23 Ulrich Drepper * 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 * sysdeps/unix/sysv/linux/i386/clone.S: Correct handling of new 1997-01-27 17:34 Thorsten Kukuk * 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 * 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 . * 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 * 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 * 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 * sysdeps/unix/sysv/linux/alpha/termbits.h: Protect against multiple inclusion. See ChangeLog.6 for earlier changes. --- malloc/Makefile | 3 ++- malloc/malloc.c | 37 +++++++++++++++++++++++++++---------- malloc/malloc.h | 9 +++++++-- 3 files changed, 36 insertions(+), 13 deletions(-) (limited to 'malloc') 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 -- cgit 1.4.1