Index: generic/src/mm/as.c
===================================================================
--- generic/src/mm/as.c	(revision 97b64c9a8c30d38f7f076b283af6a48f36221dd5)
+++ generic/src/mm/as.c	(revision 2fb49101b3edd232809fe96fa77e9f11f4ce946a)
@@ -120,5 +120,5 @@
  *
  * @param as Target address space.
- * @param type Type of area.
+ * @param flags Flags of the area.
  * @param size Size of area in multiples of PAGE_SIZE.
  * @param base Base address of area.
@@ -126,5 +126,5 @@
  * @return Address space area on success or NULL on failure.
  */
-as_area_t *as_area_create(as_t *as, as_area_type_t type, size_t size, __address base)
+as_area_t *as_area_create(as_t *as, int flags, size_t size, __address base)
 {
 	ipl_t ipl;
@@ -146,5 +146,5 @@
 	
 	link_initialize(&a->link);			
-	a->type = type;
+	a->flags = flags;
 	a->size = size;
 	a->base = base;
@@ -327,15 +327,14 @@
 	int flags;
 
-	switch (a->type) {
-		case AS_AREA_TEXT:
-			flags = PAGE_EXEC | PAGE_READ | PAGE_USER | PAGE_PRESENT | PAGE_CACHEABLE;
-			break;
-		case AS_AREA_DATA:
-		case AS_AREA_STACK:
-			flags = PAGE_READ | PAGE_WRITE | PAGE_USER | PAGE_PRESENT | PAGE_CACHEABLE;
-			break;
-		default:
-			panic("unexpected as_area_type_t %d", a->type);
-	}
+	flags = PAGE_USER | PAGE_PRESENT | PAGE_CACHEABLE;
+	
+	if (a->flags & AS_AREA_READ)
+		flags |= PAGE_READ;
+		
+	if (a->flags & AS_AREA_WRITE)
+		flags |= PAGE_WRITE;
+	
+	if (a->flags & AS_AREA_EXEC)
+		flags |= PAGE_EXEC;
 	
 	return flags;
