Index: libc/arch/amd64/Makefile.inc
===================================================================
--- libc/arch/amd64/Makefile.inc	(revision 7f079d9ccbd7dbd9cd0b1b84e53951d1acdb0b2b)
+++ libc/arch/amd64/Makefile.inc	(revision dc5a0fe1f6cd378525f19e69830be5e2cec0d779)
@@ -38,2 +38,5 @@
 
 LFLAGS += -N
+
+BFD_NAME = elf64-x86-64
+BFD_ARCH = i386:x86-64
Index: libc/arch/ia32/Makefile.inc
===================================================================
--- libc/arch/ia32/Makefile.inc	(revision 7f079d9ccbd7dbd9cd0b1b84e53951d1acdb0b2b)
+++ libc/arch/ia32/Makefile.inc	(revision dc5a0fe1f6cd378525f19e69830be5e2cec0d779)
@@ -38,2 +38,5 @@
 
 LFLAGS += -N
+
+BFD_NAME = elf32-i386
+BFD_ARCH = i386
Index: libc/arch/ia64/Makefile.inc
===================================================================
--- libc/arch/ia64/Makefile.inc	(revision 7f079d9ccbd7dbd9cd0b1b84e53951d1acdb0b2b)
+++ libc/arch/ia64/Makefile.inc	(revision dc5a0fe1f6cd378525f19e69830be5e2cec0d779)
@@ -39,2 +39,5 @@
 		arch/$(ARCH)/src/psthread.S \
 		arch/$(ARCH)/src/thread.c
+
+BFD_NAME = elf64-little
+BFD_ARCH = ia64-elf64
Index: libc/arch/mips32/Makefile.inc
===================================================================
--- libc/arch/mips32/Makefile.inc	(revision 7f079d9ccbd7dbd9cd0b1b84e53951d1acdb0b2b)
+++ libc/arch/mips32/Makefile.inc	(revision dc5a0fe1f6cd378525f19e69830be5e2cec0d779)
@@ -38,3 +38,4 @@
 	arch/$(ARCH)/src/thread.c
 
-
+BFD_ARCH = mips
+BFD_NAME = elf32-little
Index: libc/arch/mips32eb/Makefile.inc
===================================================================
--- libc/arch/mips32eb/Makefile.inc	(revision 7f079d9ccbd7dbd9cd0b1b84e53951d1acdb0b2b)
+++ libc/arch/mips32eb/Makefile.inc	(revision dc5a0fe1f6cd378525f19e69830be5e2cec0d779)
@@ -32,8 +32,12 @@
 TARGET = mips-sgi-irix5
 TOOLCHAIN_DIR = /usr/local/mips/bin
-CFLAGS += -mno-abicalls -mips3 
+CFLAGS += -mips3 
 
-ARCH_SOURCES += arch/$(ARCH)/src/syscall.c
+ARCH_SOURCES += arch/$(ARCH)/src/syscall.c \
+		arch/$(ARCH)/src/psthread.S \
+		arch/$(ARCH)/src/thread.c
 
 LFLAGS += -N
 
+BFD_ARCH = mips
+BFD_NAME = elf32-big
Index: libc/arch/ppc32/Makefile.inc
===================================================================
--- libc/arch/ppc32/Makefile.inc	(revision 7f079d9ccbd7dbd9cd0b1b84e53951d1acdb0b2b)
+++ libc/arch/ppc32/Makefile.inc	(revision dc5a0fe1f6cd378525f19e69830be5e2cec0d779)
@@ -40,2 +40,5 @@
 AFLAGS += -a32
 LFLAGS += -N
+
+BFD_NAME = elf32-powerpc
+BFD_ARCH = powerpc:common
Index: libc/generic/async.c
===================================================================
--- libc/generic/async.c	(revision 7f079d9ccbd7dbd9cd0b1b84e53951d1acdb0b2b)
+++ libc/generic/async.c	(revision dc5a0fe1f6cd378525f19e69830be5e2cec0d779)
@@ -624,4 +624,25 @@
 }
 
