Index: kernel/arch/ia64/include/mm/as.h
===================================================================
--- kernel/arch/ia64/include/mm/as.h	(revision 57355a400e355b3d0ac3ef931c3b13184ec81c26)
+++ kernel/arch/ia64/include/mm/as.h	(revision d1e844029e7efa0c93a3a78b306a196e4af6da8f)
@@ -43,6 +43,4 @@
 #define USER_ADDRESS_SPACE_END_ARCH      UINT64_C(0xdfffffffffffffff)
 
-#define USTACK_ADDRESS_ARCH  UINT64_C(0x0000000ff0000000)
-
 typedef struct {
 } as_arch_t;
Index: kernel/generic/include/mm/as.h
===================================================================
--- kernel/generic/include/mm/as.h	(revision 57355a400e355b3d0ac3ef931c3b13184ec81c26)
+++ kernel/generic/include/mm/as.h	(revision d1e844029e7efa0c93a3a78b306a196e4af6da8f)
@@ -61,10 +61,4 @@
 #define USER_ADDRESS_SPACE_END      USER_ADDRESS_SPACE_END_ARCH
 
-#ifdef USTACK_ADDRESS_ARCH
-	#define USTACK_ADDRESS  USTACK_ADDRESS_ARCH
-#else
-	#define USTACK_ADDRESS  (USER_ADDRESS_SPACE_END - (STACK_SIZE - 1))
-#endif
-
 /** Kernel address space. */
 #define FLAG_AS_KERNEL  (1 << 0)
Index: kernel/generic/src/proc/program.c
===================================================================
--- kernel/generic/src/proc/program.c	(revision 57355a400e355b3d0ac3ef931c3b13184ec81c26)
+++ kernel/generic/src/proc/program.c	(revision d1e844029e7efa0c93a3a78b306a196e4af6da8f)
@@ -79,9 +79,14 @@
 	 * Create the stack address space area.
 	 */
-	uintptr_t virt = USTACK_ADDRESS;
+	uintptr_t virt = (uintptr_t) -1;
+	uintptr_t bound = USER_ADDRESS_SPACE_END - (STACK_SIZE_USER - 1);
+
+	/* Adjust bound to create space for the desired guard page. */
+	bound -= PAGE_SIZE;
+
 	as_area_t *area = as_area_create(as,
 	    AS_AREA_READ | AS_AREA_WRITE | AS_AREA_CACHEABLE | AS_AREA_GUARD |
 	    AS_AREA_LATE_RESERVE, STACK_SIZE_USER, AS_AREA_ATTR_NONE,
-	    &anon_backend, NULL, &virt, 0);
+	    &anon_backend, NULL, &virt, bound);
 	if (!area) {
 		task_destroy(prg->task);
