Index: generic/src/lib/elf.c
===================================================================
--- generic/src/lib/elf.c	(revision 5be19237d21f74d46fb963baab938dd33e90755e)
+++ generic/src/lib/elf.c	(revision e898a8d77f67f8d3d4d935a99363c68ad93f35af)
@@ -156,5 +156,5 @@
 {
 	as_area_t *a;
-	int i, type = 0;
+	int i, flags = 0;
 	size_t segment_size;
 	__u8 *segment;
@@ -172,11 +172,10 @@
 		return EE_MEMORY;
 	
-	if (entry->p_flags & PF_X) {
-		type = AS_AREA_TEXT;
-	} else if (entry->p_flags & PF_W) {
-		type = AS_AREA_DATA;
-	} else {
-		return EE_UNSUPPORTED;
-	}
+	if (entry->p_flags & PF_X)
+		flags |= AS_AREA_EXEC;
+	if (entry->p_flags & PF_W)
+		flags |= AS_AREA_WRITE;
+	if (entry->p_flags & PF_R)
+		flags |= AS_AREA_READ;
 
 	/*
@@ -195,5 +194,5 @@
 		segment = ((void *) elf) + entry->p_offset;
 
-	a = as_area_create(as, type, SIZE2FRAMES(entry->p_memsz), entry->p_vaddr);
+	a = as_area_create(as, flags, SIZE2FRAMES(entry->p_memsz), entry->p_vaddr);
 	if (!a)
 		return EE_IRRECOVERABLE;
