if libc == "oldc" then "CONFIG_OLDC" else "CONFIG_NEWLIB",
if oneshot_timer then "CONFIG_ONESHOT_TIMER" else "",
if use_kaluga_dvm then "USE_KALUGA_DVM" else "",
- if heteropanda then "HETEROPANDA" else ""
++ if heteropanda then "HETEROPANDA" else "",
+ if caps_trace then "TRACE_PMEM_CAPS" else ""
], d /= "" ]
-- Sets the include path for the libc
return msgerr;
}
+ /**
++ * \brief Enable fine-grained tracing of cap operations on address range
++ * [start_addr, start_addr+size)
++ */
+errval_t debug_cap_trace_ctrl(bool enable, genpaddr_t start_addr, gensize_t size)
+{
+ if (enable) {
+ printf("enabling pmem tracing: 0x%"PRIxGENPADDR"--0x%"PRIxGENPADDR"\n",
+ start_addr, start_addr+size);
+ }
+ return sys_debug_cap_trace_ctrl(enable, start_addr, size);
+}
+
++/**
+ * \brief Dump own hw page tables
+ */
errval_t debug_dump_hw_ptables(void)
{
- errval_t err;
-
- struct monitor_blocking_rpc_client *r = get_monitor_blocking_rpc_client();
- err = r->vtbl.dump_hw_ptables(r, cap_dispatcher);
- if (err_is_fail(err)){
- return err;
- }
-
- return err;
+ return invoke_dispatcher_dump_ptables(cap_dispatcher);
}
void debug_printf(const char *fmt, ...)
void libc_exit(int status)
{
+ errval_t err;
+
+ if (!init_domain) {
+ terminal_exit();
+ }
+
// Use spawnd if spawned through spawnd
if(disp_get_domain_id() == 0) {
+#if 0 // XXX: revocation goes through the mon, but monitor ep is revoked in the process
errval_t err = cap_revoke(cap_dispatcher);
if (err_is_fail(err)) {
- sys_print("revoking dispatcher failed in _Exit, spinning!", 100);
+ DEBUG_ERR(err, "revoking dispatcher failed in _Exit, spinning!");
+ //sys_print("revoking dispatcher failed in _Exit, spinning!", 100);
while (1) {}
}
err = cap_delete(cap_dispatcher);