Imported from ../bash-3.0.tar.gz.

This commit is contained in:
Jari Aalto 2004-07-27 13:29:18 +00:00
commit b80f6443b6
400 changed files with 69247 additions and 13346 deletions

View file

@ -46,9 +46,16 @@ LDFLAGS = @LDFLAGS@
DEFS = @DEFS@
LOCAL_DEFS = @LOCAL_DEFS@
LIBBUILD = ${BUILD_DIR}/lib
BASHINCDIR = ${topdir}/include
INCLUDES = -I. -I../.. -I$(topdir) -I$(BASHINCDIR) -I$(topdir)/lib
INTL_LIBSRC = ${topdir}/lib/intl
INTL_BUILDDIR = ${LIBBUILD}/intl
INTL_INC = @INTL_INC@
LIBINTL_H = @LIBINTL_H@
INCLUDES = -I. -I../.. -I$(topdir) -I$(BASHINCDIR) -I$(topdir)/lib $(INTL_INC)
CCFLAGS = ${PROFILE_FLAGS} ${INCLUDES} $(DEFS) $(LOCAL_DEFS) $(LOCAL_CFLAGS) \
$(CFLAGS) $(MALLOC_CFLAGS) $(CPPFLAGS)
@ -116,6 +123,12 @@ trace.o: ${srcdir}/imalloc.h
table.o: ${srcdir}/imalloc.h ${srcdir}/table.h
watch.o: ${srcdir}/imalloc.h ${srcdir}/watch.h
malloc.o: ${topdir}/bashintl.h ${LIBINTL_H} ${BASHINCDIR}/gettext.h
stats.o: ${topdir}/bashintl.h ${LIBINTL_H} ${BASHINCDIR}/gettext.h
trace.o: ${topdir}/bashintl.h ${LIBINTL_H} ${BASHINCDIR}/gettext.h
table.o: ${topdir}/bashintl.h ${LIBINTL_H} ${BASHINCDIR}/gettext.h
watch.o: ${topdir}/bashintl.h ${LIBINTL_H} ${BASHINCDIR}/gettext.h
# Rules for deficient makes, like SunOS and Solaris
stub.o: stub.c
malloc.o: malloc.c

View file

@ -1,5 +1,5 @@
/* Emulation of getpagesize() for systems that need it.
Copyright (C) 1991 Free Software Foundation, Inc.
Copyright (C) 1991-2003 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by

View file

@ -1,6 +1,6 @@
/* imalloc.h -- internal malloc definitions shared by source files. */
/* Copyright (C) 2001 Free Software Foundation, Inc.
/* Copyright (C) 2001-2003 Free Software Foundation, Inc.
This file is part of GNU Bash, the Bourne Again SHell.
@ -159,4 +159,10 @@ do { \
memcpy ((dest), (src), (nbytes)) \
} while(0)
#if defined (SHELL)
# include "bashintl.h"
#else
# define _(x) x
#endif
#endif /* _IMALLOC_H */

View file

