Index: uClibc_trunk/libc/sysdeps/linux/common/mremap.c
===================================================================
--- uClibc_trunk/libc/sysdeps/linux/common/mremap.c	(revision 17813)
+++ uClibc_trunk/libc/sysdeps/linux/common/mremap.c	(working copy)
@@ -9,6 +9,7 @@
 
 #include <sys/syscall.h>
 #include <unistd.h>
+#include <stdarg.h>
 
 #ifdef __NR_mremap
 
@@ -16,11 +17,24 @@
 #include <sys/mman.h>
 #undef mremap
 
-void *mremap(void *, size_t, size_t, int, void *);
+#define __NR___syscall_mremap __NR_mremap
+void *mremap(void *, size_t, size_t, int, ...);
+
+static inline _syscall5(void *, __syscall_mremap, void *,
+	old_address, size_t, old_size,
+	size_t, new_size, int, may_move, void *, new_address);
 
 libc_hidden_proto(mremap)
-_syscall5(void *, mremap, void *, old_address, size_t, old_size, size_t,
-		  new_size, int, may_move, void *, new_address);
+void *mremap(void * old_address, size_t old_size, size_t new_size,
+			 int may_move, ...)
+{
+	va_list args;
+	void *newaddr;
+	va_start(args, may_move);
+	newaddr = (may_move & MREMAP_FIXED) ? va_arg (args, void *) : NULL;
+	va_end(args);
+	return __syscall_mremap(old_address, old_size, new_size, may_move, newaddr);
+}
 libc_hidden_def(mremap)
 
 #endif