+/** Send message and return id of the sent message
+ *
+ * The return value can be used as input for async_wait() to wait
+ * for completion.
+ */
+aid_t async_send_3(int phoneid, ipcarg_t method, ipcarg_t arg1, ipcarg_t arg2,
+		   ipcarg_t arg3, ipc_call_t *dataptr)
+{
+	amsg_t *msg;
+
+	msg = malloc(sizeof(*msg));
+	msg->done = 0;
+	msg->dataptr = dataptr;
+
+	msg->wdata.active = 1; /* We may sleep in next method, but it
+				* will use it's own mechanism */
+	ipc_call_async_3(phoneid,method,arg1,arg2,arg3, msg,reply_received,1);
+
+	return (aid_t) msg;
+}
+
 /** Wait for a message sent by async framework
  *
Index: libc/generic/mmap.c
===================================================================
--- libc/generic/mmap.c	(revision 7f079d9ccbd7dbd9cd0b1b84e53951d1acdb0b2b)
+++ libc/generic/mmap.c	(revision dc5a0fe1f6cd378525f19e69830be5e2cec0d779)
@@ -34,13 +34,13 @@
 	   off_t offset)
 {
+	int rc;
+
 	if (!start)
 		start = as_get_mappable_page(length);
 	
-	prot |= AS_AREA_CACHEABLE;
-	
 //	if (! ((flags & MAP_SHARED) ^ (flags & MAP_PRIVATE)))
-//		return NULL;
+//		return MAP_FAILED;
 	if (! (flags & MAP_ANONYMOUS))
-		return NULL;
+		return MAP_FAILED;
 
 	return as_area_create(start, length, prot);
Index: libc/generic/time.c
===================================================================
--- libc/generic/time.c	(revision 7f079d9ccbd7dbd9cd0b1b84e53951d1acdb0b2b)
+++ libc/generic/time.c	(revision dc5a0fe1f6cd378525f19e69830be5e2cec0d779)
@@ -74,5 +74,5 @@
 			_exit(1);
 		}
-		if (rights != (AS_AREA_READ | AS_AREA_CACHEABLE)) {
+		if (! (rights & AS_AREA_READ)) {
 			printf("Received bad rights on time area: %X\n",
 			       rights);
Index: libc/include/async.h
===================================================================
--- libc/include/async.h	(revision 7f079d9ccbd7dbd9cd0b1b84e53951d1acdb0b2b)
+++ libc/include/async.h	(revision dc5a0fe1f6cd378525f19e69830be5e2cec0d779)
@@ -47,4 +47,6 @@
 aid_t async_send_2(int phoneid, ipcarg_t method, ipcarg_t arg1, ipcarg_t arg2,
 		   ipc_call_t *dataptr);
+aid_t async_send_3(int phoneid, ipcarg_t method, ipcarg_t arg1, ipcarg_t arg2,
+		   ipcarg_t arg3, ipc_call_t *dataptr);
 void async_wait_for(aid_t amsgid, ipcarg_t *result);
 int async_wait_timeout(aid_t amsgid, ipcarg_t *retval, suseconds_t timeout);
@@ -69,4 +71,21 @@
 	return rc;
 }
+static inline ipcarg_t sync_send_3(int phoneid, ipcarg_t method, ipcarg_t arg1,
+				   ipcarg_t arg2, ipcarg_t arg3, ipcarg_t *r1, 
+				   ipcarg_t *r2, ipcarg_t *r3)
+{
+	ipc_call_t result;
+	ipcarg_t rc;
+
+	aid_t eid = async_send_3(phoneid, method, arg1, arg2, arg3, &result);
+	async_wait_for(eid, &rc);
+	if (r1) 
+		*r1 = IPC_GET_ARG1(result);
+	if (r2)
+		*r2 = IPC_GET_ARG2(result);
+	if (r3)
+		*r3 = IPC_GET_ARG3(result);
+	return rc;
+}
 
 
Index: libc/include/ipc/fb.h
===================================================================
--- libc/include/ipc/fb.h	(revision 7f079d9ccbd7dbd9cd0b1b84e53951d1acdb0b2b)
+++ libc/include/ipc/fb.h	(revision dc5a0fe1f6cd378525f19e69830be5e2cec0d779)
@@ -21,3 +21,7 @@
 #define FB_FLUSH             1037
 
+#define FB_DRAW_PPM          1038
+#define FB_PREPARE_SHM       1039
+#define FB_DROP_SHM          1040
+
 #endif
Index: libc/include/sys/mman.h
===================================================================
--- libc/include/sys/mman.h	(revision 7f079d9ccbd7dbd9cd0b1b84e53951d1acdb0b2b)
+++ libc/include/sys/mman.h	(revision dc5a0fe1f6cd378525f19e69830be5e2cec0d779)
@@ -32,4 +32,6 @@
 #include <as.h>
 
+#define MAP_FAILED  ((void *) -1)
+
 #define MAP_SHARED       (1 << 0)
 #define MAP_PRIVATE      (1 << 1)
