ggc-zone.c (ggc_free): New function.
authorDaniel Berlin <dberlin@dberlin.org>
Sat, 31 Jan 2004 02:18:25 +0000 (02:18 +0000)
committerDaniel Berlin <dberlin@gcc.gnu.org>
Sat, 31 Jan 2004 02:18:25 +0000 (02:18 +0000)
2003-01-30  Daniel Berlin  <dberlin@dberlin.org>

* ggc-zone.c (ggc_free): New function.

From-SVN: r77019

gcc/ChangeLog
gcc/ggc-zone.c

index 02c2743..5c77923 100644 (file)
@@ -1,3 +1,7 @@
+2003-01-30  Daniel Berlin  <dberlin@dberlin.org>
+
+       * ggc-zone.c (ggc_free): New function.
+
 2004-01-30  Kazu Hirata  <kazu@cs.umass.edu>
 
        alloc-pool.c, c-lex.c, c-pragma.h, c-semantics.c, cfghooks.c,
index 355414f..bc7a4cd 100644 (file)
@@ -126,6 +126,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
 #ifndef HOST_BITS_PER_PTR
 #define HOST_BITS_PER_PTR  HOST_BITS_PER_LONG
 #endif
+
 #ifdef COOKIE_CHECKING
 #define CHUNK_MAGIC 0x95321123
 #define DEADCHUNK_MAGIC 0x12817317
@@ -734,6 +735,31 @@ ggc_alloc_zone (size_t size, struct alloc_zone *zone)
   return ggc_alloc_zone_1 (size, zone, -1);
 }
 
+/* Poison the chunk.  */
+#ifdef ENABLE_GC_CHECKING
+#define poison_chunk(CHUNK, SIZE) \
+  memset ((CHUNK)->u.data, 0xa5, (SIZE))
+#else
+#define poison_chunk(CHUNK, SIZE)
+#endif
+
+/* Free the object at P.  */
+
+void
+ggc_free (void *p)
+{
+  struct alloc_chunk *chunk;
+  
+  chunk = (struct alloc_chunk *) ((char *)p - CHUNK_OVERHEAD);
+  
+  /* Poison the chunk.  */
+  poison_chunk (chunk, ggc_get_size (p));
+
+  /* XXX: We only deal with explicitly freeing large objects ATM.  */
+  if (chunk->large)
+    free (p);
+}
+
 /* If P is not marked, mark it and return false.  Otherwise return true.
    P must have been allocated by the GC allocator; it mustn't point to
    static objects, stack variables, or memory allocated with malloc.  */
@@ -931,13 +957,6 @@ ggc_pop_context (void)
   for (zone = G.zones; zone; zone = zone->next_zone)
     ggc_pop_context_1 (zone);
 }
-/* Poison the chunk.  */
-#ifdef ENABLE_GC_CHECKING
-#define poison_chunk(CHUNK, SIZE) \
-  memset ((CHUNK)->u.data, 0xa5, (SIZE))
-#else
-#define poison_chunk(CHUNK, SIZE)
-#endif
 
 /* Free all empty pages and objects within a page for a given zone  */