summaryrefslogtreecommitdiff
path: root/gcc/ggc-common.c
diff options
context:
space:
mode:
authorlauras <lauras@138bc75d-0d04-0410-961f-82ee72b054a4>2010-05-26 11:24:42 +0000
committerlauras <lauras@138bc75d-0d04-0410-961f-82ee72b054a4>2010-05-26 11:24:42 +0000
commit9ca7413c669b596357aeb3dc8867ddaa0041fe50 (patch)
tree37c08416aaec00456b907de173556f4632bab3b8 /gcc/ggc-common.c
parentcdd0ea3715bb9da8433f4c9c80909025235d637a (diff)
downloadgcc-9ca7413c669b596357aeb3dc8867ddaa0041fe50.tar.gz
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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@159863 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ggc-common.c')
-rw-r--r--gcc/ggc-common.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/gcc/ggc-common.c b/gcc/ggc-common.c
index 28c2b793f22..76bf975c86f 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);