summaryrefslogtreecommitdiff
path: root/malloc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2009-02-18 15:49:44 +0000
committerJakub Jelinek <jakub@redhat.com>2009-02-18 15:49:44 +0000
commitcf22c5c9b3a4a6cc81a269d49d2324b5df084d74 (patch)
treeca7e374c348baf4e6510329f3f271eca4eb5419f /malloc
parent73c5dd45bc405428148ee740cac61a1279fe57d4 (diff)
Updated to fedora-glibc-20090218T1534
Diffstat (limited to 'malloc')
-rw-r--r--malloc/arena.c2
-rw-r--r--malloc/hooks.c20
-rw-r--r--malloc/malloc.c120
-rw-r--r--malloc/memusage.c10
-rwxr-xr-xmalloc/memusage.sh6
-rw-r--r--malloc/memusagestat.c22
-rw-r--r--malloc/obstack.h4
7 files changed, 100 insertions, 84 deletions
diff --git a/malloc/arena.c b/malloc/arena.c
index 9932ee049b..cc03dc4a5b 100644
--- a/malloc/arena.c
+++ b/malloc/arena.c
@@ -223,7 +223,7 @@ free_atfork(Void_t* mem, const Void_t *caller)
tsd_getspecific(arena_key, vptr);
if(vptr != ATFORK_ARENA_PTR)
(void)mutex_lock(&ar_ptr->mutex);
- _int_free(ar_ptr, mem);
+ _int_free(ar_ptr, p);
if(vptr != ATFORK_ARENA_PTR)
(void)mutex_unlock(&ar_ptr->mutex);
}
diff --git a/malloc/hooks.c b/malloc/hooks.c
index c88937665c..9659ec5fbe 100644
--- a/malloc/hooks.c
+++ b/malloc/hooks.c
@@ -1,5 +1,5 @@
/* Malloc implementation for multiple threads without lock contention.
- Copyright (C) 2001-2006, 2007, 2008 Free Software Foundation, Inc.
+ Copyright (C) 2001-2006, 2007, 2008, 2009 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Wolfram Gloger <wg@malloc.de>, 2001.
@@ -293,7 +293,7 @@ free_check(mem, caller) Void_t* mem; const Void_t *caller;
#if 0 /* Erase freed memory. */
memset(mem, 0, chunksize(p) - (SIZE_SZ+1));
#endif
- _int_free(&main_arena, mem);
+ _int_free(&main_arena, p);
(void)mutex_unlock(&main_arena.mutex);
}
@@ -305,8 +305,7 @@ realloc_check(oldmem, bytes, caller)
Void_t* oldmem; size_t bytes; const Void_t *caller;
#endif
{
- mchunkptr oldp;
- INTERNAL_SIZE_T nb, oldsize;
+ INTERNAL_SIZE_T nb;
Void_t* newmem = 0;
unsigned char *magic_p;
@@ -320,13 +319,13 @@ realloc_check(oldmem, bytes, caller)
return NULL;
}
(void)mutex_lock(&main_arena.mutex);
- oldp = mem2chunk_check(oldmem, &magic_p);
+ const mchunkptr oldp = mem2chunk_check(oldmem, &magic_p);
(void)mutex_unlock(&main_arena.mutex);
if(!oldp) {
malloc_printerr(check_action, "realloc(): invalid pointer", oldmem);
return malloc_check(bytes, NULL);
}
- oldsize = chunksize(oldp);
+ const INTERNAL_SIZE_T oldsize = chunksize(oldp);
checked_request2size(bytes+1, nb);
(void)mutex_lock(&main_arena.mutex);
@@ -355,8 +354,11 @@ realloc_check(oldmem, bytes, caller)
}
} else {
#endif /* HAVE_MMAP */
- if (top_check() >= 0)
- newmem = _int_realloc(&main_arena, oldmem, bytes+1);
+ if (top_check() >= 0) {
+ INTERNAL_SIZE_T nb;
+ checked_request2size(bytes + 1, nb);
+ newmem = _int_realloc(&main_arena, oldp, nb);
+ }
#if 0 /* Erase freed memory. */
if(newmem)
newp = mem2chunk(newmem);
@@ -470,7 +472,7 @@ free_starter(mem, caller) Void_t* mem; const Void_t *caller;
return;
}
#endif
- _int_free(&main_arena, mem);
+ _int_free(&main_arena, p);
}
# endif /* !defiend NO_STARTER */
diff --git a/malloc/malloc.c b/malloc/malloc.c
index a918934740..12e23b0f9b 100644
--- a/malloc/malloc.c
+++ b/malloc/malloc.c
@@ -1581,11 +1581,11 @@ typedef struct malloc_chunk* mchunkptr;
#if __STD_C
-Void_t* _int_malloc(mstate, size_t);
-void _int_free(mstate, Void_t*);
-Void_t* _int_realloc(mstate, Void_t*, size_t);
-Void_t* _int_memalign(mstate, size_t, size_t);
-Void_t* _int_valloc(mstate, size_t);
+static Void_t* _int_malloc(mstate, size_t);
+static void _int_free(mstate, mchunkptr);
+static Void_t* _int_realloc(mstate, mchunkptr, INTERNAL_SIZE_T);
+static Void_t* _int_memalign(mstate, size_t, size_t);
+static Void_t* _int_valloc(mstate, size_t);
static Void_t* _int_pvalloc(mstate, size_t);
/*static Void_t* cALLOc(size_t, size_t);*/
#ifndef _LIBC
@@ -1632,12 +1632,12 @@ static void free_atfork(Void_t* mem, const Void_t *caller);
#else
-Void_t* _int_malloc();
-void _int_free();
-Void_t* _int_realloc();
-Void_t* _int_memalign();
-Void_t* _int_valloc();
-Void_t* _int_pvalloc();
+static Void_t* _int_malloc();
+static void _int_free();
+static Void_t* _int_realloc();
+static Void_t* _int_memalign();
+static Void_t* _int_valloc();
+static Void_t* _int_pvalloc();
/*static Void_t* cALLOc();*/
static Void_t** _int_icalloc();
static Void_t** _int_icomalloc();
@@ -3084,7 +3084,7 @@ static Void_t* sYSMALLOc(nb, av) INTERNAL_SIZE_T nb; mstate av;
set_head(chunk_at_offset(old_top, old_size), (2*SIZE_SZ)|PREV_INUSE);
set_foot(chunk_at_offset(old_top, old_size), (2*SIZE_SZ));
set_head(old_top, old_size|PREV_INUSE|NON_MAIN_ARENA);
- _int_free(av, chunk2mem(old_top));
+ _int_free(av, old_top);
} else {
set_head(old_top, (old_size + 2*SIZE_SZ)|PREV_INUSE);
set_foot(old_top, (old_size + 2*SIZE_SZ));
@@ -3131,7 +3131,7 @@ static Void_t* sYSMALLOc(nb, av) INTERNAL_SIZE_T nb; mstate av;
if (brk != (char*)(MORECORE_FAILURE)) {
/* Call the `morecore' hook if necessary. */
- if (__after_morecore_hook)
+ if (__builtin_expect (__after_morecore_hook != NULL, 0))
(*__after_morecore_hook) ();
} else {
/*
@@ -3270,7 +3270,7 @@ static Void_t* sYSMALLOc(nb, av) INTERNAL_SIZE_T nb; mstate av;
snd_brk = (char*)(MORECORE(0));
} else
/* Call the `morecore' hook if necessary. */
- if (__after_morecore_hook)
+ if (__builtin_expect (__after_morecore_hook != NULL, 0))
(*__after_morecore_hook) ();
}
@@ -3323,7 +3323,7 @@ static Void_t* sYSMALLOc(nb, av) INTERNAL_SIZE_T nb; mstate av;
/* If possible, release the rest. */
if (old_size >= MINSIZE) {
- _int_free(av, chunk2mem(old_top));
+ _int_free(av, old_top);
}
}
@@ -3415,7 +3415,7 @@ static int sYSTRIm(pad, av) size_t pad; mstate av;
MORECORE(-extra);
/* Call the `morecore' hook if necessary. */
- if (__after_morecore_hook)
+ if (__builtin_expect (__after_morecore_hook != NULL, 0))
(*__after_morecore_hook) ();
new_brk = (char*)(MORECORE(0));
@@ -3542,7 +3542,7 @@ public_mALLOc(size_t bytes)
Void_t *victim;
__malloc_ptr_t (*hook) (size_t, __const __malloc_ptr_t) = __malloc_hook;
- if (hook != NULL)
+ if (__builtin_expect (hook != NULL, 0))
return (*hook)(bytes, RETURN_ADDRESS (0));
arena_get(ar_ptr, bytes);
@@ -3585,7 +3585,7 @@ public_fREe(Void_t* mem)
mchunkptr p; /* chunk corresponding to mem */
void (*hook) (__malloc_ptr_t, __const __malloc_ptr_t) = __free_hook;
- if (hook != NULL) {
+ if (__builtin_expect (hook != NULL, 0)) {
(*hook)(mem, RETURN_ADDRESS (0));
return;
}
@@ -3622,7 +3622,7 @@ public_fREe(Void_t* mem)
#else
(void)mutex_lock(&ar_ptr->mutex);
#endif
- _int_free(ar_ptr, mem);
+ _int_free(ar_ptr, p);
(void)mutex_unlock(&ar_ptr->mutex);
}
#ifdef libc_hidden_def
@@ -3635,14 +3635,11 @@ public_rEALLOc(Void_t* oldmem, size_t bytes)
mstate ar_ptr;
INTERNAL_SIZE_T nb; /* padded request size */
- mchunkptr oldp; /* chunk corresponding to oldmem */
- INTERNAL_SIZE_T oldsize; /* its size */
-
Void_t* newp; /* chunk to return */
__malloc_ptr_t (*hook) (__malloc_ptr_t, size_t, __const __malloc_ptr_t) =
__realloc_hook;
- if (hook != NULL)
+ if (__builtin_expect (hook != NULL, 0))
return (*hook)(oldmem, bytes, RETURN_ADDRESS (0));
#if REALLOC_ZERO_BYTES_FREES
@@ -3652,8 +3649,10 @@ public_rEALLOc(Void_t* oldmem, size_t bytes)
/* realloc of null is supposed to be same as malloc */
if (oldmem == 0) return public_mALLOc(bytes);
- oldp = mem2chunk(oldmem);
- oldsize = chunksize(oldp);
+ /* chunk corresponding to oldmem */
+ const mchunkptr oldp = mem2chunk(oldmem);
+ /* its size */
+ const INTERNAL_SIZE_T oldsize = chunksize(oldp);
/* Little security check which won't hurt performance: the
allocator never wrapps around at the end of the address space.
@@ -3705,7 +3704,7 @@ public_rEALLOc(Void_t* oldmem, size_t bytes)
tsd_setspecific(arena_key, (Void_t *)ar_ptr);
#endif
- newp = _int_realloc(ar_ptr, oldmem, bytes);
+ newp = _int_realloc(ar_ptr, oldp, nb);
(void)mutex_unlock(&ar_ptr->mutex);
assert(!newp || chunk_is_mmapped(mem2chunk(newp)) ||
@@ -3728,7 +3727,7 @@ public_rEALLOc(Void_t* oldmem, size_t bytes)
#else
(void)mutex_lock(&ar_ptr->mutex);
#endif
- _int_free(ar_ptr, oldmem);
+ _int_free(ar_ptr, oldp);
(void)mutex_unlock(&ar_ptr->mutex);
}
}
@@ -3748,7 +3747,7 @@ public_mEMALIGn(size_t alignment, size_t bytes)
__malloc_ptr_t (*hook) __MALLOC_PMT ((size_t, size_t,
__const __malloc_ptr_t)) =
__memalign_hook;
- if (hook != NULL)
+ if (__builtin_expect (hook != NULL, 0))
return (*hook)(alignment, bytes, RETURN_ADDRESS (0));
/* If need less alignment than we give anyway, just relay to malloc */
@@ -3805,7 +3804,7 @@ public_vALLOc(size_t bytes)
__malloc_ptr_t (*hook) __MALLOC_PMT ((size_t, size_t,
__const __malloc_ptr_t)) =
__memalign_hook;
- if (hook != NULL)
+ if (__builtin_expect (hook != NULL, 0))
return (*hook)(pagesz, bytes, RETURN_ADDRESS (0));
arena_get(ar_ptr, bytes + pagesz + MINSIZE);
@@ -3852,7 +3851,7 @@ public_pVALLOc(size_t bytes)
__malloc_ptr_t (*hook) __MALLOC_PMT ((size_t, size_t,
__const __malloc_ptr_t)) =
__memalign_hook;
- if (hook != NULL)
+ if (__builtin_expect (hook != NULL, 0))
return (*hook)(pagesz, rounded_bytes, RETURN_ADDRESS (0));
arena_get(ar_ptr, bytes + 2*pagesz + MINSIZE);
@@ -3906,7 +3905,7 @@ public_cALLOc(size_t n, size_t elem_size)
}
}
- if (hook != NULL) {
+ if (__builtin_expect (hook != NULL, 0)) {
sz = bytes;
mem = (*hook)(sz, RETURN_ADDRESS (0));
if(mem == 0)
@@ -4125,7 +4124,7 @@ public_mALLOPt(int p, int v)
------------------------------ malloc ------------------------------
*/
-Void_t*
+static Void_t*
_int_malloc(mstate av, size_t bytes)
{
INTERNAL_SIZE_T nb; /* normalized request size */
@@ -4589,10 +4588,9 @@ _int_malloc(mstate av, size_t bytes)
------------------------------ free ------------------------------
*/
-void
-_int_free(mstate av, Void_t* mem)
+static void
+_int_free(mstate av, mchunkptr p)
{
- mchunkptr p; /* chunk corresponding to mem */
INTERNAL_SIZE_T size; /* its size */
mfastbinptr* fb; /* associated fastbin */
mchunkptr nextchunk; /* next contiguous chunk */
@@ -4604,7 +4602,6 @@ _int_free(mstate av, Void_t* mem)
const char *errstr = NULL;
- p = mem2chunk(mem);
size = chunksize(p);
/* Little security check which won't hurt performance: the
@@ -4616,7 +4613,7 @@ _int_free(mstate av, Void_t* mem)
{
errstr = "free(): invalid pointer";
errout:
- malloc_printerr (check_action, errstr, mem);
+ malloc_printerr (check_action, errstr, chunk2mem(p));
return;
}
/* We know that each chunk is at least MINSIZE bytes in size. */
@@ -4663,7 +4660,7 @@ _int_free(mstate av, Void_t* mem)
}
if (__builtin_expect (perturb_byte, 0))
- free_perturb (mem, size - SIZE_SZ);
+ free_perturb (chunk2mem(p), size - SIZE_SZ);
p->fd = *fb;
*fb = p;
@@ -4707,7 +4704,7 @@ _int_free(mstate av, Void_t* mem)
}
if (__builtin_expect (perturb_byte, 0))
- free_perturb (mem, size - SIZE_SZ);
+ free_perturb (chunk2mem(p), size - SIZE_SZ);
/* consolidate backward */
if (!prev_inuse(p)) {
@@ -4943,13 +4940,8 @@ static void malloc_consolidate(av) mstate av;
*/
Void_t*
-_int_realloc(mstate av, Void_t* oldmem, size_t bytes)
+_int_realloc(mstate av, mchunkptr oldp, INTERNAL_SIZE_T nb)
{
- INTERNAL_SIZE_T nb; /* padded request size */
-
- mchunkptr oldp; /* chunk corresponding to oldmem */
- INTERNAL_SIZE_T oldsize; /* its size */
-
mchunkptr newp; /* chunk to return */
INTERNAL_SIZE_T newsize; /* its size */
Void_t* newmem; /* corresponding user mem */
@@ -4969,20 +4961,18 @@ _int_realloc(mstate av, Void_t* oldmem, size_t bytes)
const char *errstr = NULL;
-
- checked_request2size(bytes, nb);
-
- oldp = mem2chunk(oldmem);
- oldsize = chunksize(oldp);
-
/* Simple tests for old block integrity. */
if (__builtin_expect (misaligned_chunk (oldp), 0))
{
errstr = "realloc(): invalid pointer";
errout:
- malloc_printerr (check_action, errstr, oldmem);
+ malloc_printerr (check_action, errstr, chunk2mem(oldp));
return NULL;
}
+
+ /* oldmem size */
+ const INTERNAL_SIZE_T oldsize = chunksize(oldp);
+
if (__builtin_expect (oldp->size <= 2 * SIZE_SZ, 0)
|| __builtin_expect (oldsize >= av->system_mem, 0))
{
@@ -5054,7 +5044,7 @@ _int_realloc(mstate av, Void_t* oldmem, size_t bytes)
*/
copysize = oldsize - SIZE_SZ;
- s = (INTERNAL_SIZE_T*)(oldmem);
+ s = (INTERNAL_SIZE_T*)(chunk2mem(oldp));
d = (INTERNAL_SIZE_T*)(newmem);
ncopies = copysize / sizeof(INTERNAL_SIZE_T);
assert(ncopies >= 3);
@@ -5080,7 +5070,7 @@ _int_realloc(mstate av, Void_t* oldmem, size_t bytes)
}
}
- _int_free(av, oldmem);
+ _int_free(av, oldp);
check_inuse_chunk(av, newp);
return chunk2mem(newp);
}
@@ -5104,7 +5094,7 @@ _int_realloc(mstate av, Void_t* oldmem, size_t bytes)
(av != &main_arena ? NON_MAIN_ARENA : 0));
/* Mark remainder as inuse so free() won't complain */
set_inuse_bit_at_offset(remainder, remainder_size);
- _int_free(av, chunk2mem(remainder));
+ _int_free(av, remainder);
}
check_inuse_chunk(av, newp);
@@ -5129,7 +5119,7 @@ _int_realloc(mstate av, Void_t* oldmem, size_t bytes)
/* don't need to remap if still within same page */
if (oldsize == newsize - offset)
- return oldmem;
+ return chunk2mem(oldp);
cp = (char*)mremap((char*)oldp - offset, oldsize + offset, newsize, 1);
@@ -5157,13 +5147,13 @@ _int_realloc(mstate av, Void_t* oldmem, size_t bytes)
/* Note the extra SIZE_SZ overhead. */
if ((unsigned long)(oldsize) >= (unsigned long)(nb + SIZE_SZ))
- newmem = oldmem; /* do nothing */
+ newmem = chunk2mem(oldp); /* do nothing */
else {
/* Must alloc, copy, free. */
newmem = _int_malloc(av, nb - MALLOC_ALIGN_MASK);
if (newmem != 0) {
- MALLOC_COPY(newmem, oldmem, oldsize - 2*SIZE_SZ);
- _int_free(av, oldmem);
+ MALLOC_COPY(newmem, chunk2mem(oldp), oldsize - 2*SIZE_SZ);
+ _int_free(av, oldp);
}
}
return newmem;
@@ -5181,7 +5171,7 @@ _int_realloc(mstate av, Void_t* oldmem, size_t bytes)
------------------------------ memalign ------------------------------
*/
-Void_t*
+static Void_t*
_int_memalign(mstate av, size_t alignment, size_t bytes)
{
INTERNAL_SIZE_T nb; /* padded request size */
@@ -5257,7 +5247,7 @@ _int_memalign(mstate av, size_t alignment, size_t bytes)
(av != &main_arena ? NON_MAIN_ARENA : 0));
set_inuse_bit_at_offset(newp, newsize);
set_head_size(p, leadsize | (av != &main_arena ? NON_MAIN_ARENA : 0));
- _int_free(av, chunk2mem(p));
+ _int_free(av, p);
p = newp;
assert (newsize >= nb &&
@@ -5273,7 +5263,7 @@ _int_memalign(mstate av, size_t alignment, size_t bytes)
set_head(remainder, remainder_size | PREV_INUSE |
(av != &main_arena ? NON_MAIN_ARENA : 0));
set_head_size(p, nb);
- _int_free(av, chunk2mem(remainder));
+ _int_free(av, remainder);
}
}
@@ -5514,7 +5504,7 @@ mstate av; size_t n_elements; size_t* sizes; int opts; Void_t* chunks[];
------------------------------ valloc ------------------------------
*/
-Void_t*
+static Void_t*
#if __STD_C
_int_valloc(mstate av, size_t bytes)
#else
@@ -5531,7 +5521,7 @@ _int_valloc(av, bytes) mstate av; size_t bytes;
*/
-Void_t*
+static Void_t*
#if __STD_C
_int_pvalloc(mstate av, size_t bytes)
#else
@@ -6020,7 +6010,7 @@ __posix_memalign (void **memptr, size_t alignment, size_t size)
/* Call the hook here, so that caller is posix_memalign's caller
and not posix_memalign itself. */
- if (hook != NULL)
+ if (__builtin_expect (hook != NULL, 0))
mem = (*hook)(alignment, size, RETURN_ADDRESS (0));
else
mem = public_mEMALIGn (alignment, size);
diff --git a/malloc/memusage.c b/malloc/memusage.c
index d11e9e6ed5..fcd58dc684 100644
--- a/malloc/memusage.c
+++ b/malloc/memusage.c
@@ -1,5 +1,5 @@
/* Profile heap and stack memory usage of running program.
- Copyright (C) 1998-2002, 2004, 2005, 2006 Free Software Foundation, Inc.
+ Copyright (C) 1998-2002, 2004-2006, 2009 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
@@ -18,6 +18,7 @@
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
+#include <assert.h>
#include <atomic.h>
#include <dlfcn.h>
#include <errno.h>
@@ -92,7 +93,7 @@ static __thread uintptr_t start_sp;
#define peak_stack peak_use[1]
#define peak_total peak_use[2]
-#define DEFAULT_BUFFER_SIZE 1024
+#define DEFAULT_BUFFER_SIZE 32768
static size_t buffer_size;
static int fd = -1;
@@ -168,10 +169,11 @@ update_data (struct header *result, size_t len, size_t old_len)
this fails because of another thread increasing the
counter it does not matter since that thread will take
care of the correction. */
- unsigned int reset = idx - 2 * buffer_size;
- catomic_compare_and_exchange_val_acq (&buffer_size, reset, idx);
+ uatomic32_t reset = idx % (2 * buffer_size);
+ catomic_compare_and_exchange_val_acq (&buffer_cnt, reset, idx);
idx = reset;
}
+ assert (idx < 2 * DEFAULT_BUFFER_SIZE);
buffer[idx].heap = current_heap;
buffer[idx].stack = current_stack;
diff --git a/malloc/memusage.sh b/malloc/memusage.sh
index 1c906a1be5..8b372e4b8e 100755
--- a/malloc/memusage.sh
+++ b/malloc/memusage.sh
@@ -61,8 +61,10 @@ Profile memory usage of PROGRAM.
Mandatory arguments to long options are also mandatory for any corresponding
short options.
-For bug reporting instructions, please see:
-<http://www.gnu.org/software/libc/bugs.html>."
+"
+ print $"For bug reporting instructions, please see:
+<http://www.gnu.org/software/libc/bugs.html>.
+"
exit 0
}
diff --git a/malloc/memusagestat.c b/malloc/memusagestat.c
index 779d5c0a59..bf33175415 100644
--- a/malloc/memusagestat.c
+++ b/malloc/memusagestat.c
@@ -1,5 +1,6 @@
/* Generate graphic from memory profiling data.
- Copyright (C) 1998, 1999, 2000, 2005, 2006 Free Software Foundation, Inc.
+ Copyright (C) 1998, 1999, 2000, 2005, 2006,
+ 2009 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
@@ -38,6 +39,8 @@
#include <gdfontl.h>
#include <gdfonts.h>
+#include "../version.h"
+#define PACKAGE _libc_intl_domainname
/* Default size of the generated image. */
#define XSIZE 800
@@ -73,6 +76,10 @@ static error_t parse_opt (int key, char *arg, struct argp_state *state);
/* Function to print some extra text in the help message. */
static char *more_help (int key, const char *text, void *input);
+/* Name and version of program. */
+static void print_version (FILE *stream, struct argp_state *state);
+void (*argp_program_version_hook) (FILE *, struct argp_state *) = print_version;
+
/* Data structure to communicate with argp functions. */
static struct argp argp =
{
@@ -535,3 +542,16 @@ For bug reporting instructions, please see:\n\
}
return (char *) text;
}
+
+/* Print the version information. */
+static void
+print_version (FILE *stream, struct argp_state *state)
+{
+ fprintf (stream, "memusagestat (GNU %s) %s\n", PACKAGE, VERSION);
+ fprintf (stream, gettext ("\
+Copyright (C) %s Free Software Foundation, Inc.\n\
+This is free software; see the source for copying conditions. There is NO\n\
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
+"), "2009");
+ fprintf (stream, gettext ("Written by %s.\n"), "Ulrich Drepper");
+}
diff --git a/malloc/obstack.h b/malloc/obstack.h
index 206fe55050..449070e7f1 100644
--- a/malloc/obstack.h
+++ b/malloc/obstack.h
@@ -1,5 +1,5 @@
/* obstack.h - object stack macros
- Copyright (C) 1988-1994,1996-1999,2003,2004,2005
+ Copyright (C) 1988-1994,1996-1999,2003,2004,2005,2009
Free Software Foundation, Inc.
This file is part of the GNU C Library.
@@ -187,7 +187,7 @@ extern int _obstack_begin_1 (struct obstack *, int, int,
void (*) (void *, void *), void *);
extern int _obstack_memory_used (struct obstack *);
-void obstack_free (struct obstack *obstack, void *block);
+void obstack_free (struct obstack *__obstack, void *__block);
/* Error handler called when `obstack_chunk_alloc' failed to allocate