[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#331064: Compilation fails with sys/mman.h mmap with -std=c89 on GCC 4.0.1



Package: libc6-dev
Version: 2.3.5-6

Hi,

I'm trying to compile this:

<clip>
/* #define __USE_MISC */

#include <sys/mman.h>
#include <unistd.h>

static int pageCount(size_t len)
{
	unsigned long ps = getpagesize();
	return ((len + (ps - 1)) / ps) * ps;
}

static void* execMalloc(size_t requested_length)
{
	const int MMAP_BASE_ADDRESS = 1024*1024;
	void* addr = (mmap (((void *) MMAP_BASE_ADDRESS),
						(size_t)pageCount(requested_length),
						(PROT_EXEC | PROT_READ | PROT_WRITE),
						(MAP_PRIVATE | MAP_ANONYMOUS),
						/* Ignored by GNU/Linux, required by FreeBSD and Solaris. */
						(-1),
						0));
	return ((addr == MAP_FAILED) ? 0 : addr);
}
</clip>

with gcc 4.0.1.  The above fails to compile with -std=c89:

<clip>
janne@nurbian:~/dev$ gcc -std=c89 -c mmap.c
mmap.c: In function 'execMalloc':
mmap.c:14: error: 'MAP_ANONYMOUS' undeclared (first use in this function)
mmap.c:14: error: (Each undeclared identifier is reported only once
mmap.c:14: error: for each function it appears in.)
</clip>

If I don't specify -std=c89, it works nicely.  If I define __USE_MISC,
then it compiles again.

Is this the way it should work?

I am using Debian GNU/Linux 2.6.

janne@nurbian:~/dev$ gcc -v
Using built-in specs.
Target: i486-linux-gnu
Configured with: ../src/configure -v
--enable-languages=c,c++,java,f95,objc,ada,treelang --prefix=/usr
--enable-shared --with-system-zlib --libexecdir=/usr/lib --enable-nls
--without-included-gettext --enable-threads=posix
--program-suffix=-4.0 --enable-__cxa_atexit
--enable-libstdcxx-allocator=mt --enable-clocale=gnu
--enable-libstdcxx-debug --enable-java-gc=boehm --enable-java-awt=gtk
--with-java-home=/usr/lib/jvm/java-1.4.2-gcj-4.0-1.4.2.0/jre
--enable-mpfr --disable-werror --enable-checking=release
i486-linux-gnu
Thread model: posix
gcc version 4.0.1 (Debian 4.0.1-2)



Reply to: