diff -urN glibc-2.2.4.org/malloc/Makefile glibc-2.2.4/malloc/Makefile
--- glibc-2.2.4.org/malloc/Makefile Mon Jul 23 19:54:38 2001
+++ glibc-2.2.4/malloc/Makefile Fri Sep 28 20:50:18 2001
@@ -57,7 +57,7 @@
# The Perl script to analyze the output of the mtrace functions.
ifneq ($(PERL),no)
-install-bin = mtrace
+install-bin-script = mtrace
generated = mtrace
# The Perl script will print addresses and to do this nicely we must know
@@ -75,7 +75,7 @@
ifneq ($(cross-compiling),yes)
# If the gd library is available we build the `memusagestat' program.
ifneq ($(LIBGD),no)
-install-bin += memusagestat memusage
+install-bin = memusagestat memusage
generated += memusagestat memusage
extra-objs += memusagestat.o
endif
diff -urN glibc-2.2.4.org/malloc/malloc.c glibc-2.2.4/malloc/malloc.c
--- glibc-2.2.4.org/malloc/malloc.c Sun Aug 12 03:28:49 2001
+++ glibc-2.2.4/malloc/malloc.c Fri Sep 28 20:50:18 2001
@@ -19,7 +19,7 @@
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
-/* $Id$
+/* $Id$
This work is mainly derived from malloc-2.6.4 by Doug Lea
, which is available from:
@@ -1766,49 +1766,49 @@
secure = __libc_enable_secure;
#ifdef _LIBC
s = NULL;
- {
- char **runp = _environ;
- char *envline;
+ if (_environ != NULL)
+ {
+ char **runp = _environ;
+ char *envline;
- while (__builtin_expect ((envline = next_env_entry (&runp)) != NULL,
- 0))
- {
- size_t len = strcspn (envline, "=");
+ while (__builtin_expect ((envline = next_env_entry (&runp)) != NULL, 0))
+ {
+ size_t len = strcspn (envline, "=");
- if (envline[len] != '=')
- /* This is a "MALLOC_" variable at the end of the string
- without a '=' character. Ignore it since otherwise we
- will access invalid memory below. */
- continue;
-
- switch (len)
- {
- case 6:
- if (memcmp (envline, "CHECK_", 6) == 0)
- s = &envline[7];
- break;
- case 8:
- if (! secure && memcmp (envline, "TOP_PAD_", 8) == 0)
- mALLOPt(M_TOP_PAD, atoi(&envline[9]));
- break;
- case 9:
- if (! secure && memcmp (envline, "MMAP_MAX_", 9) == 0)
- mALLOPt(M_MMAP_MAX, atoi(&envline[10]));
- break;
- case 15:
- if (! secure)
- {
- if (memcmp (envline, "TRIM_THRESHOLD_", 15) == 0)
- mALLOPt(M_TRIM_THRESHOLD, atoi(&envline[16]));
- else if (memcmp (envline, "MMAP_THRESHOLD_", 15) == 0)
- mALLOPt(M_MMAP_THRESHOLD, atoi(&envline[16]));
- }
- break;
- default:
- break;
- }
- }
- }
+ if (envline[len] != '=')
+ /* This is a "MALLOC_" variable at the end of the string
+ without a '=' character. Ignore it since otherwise we
+ will access invalid memory below. */
+ continue;
+
+ switch (len)
+ {
+ case 6:
+ if (memcmp (envline, "CHECK_", 6) == 0)
+ s = &envline[7];
+ break;
+ case 8:
+ if (! secure && memcmp (envline, "TOP_PAD_", 8) == 0)
+ mALLOPt(M_TOP_PAD, atoi(&envline[9]));
+ break;
+ case 9:
+ if (! secure && memcmp (envline, "MMAP_MAX_", 9) == 0)
+ mALLOPt(M_MMAP_MAX, atoi(&envline[10]));
+ break;
+ case 15:
+ if (! secure)
+ {
+ if (memcmp (envline, "TRIM_THRESHOLD_", 15) == 0)
+ mALLOPt(M_TRIM_THRESHOLD, atoi(&envline[16]));
+ else if (memcmp (envline, "MMAP_THRESHOLD_", 15) == 0)
+ mALLOPt(M_MMAP_THRESHOLD, atoi(&envline[16]));
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ }
#else
if (! secure)
{
@@ -2788,13 +2788,15 @@
mchunkptr victim;
#if defined _LIBC || defined MALLOC_HOOKS
- if (__malloc_hook != NULL) {
+ __malloc_ptr_t (*hook) __MALLOC_PMT ((size_t, __const __malloc_ptr_t)) =
+ __malloc_hook;
+ if (hook != NULL) {
Void_t* result;
#if defined __GNUC__ && __GNUC__ >= 2
- result = (*__malloc_hook)(bytes, RETURN_ADDRESS (0));
+ result = (*hook)(bytes, RETURN_ADDRESS (0));
#else
- result = (*__malloc_hook)(bytes, NULL);
+ result = (*hook)(bytes, NULL);
#endif
return result;
}
@@ -3111,11 +3113,14 @@
mchunkptr p; /* chunk corresponding to mem */
#if defined _LIBC || defined MALLOC_HOOKS
- if (__free_hook != NULL) {
+ void (*hook) __MALLOC_PMT ((__malloc_ptr_t, __const __malloc_ptr_t)) =
+ __free_hook;
+
+ if (hook != NULL) {
#if defined __GNUC__ && __GNUC__ >= 2
- (*__free_hook)(mem, RETURN_ADDRESS (0));
+ (*hook)(mem, RETURN_ADDRESS (0));
#else
- (*__free_hook)(mem, NULL);
+ (*hook)(mem, NULL);
#endif
return;
}
@@ -3314,13 +3319,16 @@
mchunkptr newp; /* chunk to return */
#if defined _LIBC || defined MALLOC_HOOKS
- if (__realloc_hook != NULL) {
+ __malloc_ptr_t (*hook) __MALLOC_PMT ((__malloc_ptr_t, size_t,
+ __const __malloc_ptr_t)) =
+ __realloc_hook;
+ if (hook != NULL) {
Void_t* result;
#if defined __GNUC__ && __GNUC__ >= 2
- result = (*__realloc_hook)(oldmem, bytes, RETURN_ADDRESS (0));
+ result = (*hook)(oldmem, bytes, RETURN_ADDRESS (0));
#else
- result = (*__realloc_hook)(oldmem, bytes, NULL);
+ result = (*hook)(oldmem, bytes, NULL);
#endif
return result;
}
@@ -3596,13 +3604,16 @@
mchunkptr p;
#if defined _LIBC || defined MALLOC_HOOKS
- if (__memalign_hook != NULL) {
+ __malloc_ptr_t (*hook) __MALLOC_PMT ((size_t, size_t,
+ __const __malloc_ptr_t)) =
+ __memalign_hook;
+ if (hook != NULL) {
Void_t* result;
#if defined __GNUC__ && __GNUC__ >= 2
- result = (*__memalign_hook)(alignment, bytes, RETURN_ADDRESS (0));
+ result = (*hook)(alignment, bytes, RETURN_ADDRESS (0));
#else
- result = (*__memalign_hook)(alignment, bytes, NULL);
+ result = (*hook)(alignment, bytes, NULL);
#endif
return result;
}
@@ -3788,12 +3799,14 @@
Void_t* mem;
#if defined _LIBC || defined MALLOC_HOOKS
- if (__malloc_hook != NULL) {
+ __malloc_ptr_t (*hook) __MALLOC_PMT ((size_t, __const __malloc_ptr_t)) =
+ __malloc_hook;
+ if (hook != NULL) {
sz = n * elem_size;
#if defined __GNUC__ && __GNUC__ >= 2
- mem = (*__malloc_hook)(sz, RETURN_ADDRESS (0));
+ mem = (*hook)(sz, RETURN_ADDRESS (0));
#else
- mem = (*__malloc_hook)(sz, NULL);
+ mem = (*hook)(sz, NULL);
#endif
if(mem == 0)
return 0;
diff -urN glibc-2.2.4.org/malloc/memusage.c glibc-2.2.4/malloc/memusage.c
--- glibc-2.2.4.org/malloc/memusage.c Tue Aug 14 00:00:51 2001
+++ glibc-2.2.4/malloc/memusage.c Fri Sep 28 20:50:18 2001
@@ -181,6 +181,13 @@
const char *env = getenv ("MEMUSAGE_PROG_NAME");
size_t prog_len = strlen (__progname);
+ initialized = -1;
+ mallocp = (void *(*) (size_t)) dlsym (RTLD_NEXT, "malloc");
+ reallocp = (void *(*) (void *, size_t)) dlsym (RTLD_NEXT, "realloc");
+ callocp = (void *(*) (size_t, size_t)) dlsym (RTLD_NEXT, "calloc");
+ freep = (void (*) (void *)) dlsym (RTLD_NEXT, "free");
+ initialized = 1;
+
if (env != NULL)
{
/* Check for program name. */
@@ -198,13 +205,6 @@
if (!start_sp)
start_sp = GETSP ();
- initialized = -1;
- mallocp = (void *(*) (size_t)) dlsym (RTLD_NEXT, "malloc");
- reallocp = (void *(*) (void *, size_t)) dlsym (RTLD_NEXT, "realloc");
- callocp = (void *(*) (size_t, size_t)) dlsym (RTLD_NEXT, "calloc");
- freep = (void (*) (void *)) dlsym (RTLD_NEXT, "free");
- initialized = 1;
-
outname = getenv ("MEMUSAGE_OUTPUT");
if (outname != NULL && outname[0] != '\0'
&& (access (outname, R_OK | W_OK) == 0 || errno == ENOENT))
@@ -357,10 +357,13 @@
/* Keep track of number of calls. */
++calls[idx_realloc];
- /* Keep track of total memory consumption for `realloc'. */
- total[idx_realloc] += len;
- /* Keep track of total memory requirement. */
- grand_total += len;
+ if (len > old_len)
+ {
+ /* Keep track of total memory consumption for `realloc'. */
+ total[idx_realloc] += len - old_len;
+ /* Keep track of total memory requirement. */
+ grand_total += len - old_len;
+ }
/* Remember the size of the request. */
if (len < 65536)
++histogram[len / 16];
diff -urN glibc-2.2.4.org/malloc/memusage.sh glibc-2.2.4/malloc/memusage.sh
--- glibc-2.2.4.org/malloc/memusage.sh Mon Jul 23 19:54:39 2001
+++ glibc-2.2.4/malloc/memusage.sh Fri Sep 28 20:50:18 2001
@@ -219,6 +219,11 @@
add_env="$add_env MEMUSAGE_OUTPUT=$datafile"
fi
+# Set program name.
+if test -n "$progname"; then
+ add_env="$add_env MEMUSAGE_PROG_NAME=$progname"
+fi
+
# Set buffer size.
if test -n "$buffer"; then
add_env="$add_env MEMUSAGE_BUFFER_SIZE=$buffer"
diff -urN glibc-2.2.4.org/malloc/mtrace.c glibc-2.2.4/malloc/mtrace.c
--- glibc-2.2.4.org/malloc/mtrace.c Mon Jul 23 19:54:39 2001
+++ glibc-2.2.4/malloc/mtrace.c Fri Sep 28 20:50:18 2001
@@ -97,7 +97,7 @@
if (_dl_addr (caller, &info))
{
char *buf = (char *) "";
- if (info.dli_sname && info.dli_sname[0])
+ if (info.dli_sname != NULL)
{
size_t len = strlen (info.dli_sname);
buf = alloca (len + 6 + 2 * sizeof (void *));
diff -urN glibc-2.2.4.org/malloc/obstack.c glibc-2.2.4/malloc/obstack.c
--- glibc-2.2.4.org/malloc/obstack.c Mon Jul 23 19:54:39 2001
+++ glibc-2.2.4/malloc/obstack.c Fri Sep 28 20:50:18 2001
@@ -19,7 +19,7 @@
02111-1307 USA. */
#ifdef HAVE_CONFIG_H
-#include
+# include
#endif
#include "obstack.h"
@@ -39,40 +39,43 @@
files, it is simpler to just do this in the source for each such file. */
#include /* Random thing to get __GNU_LIBRARY__. */
-#if !defined (_LIBC) && defined (__GNU_LIBRARY__) && __GNU_LIBRARY__ > 1
-#include
-#if _GNU_OBSTACK_INTERFACE_VERSION == OBSTACK_INTERFACE_VERSION
-#define ELIDE_CODE
-#endif
+#if !defined _LIBC && defined __GNU_LIBRARY__ && __GNU_LIBRARY__ > 1
+# include
+# if _GNU_OBSTACK_INTERFACE_VERSION == OBSTACK_INTERFACE_VERSION
+# define ELIDE_CODE
+# endif
#endif
+#if defined _LIBC && defined USE_IN_LIBIO
+# include
+#endif
#ifndef ELIDE_CODE
-#if defined (__STDC__) && __STDC__
-#define POINTER void *
-#else
-#define POINTER char *
-#endif
+# if defined __STDC__ && __STDC__
+# define POINTER void *
+# else
+# define POINTER char *
+# endif
/* Determine default alignment. */
struct fooalign {char x; double d;};
-#define DEFAULT_ALIGNMENT \
+# define DEFAULT_ALIGNMENT \
((PTR_INT_TYPE) ((char *) &((struct fooalign *) 0)->d - (char *) 0))
/* 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. */
union fooround {long x; double d;};
-#define DEFAULT_ROUNDING (sizeof (union fooround))
+# define DEFAULT_ROUNDING (sizeof (union fooround))
/* 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;
in such a case, redefine COPYING_UNIT to `long' (if that works)
or `char' as a last resort. */
-#ifndef COPYING_UNIT
-#define COPYING_UNIT int
-#endif
+# ifndef COPYING_UNIT
+# define COPYING_UNIT int
+# endif
/* The functions allocating more room by calling `obstack_chunk_alloc'
@@ -81,21 +84,21 @@
abort gracefully or use longjump - but shouldn't return. This
variable by default points to the internal function
`print_and_abort'. */
-#if defined (__STDC__) && __STDC__
+# if defined __STDC__ && __STDC__
static void print_and_abort (void);
void (*obstack_alloc_failed_handler) (void) = print_and_abort;
-#else
+# else
static void print_and_abort ();
void (*obstack_alloc_failed_handler) () = print_and_abort;
-#endif
+# endif
/* Exit value used when `print_and_abort' is used. */
-#if defined __GNU_LIBRARY__ || defined HAVE_STDLIB_H
-#include
-#endif
-#ifndef EXIT_FAILURE
-#define EXIT_FAILURE 1
-#endif
+# if defined __GNU_LIBRARY__ || defined HAVE_STDLIB_H
+# include
+# endif
+# ifndef EXIT_FAILURE
+# define EXIT_FAILURE 1
+# endif
int obstack_exit_failure = EXIT_FAILURE;
/* The non-GNU-C macros copy the obstack into this global variable
@@ -109,33 +112,33 @@
For free, do not use ?:, since some compilers, like the MIPS compilers,
do not allow (expr) ? void : void. */
-#if defined (__STDC__) && __STDC__
-#define CALL_CHUNKFUN(h, size) \
+# if defined __STDC__ && __STDC__
+# define CALL_CHUNKFUN(h, size) \
(((h) -> use_extra_arg) \
? (*(h)->chunkfun) ((h)->extra_arg, (size)) \
: (*(struct _obstack_chunk *(*) (long)) (h)->chunkfun) ((size)))
-#define CALL_FREEFUN(h, old_chunk) \
+# define CALL_FREEFUN(h, old_chunk) \
do { \
if ((h) -> use_extra_arg) \
(*(h)->freefun) ((h)->extra_arg, (old_chunk)); \
else \
(*(void (*) (void *)) (h)->freefun) ((old_chunk)); \
} while (0)
-#else
-#define CALL_CHUNKFUN(h, size) \
+# else
+# define CALL_CHUNKFUN(h, size) \
(((h) -> use_extra_arg) \
? (*(h)->chunkfun) ((h)->extra_arg, (size)) \
: (*(struct _obstack_chunk *(*) ()) (h)->chunkfun) ((size)))
-#define CALL_FREEFUN(h, old_chunk) \
+# define CALL_FREEFUN(h, old_chunk) \
do { \
if ((h) -> use_extra_arg) \
(*(h)->freefun) ((h)->extra_arg, (old_chunk)); \
else \
(*(void (*) ()) (h)->freefun) ((old_chunk)); \
} while (0)
-#endif
+# endif
/* Initialize an obstack H for use. Specify chunk size SIZE (0 means default).
@@ -151,13 +154,13 @@
struct obstack *h;
int size;
int alignment;
-#if defined (__STDC__) && __STDC__
+# if defined __STDC__ && __STDC__
POINTER (*chunkfun) (long);
void (*freefun) (void *);
-#else
+# else
POINTER (*chunkfun) ();
void (*freefun) ();
-#endif
+# endif
{
register struct _obstack_chunk *chunk; /* points to new chunk */
@@ -180,13 +183,13 @@
size = 4096 - extra;
}
-#if defined (__STDC__) && __STDC__
+# if defined __STDC__ && __STDC__
h->chunkfun = (struct _obstack_chunk * (*)(void *, long)) chunkfun;
h->freefun = (void (*) (void *, struct _obstack_chunk *)) freefun;
-#else
+# else
h->chunkfun = (struct _obstack_chunk * (*)()) chunkfun;
h->freefun = freefun;
-#endif
+# endif
h->chunk_size = size;
h->alignment_mask = alignment - 1;
h->use_extra_arg = 0;
@@ -209,13 +212,13 @@
struct obstack *h;
int size;
int alignment;
-#if defined (__STDC__) && __STDC__
+# if defined __STDC__ && __STDC__
POINTER (*chunkfun) (POINTER, long);
void (*freefun) (POINTER, POINTER);
-#else
+# else
POINTER (*chunkfun) ();
void (*freefun) ();
-#endif
+# endif
POINTER arg;
{
register struct _obstack_chunk *chunk; /* points to new chunk */
@@ -239,13 +242,13 @@
size = 4096 - extra;
}
-#if defined(__STDC__) && __STDC__
+# if defined __STDC__ && __STDC__
h->chunkfun = (struct _obstack_chunk * (*)(void *,long)) chunkfun;
h->freefun = (void (*) (void *, struct _obstack_chunk *)) freefun;
-#else
+# else
h->chunkfun = (struct _obstack_chunk * (*)()) chunkfun;
h->freefun = freefun;
-#endif
+# endif
h->chunk_size = size;
h->alignment_mask = alignment - 1;
h->extra_arg = arg;
@@ -340,11 +343,11 @@
This is here for debugging.
If you use it in a program, you are probably losing. */
-#if defined (__STDC__) && __STDC__
+# if defined __STDC__ && __STDC__
/* Suppress -Wmissing-prototypes warning. We don't want to declare this in
obstack.h because it is just for debugging. */
int _obstack_allocated_p (struct obstack *h, POINTER obj);
-#endif
+# endif
int
_obstack_allocated_p (h, obj)
@@ -369,7 +372,7 @@
/* Free objects in obstack H, including OBJ and everything allocate
more recently than OBJ. If OBJ is zero, free everything in H. */
-#undef obstack_free
+# undef obstack_free
/* This function has two names with identical definitions.
This is the first one, called from non-ANSI code. */
@@ -455,45 +458,45 @@
}
/* Define the error handler. */
-#ifndef _
-# if defined HAVE_LIBINTL_H || defined _LIBC
-# include
-# ifndef _
-# define _(Str) gettext (Str)
+# ifndef _
+# if defined HAVE_LIBINTL_H || defined _LIBC
+# include
+# ifndef _
+# define _(Str) gettext (Str)
+# endif
+# else
+# define _(Str) (Str)
# endif
-# else
-# define _(Str) (Str)
# endif
-#endif
-#if defined _LIBC && defined USE_IN_LIBIO
-# include
-# define fputs(s, f) _IO_fputs (s, f)
-#endif
+# if defined _LIBC && defined USE_IN_LIBIO
+# include
+# define fputs(s, f) _IO_fputs (s, f)
+# endif
-#ifndef __attribute__
+# ifndef __attribute__
/* This feature is available in gcc versions 2.5 and later. */
-# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)
-# define __attribute__(Spec) /* empty */
+# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)
+# define __attribute__(Spec) /* empty */
+# endif
# endif
-#endif
static void
__attribute__ ((noreturn))
print_and_abort ()
{
fputs (_("memory exhausted"), stderr);
fputc ('\n', stderr);
exit (obstack_exit_failure);
}
-#if 0
+# if 0
/* These are now turned off because the applications do not use it
and it uses bcopy via obstack_grow, which causes trouble on sysV. */
/* Now define the functional versions of the obstack macros.
Define them to simply use the corresponding macros to do the job. */
-#if defined (__STDC__) && __STDC__
+# if defined __STDC__ && __STDC__
/* These function definitions do not work with non-ANSI preprocessors;
they won't pass through the macro names in parentheses. */
@@ -604,8 +616,8 @@
return obstack_copy0 (obstack, address, length);
}
-#endif /* __STDC__ */
+# endif /* __STDC__ */
-#endif /* 0 */
+# endif /* 0 */
#endif /* !ELIDE_CODE */