aboutsummaryrefslogtreecommitdiff
path: root/gcc/libgcc2.c
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1994-02-08 19:19:53 -0500
committerRichard Kenner <kenner@gcc.gnu.org>1994-02-08 19:19:53 -0500
commit442e881d89e931d7aa1f6794e6814d6eab08a26f (patch)
treeefbbd0d09725d3bdb3f40720dc7f44002b9cacba /gcc/libgcc2.c
parenta6e9783c2215d94acc0c8d169cdcaa4a72c701e7 (diff)
downloadgcc-442e881d89e931d7aa1f6794e6814d6eab08a26f.zip
gcc-442e881d89e931d7aa1f6794e6814d6eab08a26f.tar.gz
gcc-442e881d89e931d7aa1f6794e6814d6eab08a26f.tar.bz2
(__builtin_new): If __new_handler returns, keep trying to allocate the memory.
(__default_new_handler): Add __ to beginning of name to avoid namespace clashing. From-SVN: r6506
Diffstat (limited to 'gcc/libgcc2.c')
-rw-r--r--gcc/libgcc2.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/gcc/libgcc2.c b/gcc/libgcc2.c
index 6b58e0f..f3c6b0e 100644
--- a/gcc/libgcc2.c
+++ b/gcc/libgcc2.c
@@ -1,6 +1,6 @@
/* More subroutines needed by GCC output code on some machines. */
/* Compile this one with gcc. */
-/* Copyright (C) 1989, 1992, 1993 Free Software Foundation, Inc.
+/* Copyright (C) 1989, 1992, 1993, 1994 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -1574,8 +1574,12 @@ __builtin_new (size_t sz)
if (sz == 0)
sz = 1;
p = (void *) malloc (sz);
- if (p == 0)
- (*__new_handler) ();
+ while (p == 0)
+ {
+ (*__new_handler) ();
+ p = (void *) malloc (sz);
+ }
+
return p;
}
#endif /* L_op_new */
@@ -1597,9 +1601,9 @@ __builtin_new (size_t sz)
typedef void (*vfp)(void);
extern void *__builtin_new (size_t);
-static void default_new_handler (void);
+static void __default_new_handler (void);
-vfp __new_handler = default_new_handler;
+vfp __new_handler = __default_new_handler;
vfp
__set_new_handler (handler)
@@ -1608,7 +1612,7 @@ __set_new_handler (handler)
vfp prev_handler;
prev_handler = __new_handler;
- if (handler == 0) handler = default_new_handler;
+ if (handler == 0) handler = __default_new_handler;
__new_handler = handler;
return prev_handler;
}
@@ -1623,7 +1627,7 @@ set_new_handler (handler)
#define MESSAGE "Virtual memory exceeded in `new'\n"
static void
-default_new_handler ()
+__default_new_handler ()
{
/* don't use fprintf (stderr, ...) because it may need to call malloc. */
/* This should really print the name of the program, but that is hard to