--- memory.c.orig	2011-01-24 14:53:31.000000000 -0700
+++ memory.c	2011-01-25 11:54:32.000000000 -0700
@@ -11286,16 +11286,16 @@ cmd_search(void)
         int c;
 	ulong start, end, mask, memtype, len;
 	ulong uvaddr_end;
-	int sflag;
+	int sflag, eflag;
 	struct meminfo meminfo;
 	ulong value_array[MAXARGS];
 	struct syment *sp;
 
-	start = end = mask = sflag = memtype = len = 0;
+	start = end = mask = sflag = eflag = memtype = len = 0;
 	uvaddr_end = COMMON_VADDR_SPACE() ? (ulong)(-1) : machdep->kvbase;
 	BZERO(value_array, sizeof(ulong) * MAXARGS);
 
-        while ((c = getopt(argcnt, args, "l:uks:e:v:m:")) != EOF) {
+        while ((c = getopt(argcnt, args, "l:ukKs:e:v:m:")) != EOF) {
                 switch(c)
                 {
 		case 'u':
@@ -11312,6 +11312,12 @@ cmd_search(void)
 			sflag++;
 			break;
 
+		case 'K':
+			if (eflag) 
+				error(INFO, "overriding previously set end address: %lx\n", 
+					end);
+			eflag++;
+			end = vt->vmalloc_start;
 		case 'k':
 			if (XEN_HYPER_MODE())
 				error(FATAL, 
@@ -11339,6 +11345,10 @@ cmd_search(void)
 			break;
 
 		case 'e':
+			if (eflag) 
+				error(INFO, "overriding previously set end address: %lx\n", 
+					end);
+			eflag++;
                         if ((sp = symbol_search(optarg)))
                                 end = sp->value;
                         else
