diff --git a/util/m5/Makefile.aarch64 b/util/m5/Makefile.aarch64
index 47abca5..0818066 100644
--- a/util/m5/Makefile.aarch64
+++ b/util/m5/Makefile.aarch64
@@ -58,9 +58,13 @@
        -I$(PWD)/../../include -march=armv8-a
 LDFLAGS=-static -L. -lm5
 
-LIB_OBJS=m5op_arm_A64.o
+LIB_OBJS=m5op_arm_A64.o m5_mmap.o
 OBJS=m5.o
 JNI_OBJS=m5op_arm_A64.o jni_gem5Op.o
+LUA_OBJS=lua_gem5Op.o m5op_arm_A64.o m5_mmap.o
+
+### Need to install lua5.1 library to compile gem5OpLua.so
+LUA_HEADER_INCLUDE=$(shell pkg-config --cflags lua51) -I/usr/include/x86_64-linux-gnu
 
 all: libm5.a m5
 
@@ -71,10 +75,10 @@
 	$(CC)  $(CFLAGS) -o $@ -c $<
 
 m5: $(OBJS) libm5.a
-	$(CC) -o $@ $(OBJS) $(LDFLAGS)
+	$(CC) -o $@ $^ $(LDFLAGS)
 
 libm5.a: $(LIB_OBJS)
-	$(AR) rcs $@ $<
+	$(AR) rcs $@ $^
 
 gem5OpJni: gem5OpJni.jar $(JNI_OBJS)
 	$(CC) --shared -o lib$@.so $(JNI_OBJS)
