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.
This commit is contained in:
Norman Feske 2021-01-11 14:27:44 +01:00
parent a6a923c31b
commit 84443d6548
2 changed files with 59 additions and 0 deletions

View File

@ -0,0 +1,54 @@
#include <util/string.h>
#include <trace/policy.h>
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();
}

View File

@ -0,0 +1,5 @@
TARGET = div_zero_policy
TARGET_POLICY = div_zero
include $(PRG_DIR)/../policy.inc