@ -1,6 +1,6 @@
/* malloc.c - dynamic memory allocation for bash. */
/* Copyright (C) 1985, 1987, 1997 Free Software Foundation, Inc.
/* Copyright (C) 1985-2003 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -236,7 +236,7 @@ static unsigned long binsizes[NBUCKETS] = {
8192UL, 16384UL, 32768UL, 65536UL, 131072UL, 262144UL, 524288UL,
1048576UL, 2097152UL, 4194304UL, 8388608UL, 16777216UL, 33554432UL,
67108864UL, 134217728UL, 268435456UL, 536870912UL, 1073741824UL,
2147483648UL, 4294967296UL-1
2147483648UL, 4294967295UL
};
/* binsizes[x] == (1 << ((x) + 3)) */
@ -291,8 +291,11 @@ extern void mtrace_free __P((PTR_T, int, const char *, int));
#if !defined (botch)
static void
botch (s, file, line)
const char *s;
const char *file;
int line;
{
fprintf (stderr, "malloc: failed assertion: %s\n", s);
fprintf (stderr, _("malloc: failed assertion: %s\n"), s);
(void)fflush (stderr);
abort ();
}
@ -308,7 +311,7 @@ xbotch (mem, e, s, file, line)
const char *file;
int line;
{
fprintf (stderr, "\r\nmalloc: %s:%d: assertion botched\r\n",
fprintf (stderr, _("\r\nmalloc: %s:%d: assertion botched\r\n"),
file ? file : "unknown", line);
#ifdef MALLOC_REGISTER
if (mem != NULL && malloc_register)
@ -734,7 +737,7 @@ internal_malloc (n, file, line, flags) /* get a block */
/* If not for this check, we would gobble a clobbered free chain ptr
and bomb out on the NEXT allocate of this size block */
if (p->mh_alloc != ISFREE || p->mh_index != nunits)
xbotch ((PTR_T)(p+1), 0, "malloc: block on free list clobbered", file, line);
xbotch ((PTR_T)(p+1), 0, _("malloc: block on free list clobbered"), file, line);
/* Fill in the info, and set up the magic numbers for range checking. */
p->mh_alloc = ISALLOC;
@ -811,10 +814,10 @@ internal_free (mem, file, line, flags)
{
if (p->mh_alloc == ISFREE)
xbotch (mem, ERR_DUPFREE,
"free: called with already freed block argument", file, line);
_("free: called with already freed block argument"), file, line);
else
xbotch (mem, ERR_UNALLOC,
"free: called with unallocated block argument", file, line);
_("free: called with unallocated block argument"), file, line);
}
ASSERT (p->mh_magic2 == MAGIC2);
@ -833,13 +836,13 @@ internal_free (mem, file, line, flags)
if (IN_BUCKET(nbytes, nunits) == 0)
xbotch (mem, ERR_UNDERFLOW,
"free: underflow detected; mh_nbytes out of range", file, line);
_("free: underflow detected; mh_nbytes out of range"), file, line);
ap += p->mh_nbytes;
z = mg.s;
*z++ = *ap++, *z++ = *ap++, *z++ = *ap++, *z++ = *ap++;
if (mg.i != p->mh_nbytes)
xbotch (mem, ERR_ASSERT_FAILED, "free: start and end chunk sizes differ", file, line);
xbotch (mem, ERR_ASSERT_FAILED, _("free: start and end chunk sizes differ"), file, line);
#if 1
if (nunits >= LESSCORE_MIN && ((char *)p + binsize(nunits) == memtop))
@ -879,6 +882,7 @@ internal_free (mem, file, line, flags)
busy[nunits] = 0;
free_return:
; /* Empty statement in case this is the end of the function */
#ifdef MALLOC_STATS
_mstats.nmalloc[nunits]--;
@ -935,7 +939,7 @@ internal_realloc (mem, n, file, line, flags)
if (p->mh_alloc != ISALLOC)
xbotch (mem, ERR_UNALLOC,
"realloc: called with unallocated block argument", file, line);
_("realloc: called with unallocated block argument"), file, line);
ASSERT (p->mh_magic2 == MAGIC2);
nbytes = ALLOCATED_BYTES(p->mh_nbytes);
@ -950,13 +954,13 @@ internal_realloc (mem, n, file, line, flags)
original number of bytes requested. */
if (IN_BUCKET(nbytes, nunits) == 0)
xbotch (mem, ERR_UNDERFLOW,
"realloc: underflow detected; mh_nbytes out of range", file, line);
_("realloc: underflow detected; mh_nbytes out of range"), file, line);
m = (char *)mem + (tocopy = p->mh_nbytes);
z = mg.s;
*z++ = *m++, *z++ = *m++, *z++ = *m++, *z++ = *m++;
if (mg.i != p->mh_nbytes)
xbotch (mem, ERR_ASSERT_FAILED, "realloc: start and end chunk sizes differ", file, line);
xbotch (mem, ERR_ASSERT_FAILED, _("realloc: start and end chunk sizes differ"), file, line);
#ifdef MALLOC_WATCH
if (_malloc_nwatch > 0)

