diff options
Diffstat (limited to 'gcc/ggc-common.c')
-rw-r--r-- | gcc/ggc-common.c | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/gcc/ggc-common.c b/gcc/ggc-common.c index 4939cb6..cc0dc93 100644 --- a/gcc/ggc-common.c +++ b/gcc/ggc-common.c @@ -431,7 +431,7 @@ gt_pch_save (FILE *f) char *this_object = NULL; size_t this_object_size = 0; struct mmap_info mmi; - size_t page_size = getpagesize(); + const size_t mmap_offset_alignment = host_hooks.gt_pch_alloc_granularity(); gt_pch_save_stringpool (); @@ -481,14 +481,15 @@ gt_pch_save (FILE *f) ggc_pch_prepare_write (state.d, state.f); - /* Pad the PCH file so that the mmapped area starts on a page boundary. */ + /* Pad the PCH file so that the mmapped area starts on an allocation + granularity (usually page) boundary. */ { long o; o = ftell (state.f) + sizeof (mmi); if (o == -1) fatal_error ("can't get position in PCH file: %m"); - mmi.offset = page_size - o % page_size; - if (mmi.offset == page_size) + mmi.offset = mmap_offset_alignment - o % mmap_offset_alignment; + if (mmi.offset == mmap_offset_alignment) mmi.offset = 0; mmi.offset += o; } @@ -612,6 +613,16 @@ default_gt_pch_use_address (void *base, size_t size, int fd ATTRIBUTE_UNUSED, return (addr == base) - 1; } +/* Default version of HOST_HOOKS_GT_PCH_GET_ADDRESS. Return the + alignment required for allocating virtual memory. Usually this is the + same as pagesize. */ + +size_t +default_gt_pch_alloc_granularity (void) +{ + return getpagesize(); +} + #if HAVE_MMAP_FILE /* Default version of HOST_HOOKS_GT_PCH_GET_ADDRESS when mmap is present. We temporarily allocate SIZE bytes, and let the kernel place the data |