diff --git a/vl.c b/vl.c
index d8c7c01..bd60a89 100644
--- a/vl.c
+++ b/vl.c
@@ -3106,6 +3106,14 @@ int main(int argc, char **argv, char **envp)
         }
     }
 
+    if (xen_enabled()) {
+        /* Allocate only the minimum amount of memory for the code_gen_buffer.
+         * Xen does not use it and we need the virtual address space for the
+         * MapCache.
+         */
+        tb_size = 1;
+    }
+
     /* init the dynamic translator */
     cpu_exec_init_all(tb_size * 1024 * 1024);
 