View file

@ -1,6 +1,6 @@
/* mstats.h - definitions for malloc statistics */
/* Copyright (C) 2001 Free Software Foundation, Inc.
/* Copyright (C) 2001-2003 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by

View file

@ -1,6 +1,6 @@
/* Functions (currently) for use by the shell to do malloc debugging and
tracking. */
/* Copyright (C) 2001 Free Software Foundation, Inc.
/* Copyright (C) 2001-2003 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -53,6 +53,7 @@ extern PTR_T sh_valloc __P((size_t, const char *, int));
/* trace.c */
extern int malloc_set_trace __P((int));
extern void malloc_set_tracefp (); /* full prototype requires stdio.h */
extern void malloc_set_tracefn __P((char *, char *));
/* table.c */
extern void mregister_dump_table __P((void));

View file

@ -1,6 +1,6 @@
/* stats.c - malloc statistics */
/* Copyright (C) 2001 Free Software Foundation, Inc.
/* Copyright (C) 2001-2003 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -35,6 +35,8 @@ extern int malloc_free_blocks __P((int));
extern struct _malstats _mstats;
extern FILE *_imalloc_fopen __P((char *, char *, char *, char *, size_t));
struct bucket_stats
malloc_bucket_stats (size)
int size;
@ -129,14 +131,37 @@ fprint_malloc_stats (s, fp)
_print_malloc_stats (s, fp);
}
#define TRACEROOT "/var/tmp/maltrace/trace."
static char mallbuf[1024];
#define TRACEROOT "/var/tmp/maltrace/stats."
void
trace_malloc_stats (s, fn)
char *s, *fn;
{
FILE *fp;
char defname[sizeof (TRACEROOT) + 64];
static char mallbuf[1024];
fp = _imalloc_fopen (s, fn, TRACEROOT, defname, sizeof (defname));
if (fp)
{
setvbuf (fp, mallbuf, _IOFBF, sizeof (mallbuf));
_print_malloc_stats (s, fp);
fflush(fp);
fclose(fp);
}
}
#endif /* MALLOC_STATS */
#if defined (MALLOC_STATS) || defined (MALLOC_TRACE)
FILE *
_imalloc_fopen (s, fn, def, defbuf, defsiz)
char *s;
char *fn;
char *def;
char *defbuf;
size_t defsiz;
{
char fname[1024];
long l;
FILE *fp;
@ -144,8 +169,8 @@ trace_malloc_stats (s, fn)
l = (long)getpid ();
if (fn == 0)
{
sprintf (defname, "%s%ld", TRACEROOT, l);
fp = fopen(defname, "w");
sprintf (defbuf, "%s%ld", def, l);
fp = fopen(defbuf, "w");
}
else
{
@ -171,14 +196,7 @@ trace_malloc_stats (s, fn)
*p = '\0';
fp = fopen (fname, "w");
}
if (fp)
{
setvbuf (fp, mallbuf, _IOFBF, sizeof (mallbuf));
_print_malloc_stats (s, fp);
fflush(fp);
fclose(fp);
}
}
#endif /* MALLOC_STATS */
return fp;
}
#endif /* MALLOC_STATS || MALLOC_TRACE */

View file

