diff --git a/core/trace.cc b/core/trace.cc
index 5ad0a46a520311423b84d7475bcffe3a6a3cf199..de947eaca5fdc31b7c8222e476e1fb85a8961c52 100644
--- a/core/trace.cc
+++ b/core/trace.cc
@@ -47,7 +47,7 @@ tracepoint_patch_sites_type tracepoint_patch_sites;
 constexpr size_t trace_page_size = 4096;  // need not match arch page size
 constexpr unsigned max_trace = trace_page_size * 1024;
 
-char trace_log[max_trace] __attribute__((may_alias, aligned(sizeof(long))));
+char *trace_log __attribute__((may_alias));
 std::atomic<size_t> trace_record_last;
 bool trace_enabled;
 
@@ -62,6 +62,10 @@ void enable_trace()
 
 void enable_tracepoint(std::string wildcard)
 {
+    if (!trace_log) {
+        trace_log = (char *) aligned_alloc(sizeof(long), max_trace);
+        bzero(trace_log, max_trace);
+    }
     wildcard = boost::algorithm::replace_all_copy(wildcard, std::string("*"), std::string(".*"));
     wildcard = boost::algorithm::replace_all_copy(wildcard, std::string("?"), std::string("."));
     std::regex re{wildcard};
diff --git a/scripts/loader.py b/scripts/loader.py
index 6c7e6d3b3d4ec8cb14607718334a4de8e88213e6..86a48c6ef704588cb7cc2558ac0ba76ff21e7192 100644
--- a/scripts/loader.py
+++ b/scripts/loader.py
@@ -826,8 +826,10 @@ def all_traces():
 
     inf = gdb.selected_inferior()
     trace_log = gdb.lookup_global_symbol('trace_log').value()
+    if not trace_log:
+    	return
     max_trace = ulong(gdb.parse_and_eval('max_trace'))
-    trace_log = inf.read_memory(trace_log.address, max_trace)
+    trace_log = inf.read_memory(trace_log, max_trace)
     trace_page_size = ulong(gdb.parse_and_eval('trace_page_size'))
     last = ulong(gdb.lookup_global_symbol('trace_record_last').value()['_M_i'])
     last %= max_trace