From 01c1321b483ab649b574d7c5036ef76e6e0e701d Mon Sep 17 00:00:00 2001 From: Horst Schirmeier Date: Thu, 13 Feb 2014 18:29:15 +0100 Subject: [PATCH] tracing: bugfix for mem dereferences at mapping boundary As we copy a 32-bit word from the dereferenced address, we also need to check whether address+3 is also mapped. (Yes, I've seen this in the wild.) Change-Id: I43f891c56e077333670c9cb48c0ee8e9342fa41d --- src/plugins/tracing/TracingPlugin.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/tracing/TracingPlugin.cc b/src/plugins/tracing/TracingPlugin.cc index 3b9555d8..fbae8923 100644 --- a/src/plugins/tracing/TracingPlugin.cc +++ b/src/plugins/tracing/TracingPlugin.cc @@ -117,7 +117,7 @@ bool TracingPlugin::run() Trace_Event_Extended_Registers *er = ext.add_registers(); er->set_id((*it)->getId()); er->set_value(simulator.getCPU(0).getRegisterContent(*it)); - if (mm.isMapped(er->value())) { + if (mm.isMapped(er->value()) && mm.isMapped(er->value() + 3)) { uint32_t value_deref; mm.getBytes(er->value(), 4, &value_deref); er->set_value_deref(value_deref);