From 84443d654806f2b7e5bb3f3b9129f43747f611e7 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Mon, 11 Jan 2021 14:27:44 +0100 Subject: [PATCH] os: div_zero trace policy This trace policy can be used as a fault-injection mechanism. Once installed, the next time the traced thread passes a trace point (e.g., RPC call, RPC request, ...), the policy produces a divide-by-zero exception. --- .../src/lib/trace/policy/div_zero/policy.cc | 54 +++++++++++++++++++ .../src/lib/trace/policy/div_zero/target.mk | 5 ++ 2 files changed, 59 insertions(+) create mode 100644 repos/os/src/lib/trace/policy/div_zero/policy.cc create mode 100644 repos/os/src/lib/trace/policy/div_zero/target.mk diff --git a/repos/os/src/lib/trace/policy/div_zero/policy.cc b/repos/os/src/lib/trace/policy/div_zero/policy.cc new file mode 100644 index 0000000000..ce34e53a22 --- /dev/null +++ b/repos/os/src/lib/trace/policy/div_zero/policy.cc @@ -0,0 +1,54 @@ +#include +#include + +using namespace Genode; + +enum { MAX_EVENT_SIZE = 64 }; + +static inline int div_zero() +{ + static int zero; + + /* use variable to prevent compiler warning about division by zero */ + return 1 / zero; +} + +size_t max_event_size() +{ + return MAX_EVENT_SIZE; +} + +size_t log_output(char *dst, char const *log_message, size_t len) +{ + return div_zero(); +} + +size_t rpc_call(char *dst, char const *rpc_name, Msgbuf_base const &) +{ + return div_zero(); +} + +size_t rpc_returned(char *dst, char const *rpc_name, Msgbuf_base const &) +{ + return div_zero(); +} + +size_t rpc_dispatch(char *dst, char const *rpc_name) +{ + return div_zero(); +} + +size_t rpc_reply(char *dst, char const *rpc_name) +{ + return div_zero(); +} + +size_t signal_submit(char *dst, unsigned const) +{ + return div_zero(); +} + +size_t signal_receive(char *dst, Signal_context const &, unsigned) +{ + return div_zero(); +} diff --git a/repos/os/src/lib/trace/policy/div_zero/target.mk b/repos/os/src/lib/trace/policy/div_zero/target.mk new file mode 100644 index 0000000000..8b27a1666f --- /dev/null +++ b/repos/os/src/lib/trace/policy/div_zero/target.mk @@ -0,0 +1,5 @@ +TARGET = div_zero_policy + +TARGET_POLICY = div_zero + +include $(PRG_DIR)/../policy.inc