@@ -84,5 +88,11 @@
 	$(JH) jni.gem5Op; \
 	$(JR) cvf $@ jni/*.class
 
+lua_gem5Op.o: lua_gem5Op.c
+	$(CC) $(CFLAGS) $(LUA_HEADER_INCLUDE) -o $@ -c $<
+
+gem5OpLua.so: $(LUA_OBJS)
+	$(CC) $(CFLAGS) $^ -o $@ -shared
+
 clean:
-	rm -f *.o m5 libgemOpJni.so gem5OpJni.jar jni/*.class libm5.a
+	rm -f *.o m5 libgem5OpJni.so gem5OpJni.jar jni/*.class libm5.a gem5OpLua.so
diff --git a/util/m5/Makefile.alpha b/util/m5/Makefile.alpha
index 591a06e..c21f67c 100644
--- a/util/m5/Makefile.alpha
+++ b/util/m5/Makefile.alpha
@@ -36,7 +36,7 @@
 LD=$(CROSS_COMPILE)ld
 
 CFLAGS=-O2 -I$(PWD)/../../include
-OBJS=m5.o m5op_alpha.o
+OBJS=m5.o m5op_alpha.o m5_mmap.o
 
 all: m5
 
diff --git a/util/m5/Makefile.arm b/util/m5/Makefile.arm
index 3e2842c..14d7353 100644
--- a/util/m5/Makefile.arm
+++ b/util/m5/Makefile.arm
@@ -58,9 +58,14 @@
        -I$(PWD)/../../include -march=armv7-a
 LDFLAGS=-L. -lm5 -static
 
-LIB_OBJS=m5op_arm.o
+LIB_OBJS=m5op_arm.o m5_mmap.o
 OBJS=m5.o
 JNI_OBJS=m5op_arm.o jni_gem5Op.o
+LUA_OBJS=lua_gem5Op.o m5op_arm.o m5_mmap.o
+
+### Need to install lua5.1 library to compile gem5OpLua.so
+LUA_HEADER_INCLUDE=$(shell pkg-config --cflags lua51) \
+	-I/usr/include/x86_64-linux-gnu
 
 all: libm5.a m5
 
@@ -71,10 +76,10 @@
 	$(CC)  $(CFLAGS) -o $@ -c $<
 
 m5: $(OBJS) libm5.a
-	$(CC) -o $@ $(OBJS) $(LDFLAGS)
+	$(CC) -o $@ $^ $(LDFLAGS)
 
 libm5.a: $(LIB_OBJS)
-	$(AR) rcs $@ $<
+	$(AR) rcs $@ $^
 
 gem5OpJni: gem5OpJni.jar $(JNI_OBJS)
 	$(CC) --shared -o lib$@.so $(JNI_OBJS)
@@ -84,6 +89,12 @@
 	$(JH) jni.gem5Op; \
 	$(JR) cvf $@ jni/*.class
 
+lua_gem5Op.o: lua_gem5Op.c
+	$(CC) $(CFLAGS) $(LUA_HEADER_INCLUDE) -o $@ -c $< -fPIC
+
+gem5OpLua.so: $(LUA_OBJS)
+	$(CC) $(CFLAGS) $^ -o $@ -shared
+
 clean:
 	rm -f *.o m5 libgem5OpJni.so gem5OpJni.jar jni/*.class libm5.a \
-	jni_gem5Op.h
+	jni_gem5Op.h gem5OpLua.so
diff --git a/util/m5/Makefile.sparc b/util/m5/Makefile.sparc
index b3cb1a6..e1b17ea 100644
--- a/util/m5/Makefile.sparc
+++ b/util/m5/Makefile.sparc
@@ -36,7 +36,7 @@
 LD=$(CROSS_COMPILE)ld
 
 CFLAGS=-O2 -m64 -I$(PWD)/../../include
-OBJS=m5.o m5op_sparc.o
+OBJS=m5.o m5op_sparc.o m5_mmap.o
 
 all: m5
 
diff --git a/util/m5/Makefile.thumb b/util/m5/Makefile.thumb
index 397b8f7..60b6803 100644
--- a/util/m5/Makefile.thumb
+++ b/util/m5/Makefile.thumb
@@ -54,8 +54,7 @@
 LDFLAGS=-L. -lm5
 
 OBJS=m5.o
-LIB_OBJS=m5op_arm.o
-
+LIB_OBJS=m5op_arm.o m5_mmap.o
 
 all: libm5.a m5
 
@@ -65,11 +64,11 @@
 %.o: %.c
 	$(CC)  $(CFLAGS) -o $@ -c $<
 
-m5: $(OBJS)
+m5: $(OBJS) libm5.a
 	$(CC) -o $@ -march=armv7 -mthumb $(OBJS) $(LDFLAGS)
 
 libm5.a: $(LIB_OBJS)
-	$(AR) rcs $@ $<
+	$(AR) rcs $@ $^
 
 
 clean:
diff --git a/util/m5/Makefile.x86 b/util/m5/Makefile.x86
index 5ea29cc..890e4b1 100644
--- a/util/m5/Makefile.x86
+++ b/util/m5/Makefile.x86
@@ -32,7 +32,9 @@
 LD=ld
 
 CFLAGS=-O2 -DM5OP_ADDR=0xFFFF0000 -I$(PWD)/../../include
-OBJS=m5.o m5op_x86.o
+OBJS=m5.o m5op_x86.o m5_mmap.o
+LUA_HEADER_INCLUDE=$(shell pkg-config --cflags-only-I lua51)
+LUA_OBJS=lua_gem5Op.opic m5op_x86.opic m5_mmap.opic
 
 all: m5
 
@@ -40,10 +42,25 @@
 	$(CC) $(CFLAGS) -o $@ -c $<
 
 %.o: %.c
-	$(CC)  $(CFLAGS) -o $@ -c $<
+	$(CC) $(CFLAGS) -o $@ -c $<
+
+%.opic : %.S
+	$(CC) $(CFLAGS) -fPIC -o $@ -c $<
+
+%.opic : %.c
+	$(CC) $(CFLAGS) -fPIC -o $@ -c $<
 
 m5: $(OBJS)
 	$(CC) -o $@ $(OBJS)
 
+m5op_x86.opic: m5op_x86.S
+	$(CC) $(CFLAGS) -DM5OP_PIC -fPIC -o $@ -c $<
+
+lua_gem5Op.opic: lua_gem5Op.c
+	$(CC) $(CFLAGS) $(LUA_HEADER_INCLUDE) -fPIC -o $@ -c $<
+
+gem5OpLua.so: $(LUA_OBJS)
+	$(CC) $(CFLAGS) -fPIC $^ -o $@ -shared
+
 clean:
-	rm -f *.o m5
+	rm -f *.o *.opic m5 gem5OpLua.so
diff --git a/util/m5/lua_gem5Op.c b/util/m5/lua_gem5Op.c
new file mode 100644
index 0000000..5981877
--- /dev/null
+++ b/util/m5/lua_gem5Op.c
@@ -0,0 +1,280 @@
+/* Copyright (c) 2017 Hanhwi Jang
+ * All rights reserved.
+
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Hanhwi Jang
+ */
+
+
+#include <assert.h>
+#include <lauxlib.h>
+#include <lua.h>
+#include <lualib.h>
+#include <stdlib.h>
+
+#include <gem5/m5ops.h>
+
+#include "m5_mmap.h"
+
+static int
+do_arm(lua_State *L)
+{
+    uint64_t address = lua_tointeger(L, 1);
+    m5_arm(address);
+    return 0;
+}
+
+static int
+do_quiesce(lua_State *L)
+{
+    m5_quiesce();
+    return 0;
+}
+
+static int
+do_quiesce_ns(lua_State *L)
+{
+    uint64_t ns = lua_tointeger(L, 1);
+    m5_quiesce_ns(ns);
+    return 0;
+}
+
+static int
+do_quiesce_cycle(lua_State *L)
+{
+    uint64_t cycles = lua_tointeger(L, 1);
+    m5_quiesce_cycle(cycles);
+    return 0;
+}
+
+static int
+do_quiesce_time(lua_State *L)
+{
+    uint64_t ns = m5_quiesce_time();
+    lua_pushinteger(L, ns);
+    return 1;
+}
+
+static int
+do_rpns(lua_State *L)
+{
+    uint64_t ns = m5_rpns();
+    lua_pushinteger(L, ns);
+    return 1;
+}
+
+static int
+do_wake_cpu(lua_State *L)
+{
+    uint64_t cpuid = lua_tointeger(L, 1);
+    m5_wake_cpu(cpuid);
+    return 0;
+}
+
+static int
+do_exit(lua_State *L)
+{
+    uint64_t ns_delay = lua_tointeger(L, 1);
+    m5_exit(ns_delay);
+    return 0;
+}
+
+static int
+do_fail(lua_State *L)
+{
+    uint64_t ns_delay = lua_tointeger(L, 1);
+    uint64_t code = lua_tointeger(L, 2);
+    m5_fail(ns_delay, code);
+    return 0;
+}
+
+static int
+do_init_param(lua_State *L)
+{
+    uint64_t key_str1 = lua_tointeger(L, 1);
+    uint64_t key_str2 = lua_tointeger(L, 2);
+    lua_pushinteger(L, m5_init_param(key_str1, key_str2));
+    return 1;
+}
+
+static int
+do_checkpoint(lua_State *L)
+{
+    uint64_t delay = lua_tointeger(L, 1);
+    uint64_t period = lua_tointeger(L, 2);
+    m5_checkpoint(delay, period);
+    return 0;
+}
+
+static int
+do_reset_stats(lua_State *L)
+{
+    uint64_t ns_delay = lua_tointeger(L, 1);
+    uint64_t ns_period = lua_tointeger(L, 2);
+    m5_reset_stats(ns_delay, ns_period);
+    return 0;
+}
+
+static int
+do_dump_stats(lua_State *L)
+{
+    uint64_t delay = lua_tointeger(L, 1);
+    uint64_t period = lua_tointeger(L, 2);
+    m5_dump_stats(delay, period);
+    return 0;
+}
+
+static int
+do_dump_reset_stats(lua_State *L)
+{
+    uint64_t delay = lua_tointeger(L, 1);
+    uint64_t period = lua_tointeger(L, 2);
+    m5_dump_reset_stats(delay, period);
+    return 0;
+}
+
+static int
+do_read_file(lua_State *L)
+{
+    uint64_t len = lua_tointeger(L, 1);
+    uint64_t offset = lua_tointeger(L, 2);
+    char *buf = malloc(len);
+    uint64_t readlen = m5_read_file(buf, len, offset);
+    lua_pushlstring(L, buf, readlen);
+    return 1;
+}
+
+static int
+do_write_file(lua_State *L)
+{
+    const char* buf = lua_tostring(L, 1);
+    uint64_t len = lua_tointeger(L, 2);
+    assert(len <= lua_strlen(L, 1));
+    uint64_t offset = lua_tointeger(L, 3);
+    const char *filename = lua_tostring(L, 4);
+    uint64_t w_len = m5_write_file((void *)buf, len, offset, filename);
+    lua_pushinteger(L, w_len);
+    return 1;
+}
+
+static int
+do_debug_break(lua_State *L)
+{
+    m5_debug_break();
+    return 0;
+}
+
+static int
+do_switch_cpu(lua_State *L)
+{
+    m5_switch_cpu();
+    return 0;
+}
+
+static int
+do_dist_toggle_sync(lua_State *L)
+{
+    m5_dist_toggle_sync();
+    return 0;
+}
+
+static int
+do_add_symbol(lua_State *L)
+{
+    uint64_t addr = lua_tointeger(L, 1);
+    char *string = (char*) lua_tostring(L, 2);
+    m5_add_symbol(addr, string);
+    return 0;
+}
+
+static int
+do_loadsymbol(lua_State *L)
+{
+    m5_load_symbol();
+    return 0;
+}
+
+static int
+do_panic(lua_State *L)
+{
+    m5_panic();
+    return 0;
+}
+
+static int
+do_work_begin(lua_State *L)
+{
+    uint64_t workid = lua_tointeger(L, 1);
+    uint64_t threadid = lua_tointeger(L, 2);
+    m5_work_begin(workid, threadid);
+    return 0;
+}
+
+static int
+do_work_end(lua_State *L)
+{
+    uint64_t workid = lua_tointeger(L, 1);
+    uint64_t threadid = lua_tointeger(L, 2);
+    m5_work_end(workid, threadid);
+    return 0;
+}
+
+int
+luaopen_gem5OpLua(lua_State *L)
+{
+    map_m5_mem();
+#define ADD_FUNC(fname) do{                         \
+        lua_pushcfunction(L, fname);                \
+        lua_setfield(L, -2, #fname);                \
+    }while (0)
+
+    lua_newtable(L);
+    ADD_FUNC(do_arm);
+    ADD_FUNC(do_quiesce);
+    ADD_FUNC(do_quiesce_ns);
+    ADD_FUNC(do_quiesce_cycle);
+    ADD_FUNC(do_quiesce_time);
+    ADD_FUNC(do_rpns);
+    ADD_FUNC(do_wake_cpu);
+    ADD_FUNC(do_exit);
+    ADD_FUNC(do_fail);
+    ADD_FUNC(do_init_param);
+    ADD_FUNC(do_checkpoint);
+    ADD_FUNC(do_reset_stats);
+    ADD_FUNC(do_dump_stats);
+    ADD_FUNC(do_dump_reset_stats);
+    ADD_FUNC(do_read_file);
+    ADD_FUNC(do_write_file);
+    ADD_FUNC(do_debug_break);
+    ADD_FUNC(do_switch_cpu);
+    ADD_FUNC(do_dist_toggle_sync);
+    ADD_FUNC(do_add_symbol);
+    ADD_FUNC(do_loadsymbol);
+    ADD_FUNC(do_panic);
+    ADD_FUNC(do_work_begin);
+    ADD_FUNC(do_work_end);
+#undef ADD_FUNC
+    return 1;
+}
diff --git a/util/m5/m5.c b/util/m5/m5.c
index 38da9dc..48b8ed9 100644
--- a/util/m5/m5.c
+++ b/util/m5/m5.c
@@ -58,8 +58,7 @@
 #include <unistd.h>
 
 #include <gem5/m5ops.h>
