From 88597d3422353743f77a4f4de1f3e790cb9f1645 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Tue, 12 Apr 2011 18:06:16 +0000 Subject: * configure.ac: Check for sys/mman.h and mmap. Check for mremap with MREMAP_MAYMOVE. * output.h (class Output_file): Add map_is_allocated_ field. * output.cc: Only #include if it exists. If mmap is not available, provide stubs. If mremap is not available, #define it to gold_mremap. (MREMAP_MAYMOVE): Define if not defined. (Output_file::Output_file): Initialize map_is_allocated_. (Output_file::resize): Check map_is_allocated_. (Output_file::map_anonymous): If mmap fails, use malloc. (Output_file::unmap): Don't do anything for an anonymous map. * fileread.cc: Only #include if it exists. If mmap is not available, provide stubs. (File_read::View::~View): Use free rather than delete[]. (File_read::make_view): Use malloc rather than new[]. If mmap fails, use malloc. (File_read::find_or_make_view): Use malloc rather than new[]. * gold.h: Remove HAVE_REMAP code. * mremap.c: #include . Only #include if it exists. Rename mremap to gold_mremap. If mmap is not available don't do anything. * configure, config.in: Rebuild. --- gold/mremap.c | 38 +++++++++++++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 5 deletions(-) (limited to 'gold/mremap.c') diff --git a/gold/mremap.c b/gold/mremap.c index 332fded..e165634 100644 --- a/gold/mremap.c +++ b/gold/mremap.c @@ -1,6 +1,6 @@ /* mremap.c -- version of mremap for gold. */ -/* Copyright 2009 Free Software Foundation, Inc. +/* Copyright 2009, 2011 Free Software Foundation, Inc. Written by Ian Lance Taylor . This file is part of gold. @@ -23,9 +23,17 @@ #include "config.h" #include "ansidecl.h" +#include #include #include + +#ifdef HAVE_SYS_MMAN_H #include +#endif + +extern void *gold_mremap (void *, size_t, size_t, int); + +#ifdef HAVE_MMAP /* This file implements mremap for systems which don't have it. The gold code requires support for mmap. However, there are systems @@ -40,11 +48,9 @@ # define MAP_ANONYMOUS MAP_ANON #endif -extern void *mremap (void *, size_t, size_t, int, ...); - void * -mremap (void *old_address, size_t old_size, size_t new_size, - int flags ATTRIBUTE_UNUSED, ...) +gold_mremap (void *old_address, size_t old_size, size_t new_size, + int flags ATTRIBUTE_UNUSED) { void *ret; @@ -57,3 +63,25 @@ mremap (void *old_address, size_t old_size, size_t new_size, (void) munmap (old_address, old_size); return ret; } + +#else /* !defined(HAVE_MMAP) */ + +#ifndef MAP_FAILED +#define MAP_FAILED ((void *) -1) +#endif + +#ifndef ENOSYS +#define ENOSYS EINVAL +#endif + +void * +gold_mremap (void *old_address ATTRIBUTE_UNUSED, + size_t old_size ATTRIBUTE_UNUSED, + size_t new_size ATTRIBUTE_UNUSED, + int flags ATTRIBUTE_UNUSED) +{ + errno = ENOSYS; + return MAP_FAILED; +} + +#endif /* !defined(HAVE_MMAP) */ -- cgit v1.1