From ac0ecdf855f610d4d02a43bcaa7ad3b7ba74daef Mon Sep 17 00:00:00 2001 From: Sebastian Sumpf Date: Fri, 3 May 2019 15:56:58 +0200 Subject: [PATCH] base: make trace resumable revert relocations so a paused subject can resume without changing its policy. issue #3294 --- repos/base/src/lib/base/trace.cc | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/repos/base/src/lib/base/trace.cc b/repos/base/src/lib/base/trace.cc index 15b1ef8e50..9a38743a54 100644 --- a/repos/base/src/lib/base/trace.cc +++ b/repos/base/src/lib/base/trace.cc @@ -60,6 +60,11 @@ bool Trace::Logger::_evaluate_control() /* unload policy */ if (policy_module) { + + /* revoke relocations */ + for (unsigned i = 0; i < sizeof(Trace::Policy_module)/sizeof(void *); i++) { + ((addr_t *)policy_module)[i] -= (addr_t)(policy_module); + } _env().rm().detach(policy_module); policy_module = 0; } @@ -82,7 +87,8 @@ bool Trace::Logger::_evaluate_control() } } - if (enabled && (policy_version != control->policy_version())) { + bool const new_policy = policy_version != control->policy_version(); + if (enabled && (new_policy || policy_module == 0)) { /* suppress tracing during policy change */ Control::Inhibit_guard guard(*control);