@ -1,4 +1,4 @@
/* Copyright (C) 1993-2002 Free Software Foundation, Inc.
/* Copyright (C) 1993-2003 Free Software Foundation, Inc.
This file is part of GNU Bash, the Bourne Again SHell.

View file

@ -1,6 +1,6 @@
/* table.c - bookkeeping functions for allocated memory */
/* Copyright (C) 2001 Free Software Foundation, Inc.
/* Copyright (C) 2001-2003 Free Software Foundation, Inc.
This file is part of GNU Bash, the Bourne Again SHell.
@ -172,14 +172,14 @@ mregister_alloc (tag, mem, size, file, line)
if (tentry == 0)
{
/* oops. table is full. punt. */
fprintf (stderr, "register_alloc: alloc table is full with FIND_ALLOC?\n");
fprintf (stderr, _("register_alloc: alloc table is full with FIND_ALLOC?\n"));
return;
}
if (tentry->flags & MT_ALLOC)
{
/* oops. bad bookkeeping. ignore for now */
fprintf (stderr, "register_alloc: %p already in table as allocated?\n", mem);
fprintf (stderr, _("register_alloc: %p already in table as allocated?\n"), mem);
}
tentry->mem = mem;
@ -215,7 +215,7 @@ mregister_free (mem, size, file, line)
if (tentry->flags & MT_FREE)
{
/* oops. bad bookkeeping. ignore for now */
fprintf (stderr, "register_free: %p already in table as free?\n", mem);
fprintf (stderr, _("register_free: %p already in table as free?\n"), mem);
}
tentry->flags = MT_FREE;

View file

@ -1,6 +1,6 @@
/* table.h - definitions for tables for keeping track of allocated memory */
/* Copyright (C) 2001 Free Software Foundation, Inc.
/* Copyright (C) 2001-2003 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by

View file

@ -1,6 +1,6 @@
/* trace.c - tracing functions for malloc */
/* Copyright (C) 2001 Free Software Foundation, Inc.
/* Copyright (C) 2001-2003 Free Software Foundation, Inc.
This file is part of GNU Bash, the Bourne Again SHell.
@ -29,6 +29,8 @@ extern int malloc_trace;
static int _mtrace_verbose = 0;
extern FILE *_imalloc_fopen __P((char *, char *, char *, char *, size_t));
#ifdef MALLOC_TRACE
FILE *_mtrace_fp = NULL;
@ -101,3 +103,20 @@ malloc_trace_bin (n)
_malloc_trace_buckets[n] = 1;
#endif
}
#define TRACEROOT "/var/tmp/maltrace/trace."
void
malloc_set_tracefn (s, fn)
char *s;
char *fn;
{
#ifdef MALLOC_TRACE
FILE *fp;
char defname[sizeof (TRACEROOT) + 64];
fp = _imalloc_fopen (s, fn, TRACEROOT, defname, sizeof (defname));
if (fp)
malloc_set_tracefp (fp);
#endif
}

View file

@ -1,6 +1,6 @@
/* watch.c - watchpoint functions for malloc */
/* Copyright (C) 2001 Free Software Foundation, Inc.
/* Copyright (C) 2001-2003 Free Software Foundation, Inc.
This file is part of GNU Bash, the Bourne Again SHell.
@ -43,17 +43,17 @@ watch_warn (addr, file, line, type, data)
char *tag;
if (type == W_ALLOC)
tag = "allocated";
tag = _("allocated");
else if (type == W_FREE)
tag = "freed";
tag = _("freed");
else if (type == W_REALLOC)
tag = "requesting resize";
tag = _("requesting resize");
else if (type == W_RESIZED)
tag = "just resized";
tag = _("just resized");
else
tag = "bug: unknown operation";
tag = _("bug: unknown operation");
fprintf (stderr, "malloc: watch alert: %p %s ", addr, tag);
fprintf (stderr, _("malloc: watch alert: %p %s "), addr, tag);
if (data != (unsigned long)-1)
fprintf (stderr, "(size %lu) ", data);
fprintf (stderr, "from '%s:%d'\n", file ? file : "unknown", line);

View file

@ -1,6 +1,6 @@
/* watch.h - definitions for tables for keeping track of allocated memory */
/* Copyright (C) 2001 Free Software Foundation, Inc.
/* Copyright (C) 2001-2003 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by

View file

@ -1,6 +1,6 @@
/* xmalloc.c -- safe versions of malloc and realloc */
/* Copyright (C) 1991 Free Software Foundation, Inc.
/* Copyright (C) 1991-2003 Free Software Foundation, Inc.
This file is part of GNU Readline, a library for reading lines
of text with interactive input and history editing.