-
-void *m5_mem = NULL;
+#include "m5_mmap.h"
 
 char *progname;
 char *command = "unspecified";
@@ -375,27 +374,6 @@
     exit(1);
 }
 
-static void
-map_m5_mem()
-{
-#ifdef M5OP_ADDR
-    int fd;
-
-    fd = open("/dev/mem", O_RDWR | O_SYNC);
-    if (fd == -1) {
-        perror("Can't open /dev/mem");
-        exit(1);
-    }
-
-    m5_mem = mmap(NULL, 0x10000, PROT_READ | PROT_WRITE, MAP_SHARED, fd,
-                  M5OP_ADDR);
-    if (!m5_mem) {
-        perror("Can't mmap /dev/mem");
-        exit(1);
-    }
-#endif
-}
-
 int
 main(int argc, char *argv[])
 {
diff --git a/util/m5/m5_mmap.c b/util/m5/m5_mmap.c
new file mode 100644
index 0000000..dfb6b45
--- /dev/null
+++ b/util/m5/m5_mmap.c
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2011, 2017 ARM Limited
+ * All rights reserved
+ *
+ * The license below extends only to copyright in the software and shall
+ * not be construed as granting a license to any other intellectual
+ * property including but not limited to intellectual property relating
+ * to a hardware implementation of the functionality of the software
+ * licensed hereunder.  You may use the software subject to the license
+ * terms below provided that you ensure that this notice is replicated
+ * unmodified and in its entirety in all distributions of the software,
+ * modified or unmodified, in source code or in binary form.
+ *
+ * Copyright (c) 2003-2005 The Regents of The University of Michigan
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Nathan Binkert
+ */
+
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/mman.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+
+#include "m5_mmap.h"
+
+void *m5_mem = NULL;
+
+void
+map_m5_mem()
+{
+#ifdef M5OP_ADDR
+    int fd;
+
+    fd = open("/dev/mem", O_RDWR | O_SYNC);
+    if (fd == -1) {
+        perror("Can't open /dev/mem");
+        exit(1);
+    }
+
+    m5_mem = mmap(NULL, 0x10000, PROT_READ | PROT_WRITE, MAP_SHARED, fd,
+                  M5OP_ADDR);
+    if (!m5_mem) {
+        perror("Can't mmap /dev/mem");
+        exit(1);
+    }
+#endif
+}
diff --git a/util/m5/m5_mmap.h b/util/m5/m5_mmap.h
new file mode 100644
index 0000000..077704d
--- /dev/null
+++ b/util/m5/m5_mmap.h
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2011, 2017 ARM Limited
+ * All rights reserved
+ *
+ * The license below extends only to copyright in the software and shall
+ * not be construed as granting a license to any other intellectual
+ * property including but not limited to intellectual property relating
+ * to a hardware implementation of the functionality of the software
+ * licensed hereunder.  You may use the software subject to the license
+ * terms below provided that you ensure that this notice is replicated
+ * unmodified and in its entirety in all distributions of the software,
+ * modified or unmodified, in source code or in binary form.
+ *
+ * Copyright (c) 2003-2005 The Regents of The University of Michigan
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Nathan Binkert
+ */
+
+#ifndef __UTIL_M5_MMAP_H__
+#define __UTIL_M5_MMAP_H__
+
+#include <fcntl.h>
+#include <sys/mman.h>
+
+extern void *m5_mem;
+
+void map_m5_mem();
+
+#endif
diff --git a/util/m5/m5op_x86.S b/util/m5/m5op_x86.S
index 69995e0..2a8abbb 100644
--- a/util/m5/m5op_x86.S
+++ b/util/m5/m5op_x86.S
@@ -58,6 +58,7 @@
         mov 0(%r11, %rax, 1), %rax;       \
         ret;                              \
         .endfunc;
+
 #else
 /* Use the magic instruction based m5op interface. This does not work
  * in virtualized environments.
