aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaurynas Biveinis <laurynas.biveinis@gmail.com>2010-05-26 11:24:42 +0000
committerLaurynas Biveinis <lauras@gcc.gnu.org>2010-05-26 11:24:42 +0000
commite4dfaf724fb00007371cf3ff0ee86b5ec52cc558 (patch)
tree37c08416aaec00456b907de173556f4632bab3b8
parente12da9c28bfa69bb6fc868841855851527a3db14 (diff)
downloadgcc-e4dfaf724fb00007371cf3ff0ee86b5ec52cc558.zip
gcc-e4dfaf724fb00007371cf3ff0ee86b5ec52cc558.tar.gz
gcc-e4dfaf724fb00007371cf3ff0ee86b5ec52cc558.tar.bz2
ggc-zone.c: Update copyright year.
2010-05-26 Laurynas Biveinis <laurynas.biveinis@gmail.com> * ggc-zone.c: Update copyright year. (poison_region): Mark memory for Valgrind as undefined before memset () call and inaccessible afterwards. (ggc_pch_total_size): Change type of i to int. 2010-05-26 Laurynas Biveinis <laurynas.biveinis@gmail.com> * ggc-common.c (ggc_free_overhead): Allow empty slot. 2010-05-26 Laurynas Biveinis <laurynas.biveinis@gmail.com> * ggc-common.c: Update copyright year. (ggc_rlimit_bound): Remove prototype. Compile only if !ENABLE_GC_CHECKING && !ENABLE_GC_ALWAYS_COLLECT. (ggc_min_heapsize_heuristic): Compile only if !ENABLE_GC_CHECKING && !ENABLE_GC_ALWAYS_COLLECT. Make static. (ggc_min_heapsize_heuristic): Likewise. From-SVN: r159863
-rw-r--r--gcc/ChangeLog20
-rw-r--r--gcc/ggc-common.c20
-rw-r--r--gcc/ggc-zone.c14
3 files changed, 43 insertions, 11 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 7996315..4e02230 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,23 @@
+2010-05-26 Laurynas Biveinis <laurynas.biveinis@gmail.com>
+
+ * ggc-zone.c: Update copyright year.
+ (poison_region): Mark memory for Valgrind as undefined before
+ memset () call and inaccessible afterwards.
+ (ggc_pch_total_size): Change type of i to int.
+
+2010-05-26 Laurynas Biveinis <laurynas.biveinis@gmail.com>
+
+ * ggc-common.c (ggc_free_overhead): Allow empty slot.
+
+2010-05-26 Laurynas Biveinis <laurynas.biveinis@gmail.com>
+
+ * ggc-common.c: Update copyright year.
+ (ggc_rlimit_bound): Remove prototype. Compile only if
+ !ENABLE_GC_CHECKING && !ENABLE_GC_ALWAYS_COLLECT.
+ (ggc_min_heapsize_heuristic): Compile only if !ENABLE_GC_CHECKING
+ && !ENABLE_GC_ALWAYS_COLLECT. Make static.
+ (ggc_min_heapsize_heuristic): Likewise.
+
2010-05-26 Richard Guenther <rguenther@suse.de>
PR rtl-optimization/44164
diff --git a/gcc/ggc-common.c b/gcc/ggc-common.c
index 28c2b79..76bf975 100644
--- a/gcc/ggc-common.c
+++ b/gcc/ggc-common.c
@@ -1,6 +1,6 @@
/* Simple garbage collection for the GNU compiler.
- Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
- Free Software Foundation, Inc.
+ Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
+ 2009, 2010 Free Software Foundation, Inc.
This file is part of GCC.
@@ -70,7 +70,6 @@ static int compare_ptr_data (const void *, const void *);
static void relocate_ptrs (void *, void *);
static void write_pch_globals (const struct ggc_root_tab * const *tab,
struct traversal_state *state);
-static double ggc_rlimit_bound (double);
/* Maintain global roots that are preserved during GC. */
@@ -742,6 +741,8 @@ mmap_gt_pch_use_address (void *base, size_t size, int fd, size_t offset)
}
#endif /* HAVE_MMAP_FILE */
+#if !defined ENABLE_GC_CHECKING && !defined ENABLE_GC_ALWAYS_COLLECT
+
/* Modify the bound based on rlimits. */
static double
ggc_rlimit_bound (double limit)
@@ -776,7 +777,7 @@ ggc_rlimit_bound (double limit)
}
/* Heuristic to set a default for GGC_MIN_EXPAND. */
-int
+static int
ggc_min_expand_heuristic (void)
{
double min_expand = physmem_total();
@@ -795,7 +796,7 @@ ggc_min_expand_heuristic (void)
}
/* Heuristic to set a default for GGC_MIN_HEAPSIZE. */
-int
+static int
ggc_min_heapsize_heuristic (void)
{
double phys_kbytes = physmem_total();
@@ -832,6 +833,7 @@ ggc_min_heapsize_heuristic (void)
return phys_kbytes;
}
+#endif
void
init_ggc_heuristics (void)
@@ -980,7 +982,13 @@ ggc_free_overhead (void *ptr)
{
PTR *slot = htab_find_slot_with_hash (ptr_hash, ptr, htab_hash_pointer (ptr),
NO_INSERT);
- struct ptr_hash_entry *p = (struct ptr_hash_entry *) *slot;
+ struct ptr_hash_entry *p;
+ /* The pointer might be not found if a PCH read happened between allocation
+ and ggc_free () call. FIXME: account memory properly in the presence of
+ PCH. */
+ if (!slot)
+ return;
+ p = (struct ptr_hash_entry *) *slot;
p->loc->freed += p->size;
htab_clear_slot (ptr_hash, slot);
free (p);
diff --git a/gcc/ggc-zone.c b/gcc/ggc-zone.c
index bc775b1..a8154cc 100644
--- a/gcc/ggc-zone.c
+++ b/gcc/ggc-zone.c
@@ -1,6 +1,6 @@
/* "Bag-of-pages" zone garbage collector for the GNU compiler.
- Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008
- Free Software Foundation, Inc.
+ Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008,
+ 2010 Free Software Foundation, Inc.
Contributed by Richard Henderson (rth@redhat.com) and Daniel Berlin
(dberlin@dberlin.org). Rewritten by Daniel Jacobowitz
@@ -1385,8 +1385,12 @@ ggc_alloc_stat (size_t size MEM_STAT_DECL)
/* Poison the chunk. */
#ifdef ENABLE_GC_CHECKING
-#define poison_region(PTR, SIZE) \
- memset ((PTR), 0xa5, (SIZE))
+#define poison_region(PTR, SIZE) \
+ do { \
+ VALGRIND_DISCARD (VALGRIND_MAKE_MEM_UNDEFINED ((PTR), (SIZE))); \
+ memset ((PTR), 0xa5, (SIZE)); \
+ VALGRIND_DISCARD (VALGRIND_MAKE_MEM_NOACCESS ((PTR), (SIZE))); \
+ } while (0)
#else
#define poison_region(PTR, SIZE)
#endif
@@ -2349,7 +2353,7 @@ ggc_pch_count_object (struct ggc_pch_data *d, void *x ATTRIBUTE_UNUSED,
size_t
ggc_pch_total_size (struct ggc_pch_data *d)
{
- enum gt_types_enum i;
+ int i;
size_t alloc_size, total_size;
total_size = 0;