about summary refs log tree commit diff
path: root/malloc
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>1997-01-28 03:59:29 +0000
committerUlrich Drepper <drepper@redhat.com>1997-01-28 03:59:29 +0000
commit831372e7c1bb907f9f2c3d78909b15717b8ac095 (patch)
treecaaa80503af0be017a6a88df30dcf295cdc2e63c /malloc
parentbdf289b22254f7eb10989ccd933cfd9ee7b8da92 (diff)
downloadglibc-831372e7c1bb907f9f2c3d78909b15717b8ac095.tar.gz
glibc-831372e7c1bb907f9f2c3d78909b15717b8ac095.tar.xz
glibc-831372e7c1bb907f9f2c3d78909b15717b8ac095.zip
update from main archive 970127 cvs/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/Makefile3
-rw-r--r--malloc/malloc.c37
-rw-r--r--malloc/malloc.h9
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