mirror of
https://github.com/genodelabs/genode.git
synced 2025-01-30 16:14:13 +00:00
base-*: remove usage of printf
base generic code: * Remove unused verbosity code from mmio framework * Remove escape sequence end heuristic from LOG * replace Core_console with Core_log (no format specifiers) * move test/printf to test/log * remove `printf()` tests from the log test * check for exact match of the log test output base-fiasco: * remove unused Fiasco::print_l4_threadid function base-nova: * remove unused hexdump utility from core base-hw: * remove unused Kernel::Thread::_print_* debug utilities * always print resource summary of core during startup * remove Kernel::Ipc_node::pd_label (not used anymore) base*: * Turn `printf`,`PWRN`, etc. calls into their log equivalents Ref #1987 Fix #2119
This commit is contained in:
parent
e864e84c5a
commit
2a2e5c2df4
20
repos/base-fiasco/src/core/core_log.cc
Normal file
20
repos/base-fiasco/src/core/core_log.cc
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
/*
|
||||||
|
* \brief Kernel-specific core's 'log' backend
|
||||||
|
* \author Stefan Kalkowski
|
||||||
|
* \date 2016-10-10
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2016 Genode Labs GmbH
|
||||||
|
*
|
||||||
|
* This file is part of the Genode OS framework, which is distributed
|
||||||
|
* under the terms of the GNU General Public License version 2.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* core includes */
|
||||||
|
#include <core_log.h>
|
||||||
|
|
||||||
|
namespace Fiasco {
|
||||||
|
#include <l4/sys/kdebug.h>
|
||||||
|
}
|
||||||
|
void Genode::Core_log::out(char const c) { Fiasco::outchar(c); }
|
@ -18,7 +18,6 @@
|
|||||||
|
|
||||||
/* Genode includes */
|
/* Genode includes */
|
||||||
#include <base/stdint.h>
|
#include <base/stdint.h>
|
||||||
#include <base/printf.h>
|
|
||||||
#include <region_map/region_map.h>
|
#include <region_map/region_map.h>
|
||||||
#include <util/touch.h>
|
#include <util/touch.h>
|
||||||
|
|
||||||
|
@ -338,7 +338,7 @@ static Fiasco::l4_kernel_info_t *get_kip()
|
|||||||
amok = true;
|
amok = true;
|
||||||
}
|
}
|
||||||
if (!l4_ipc_fpage_received(r)) {
|
if (!l4_ipc_fpage_received(r)) {
|
||||||
printf("No fpage received\n");
|
warning("No fpage received");
|
||||||
amok = true;
|
amok = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,8 +35,9 @@ void Rm_client::unmap(addr_t core_local_base, addr_t virt_base, size_t size)
|
|||||||
*/
|
*/
|
||||||
if (verbose_unmap) {
|
if (verbose_unmap) {
|
||||||
Fiasco::l4_threadid_t tid; tid.raw = badge();
|
Fiasco::l4_threadid_t tid; tid.raw = badge();
|
||||||
printf("RM client %p (%x.%x) unmap core-local [%lx,%lx)\n",
|
log("RM client ", this, " (", (unsigned)tid.id.task, ".",
|
||||||
this, tid.id.task, tid.id.lthread, core_local_base, core_local_base + size);
|
(unsigned)tid.id.lthread, ") unmap core-local [",
|
||||||
|
Hex(core_local_base), ",", Hex(core_local_base + size), ")");
|
||||||
}
|
}
|
||||||
|
|
||||||
using namespace Fiasco;
|
using namespace Fiasco;
|
||||||
|
@ -3,7 +3,7 @@ TARGET = core
|
|||||||
GEN_CORE_DIR = $(BASE_DIR)/src/core
|
GEN_CORE_DIR = $(BASE_DIR)/src/core
|
||||||
|
|
||||||
SRC_CC += stack_area.cc \
|
SRC_CC += stack_area.cc \
|
||||||
core_printf.cc \
|
core_log.cc \
|
||||||
core_region_map.cc \
|
core_region_map.cc \
|
||||||
core_rpc_cap_alloc.cc \
|
core_rpc_cap_alloc.cc \
|
||||||
cpu_session_component.cc \
|
cpu_session_component.cc \
|
||||||
@ -74,5 +74,4 @@ vpath default_log.cc $(GEN_CORE_DIR)
|
|||||||
vpath dump_alloc.cc $(GEN_CORE_DIR)
|
vpath dump_alloc.cc $(GEN_CORE_DIR)
|
||||||
vpath stack_area.cc $(GEN_CORE_DIR)
|
vpath stack_area.cc $(GEN_CORE_DIR)
|
||||||
vpath pager_ep.cc $(GEN_CORE_DIR)
|
vpath pager_ep.cc $(GEN_CORE_DIR)
|
||||||
vpath core_printf.cc $(BASE_DIR)/src/lib/base
|
|
||||||
vpath %.cc $(REP_DIR)/src/core
|
vpath %.cc $(REP_DIR)/src/core
|
||||||
|
@ -1,35 +0,0 @@
|
|||||||
/*
|
|
||||||
* \brief Console backend using the Fiasco kernel debugger
|
|
||||||
* \author Norman Feske
|
|
||||||
* \date 2006-04-08
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Copyright (C) 2006-2013 Genode Labs GmbH
|
|
||||||
*
|
|
||||||
* This file is part of the Genode OS framework, which is distributed
|
|
||||||
* under the terms of the GNU General Public License version 2.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _INCLUDE__BASE__INTERNAL__CORE_CONSOLE_H_
|
|
||||||
#define _INCLUDE__BASE__INTERNAL__CORE_CONSOLE_H_
|
|
||||||
|
|
||||||
/* Fiasco includes */
|
|
||||||
namespace Fiasco {
|
|
||||||
#include <l4/sys/kdebug.h>
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Genode includes */
|
|
||||||
#include <base/console.h>
|
|
||||||
|
|
||||||
namespace Genode {
|
|
||||||
|
|
||||||
class Core_console : public Console
|
|
||||||
{
|
|
||||||
protected:
|
|
||||||
|
|
||||||
void _out_char(char c) { Fiasco::outchar(c); }
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* _INCLUDE__BASE__INTERNAL__CORE_CONSOLE_H_ */
|
|
@ -14,20 +14,9 @@
|
|||||||
#ifndef _INCLUDE__FIASCO__THREAD_HELPER_H_
|
#ifndef _INCLUDE__FIASCO__THREAD_HELPER_H_
|
||||||
#define _INCLUDE__FIASCO__THREAD_HELPER_H_
|
#define _INCLUDE__FIASCO__THREAD_HELPER_H_
|
||||||
|
|
||||||
#include <base/printf.h>
|
|
||||||
|
|
||||||
namespace Fiasco {
|
namespace Fiasco {
|
||||||
#include <l4/sys/types.h>
|
#include <l4/sys/types.h>
|
||||||
|
|
||||||
inline void print_l4_threadid(l4_threadid_t t)
|
|
||||||
{
|
|
||||||
Genode::printf("THREAD %x.%02x\n", t.id.task, t.id.lthread);
|
|
||||||
Genode::printf(" unsigned version_low:10 = %x\n", t.id.version_low);
|
|
||||||
Genode::printf(" unsigned lthread:7 = %x\n", t.id.lthread);
|
|
||||||
Genode::printf(" unsigned task:11 = %x\n", t.id.task);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sigma0 thread ID
|
* Sigma0 thread ID
|
||||||
*
|
*
|
||||||
|
@ -15,7 +15,6 @@
|
|||||||
#include <base/cancelable_lock.h>
|
#include <base/cancelable_lock.h>
|
||||||
#include <cpu/atomic.h>
|
#include <cpu/atomic.h>
|
||||||
#include <cpu/memory_barrier.h>
|
#include <cpu/memory_barrier.h>
|
||||||
#include <base/printf.h>
|
|
||||||
|
|
||||||
/* L4/Fiasco includes */
|
/* L4/Fiasco includes */
|
||||||
namespace Fiasco {
|
namespace Fiasco {
|
||||||
|
20
repos/base-foc/src/core/core_log.cc
Normal file
20
repos/base-foc/src/core/core_log.cc
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
/*
|
||||||
|
* \brief Kernel-specific core's 'log' backend
|
||||||
|
* \author Stefan Kalkowski
|
||||||
|
* \date 2016-10-10
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2016 Genode Labs GmbH
|
||||||
|
*
|
||||||
|
* This file is part of the Genode OS framework, which is distributed
|
||||||
|
* under the terms of the GNU General Public License version 2.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* core includes */
|
||||||
|
#include <core_log.h>
|
||||||
|
|
||||||
|
namespace Fiasco {
|
||||||
|
#include <l4/sys/kdebug.h>
|
||||||
|
}
|
||||||
|
void Genode::Core_log::out(char const c) { Fiasco::outchar(c); }
|
@ -17,7 +17,6 @@
|
|||||||
#define _CORE__INCLUDE__IRQ_OBJECT_H_
|
#define _CORE__INCLUDE__IRQ_OBJECT_H_
|
||||||
|
|
||||||
/* Genode includes */
|
/* Genode includes */
|
||||||
#include <base/printf.h>
|
|
||||||
#include <irq_session/irq_session.h>
|
#include <irq_session/irq_session.h>
|
||||||
#include <cap_index.h>
|
#include <cap_index.h>
|
||||||
|
|
||||||
|
@ -56,7 +56,8 @@ namespace Genode {
|
|||||||
L4_BASE_TASK_CAP,
|
L4_BASE_TASK_CAP,
|
||||||
snd_fpage,
|
snd_fpage,
|
||||||
to_addr + offset))) {
|
to_addr + offset))) {
|
||||||
PWRN("could not locally remap 0x%lx to 0x%lx", from_addr, to_addr);
|
warning("could not locally remap ", (void*)from_addr, " to ",
|
||||||
|
(void*)to_addr);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,6 @@
|
|||||||
|
|
||||||
/* Genode includes */
|
/* Genode includes */
|
||||||
#include <base/stdint.h>
|
#include <base/stdint.h>
|
||||||
#include <base/printf.h>
|
|
||||||
#include <rm_session/rm_session.h>
|
#include <rm_session/rm_session.h>
|
||||||
#include <util/touch.h>
|
#include <util/touch.h>
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* Genode includes */
|
/* Genode includes */
|
||||||
#include <base/printf.h>
|
#include <base/log.h>
|
||||||
|
|
||||||
/* core includes */
|
/* core includes */
|
||||||
#include <native_cpu_component.h>
|
#include <native_cpu_component.h>
|
||||||
@ -42,7 +42,7 @@ void Genode::Native_cpu_component::enable_vcpu(Genode::Thread_capability thread_
|
|||||||
|
|
||||||
l4_msgtag_t tag = l4_thread_vcpu_control(tid, vcpu_state);
|
l4_msgtag_t tag = l4_thread_vcpu_control(tid, vcpu_state);
|
||||||
if (l4_msgtag_has_error(tag))
|
if (l4_msgtag_has_error(tag))
|
||||||
PWRN("l4_thread_vcpu_control failed");
|
warning("l4_thread_vcpu_control failed");
|
||||||
};
|
};
|
||||||
_thread_ep.apply(thread_cap, lambda);
|
_thread_ep.apply(thread_cap, lambda);
|
||||||
}
|
}
|
||||||
@ -81,7 +81,7 @@ Genode::Native_capability Genode::Native_cpu_component::alloc_irq()
|
|||||||
Cap_index* i = cap_map()->insert(platform_specific()->cap_id_alloc()->alloc());
|
Cap_index* i = cap_map()->insert(platform_specific()->cap_id_alloc()->alloc());
|
||||||
l4_msgtag_t res = l4_factory_create_irq(L4_BASE_FACTORY_CAP, i->kcap());
|
l4_msgtag_t res = l4_factory_create_irq(L4_BASE_FACTORY_CAP, i->kcap());
|
||||||
if (l4_error(res)) {
|
if (l4_error(res)) {
|
||||||
PWRN("Allocation of irq object failed!");
|
warning("Allocation of irq object failed!");
|
||||||
return Genode::Native_capability();
|
return Genode::Native_capability();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -48,8 +48,8 @@ int Platform_thread::start(void *ip, void *sp)
|
|||||||
l4_thread_control_bind((l4_utcb_t *)_utcb, _platform_pd->native_task().data()->kcap());
|
l4_thread_control_bind((l4_utcb_t *)_utcb, _platform_pd->native_task().data()->kcap());
|
||||||
l4_msgtag_t tag = l4_thread_control_commit(_thread.local.data()->kcap());
|
l4_msgtag_t tag = l4_thread_control_commit(_thread.local.data()->kcap());
|
||||||
if (l4_msgtag_has_error(tag)) {
|
if (l4_msgtag_has_error(tag)) {
|
||||||
PWRN("l4_thread_control_commit for %lx failed!",
|
warning("l4_thread_control_commit for ",
|
||||||
(unsigned long) _thread.local.data()->kcap());
|
Hex(_thread.local.data()->kcap()), " failed!");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -59,7 +59,7 @@ int Platform_thread::start(void *ip, void *sp)
|
|||||||
tag = l4_thread_ex_regs(_thread.local.data()->kcap(), (l4_addr_t) ip,
|
tag = l4_thread_ex_regs(_thread.local.data()->kcap(), (l4_addr_t) ip,
|
||||||
(l4_addr_t) sp, 0);
|
(l4_addr_t) sp, 0);
|
||||||
if (l4_msgtag_has_error(tag)) {
|
if (l4_msgtag_has_error(tag)) {
|
||||||
PWRN("l4_thread_ex_regs failed!");
|
warning("l4_thread_ex_regs failed!");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -161,8 +161,8 @@ void Platform_thread::unbind()
|
|||||||
l4_thread_control_pager(_gate.remote);
|
l4_thread_control_pager(_gate.remote);
|
||||||
l4_thread_control_exc_handler(_gate.remote);
|
l4_thread_control_exc_handler(_gate.remote);
|
||||||
if (l4_msgtag_has_error(l4_thread_control_commit(_thread.local.data()->kcap())))
|
if (l4_msgtag_has_error(l4_thread_control_commit(_thread.local.data()->kcap())))
|
||||||
PWRN("l4_thread_control_commit for %lx failed!",
|
warning("l4_thread_control_commit for ",
|
||||||
(unsigned long) _thread.local.data()->kcap());
|
Hex(_thread.local.data()->kcap()), " failed!");
|
||||||
|
|
||||||
/* now force it into a pagefault */
|
/* now force it into a pagefault */
|
||||||
l4_thread_ex_regs(_thread.local.data()->kcap(), 0, 0, L4_THREAD_EX_REGS_CANCEL);
|
l4_thread_ex_regs(_thread.local.data()->kcap(), 0, 0, L4_THREAD_EX_REGS_CANCEL);
|
||||||
@ -219,7 +219,8 @@ void Platform_thread::affinity(Affinity::Location location)
|
|||||||
l4_msgtag_t tag = l4_scheduler_run_thread(L4_BASE_SCHEDULER_CAP,
|
l4_msgtag_t tag = l4_scheduler_run_thread(L4_BASE_SCHEDULER_CAP,
|
||||||
_thread.local.data()->kcap(), ¶ms);
|
_thread.local.data()->kcap(), ¶ms);
|
||||||
if (l4_error(tag))
|
if (l4_error(tag))
|
||||||
PWRN("setting affinity of %lx to %d failed!", _thread.local.data()->kcap(), cpu);
|
warning("setting affinity of ", Hex(_thread.local.data()->kcap()),
|
||||||
|
" to ", cpu, " failed!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -254,12 +255,12 @@ void Platform_thread::_finalize_construction(const char *name)
|
|||||||
l4_msgtag_t tag = l4_factory_create_irq(L4_BASE_FACTORY_CAP,
|
l4_msgtag_t tag = l4_factory_create_irq(L4_BASE_FACTORY_CAP,
|
||||||
_irq.local.data()->kcap());
|
_irq.local.data()->kcap());
|
||||||
if (l4_msgtag_has_error(tag))
|
if (l4_msgtag_has_error(tag))
|
||||||
PWRN("creating thread's irq failed");
|
warning("creating thread's irq failed");
|
||||||
|
|
||||||
/* attach thread to irq */
|
/* attach thread to irq */
|
||||||
tag = l4_irq_attach(_irq.local.data()->kcap(), 0, _thread.local.data()->kcap());
|
tag = l4_irq_attach(_irq.local.data()->kcap(), 0, _thread.local.data()->kcap());
|
||||||
if (l4_msgtag_has_error(tag))
|
if (l4_msgtag_has_error(tag))
|
||||||
PWRN("attaching thread's irq failed");
|
warning("attaching thread's irq failed");
|
||||||
|
|
||||||
/* set human readable name in kernel debugger */
|
/* set human readable name in kernel debugger */
|
||||||
strncpy(_name, name, sizeof(_name));
|
strncpy(_name, name, sizeof(_name));
|
||||||
|
@ -92,7 +92,7 @@ Native_capability Rpc_cap_factory::alloc(Native_capability ep)
|
|||||||
Native_capability cap;
|
Native_capability cap;
|
||||||
|
|
||||||
if (!ep.valid()) {
|
if (!ep.valid()) {
|
||||||
PWRN("Invalid reference capability!");
|
warning("Invalid reference capability!");
|
||||||
return cap;
|
return cap;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -110,7 +110,7 @@ Native_capability Rpc_cap_factory::alloc(Native_capability ep)
|
|||||||
Core_cap_index* idx = static_cast<Core_cap_index*>(cap_map()->insert(id));
|
Core_cap_index* idx = static_cast<Core_cap_index*>(cap_map()->insert(id));
|
||||||
|
|
||||||
if (!idx) {
|
if (!idx) {
|
||||||
PWRN("Out of capability indices!");
|
warning("Out of capability indices!");
|
||||||
platform_specific()->cap_id_alloc()->free(id);
|
platform_specific()->cap_id_alloc()->free(id);
|
||||||
return cap;
|
return cap;
|
||||||
}
|
}
|
||||||
@ -164,7 +164,7 @@ void Rpc_cap_factory::free(Native_capability cap)
|
|||||||
if (e) {
|
if (e) {
|
||||||
_pool.remove(e);
|
_pool.remove(e);
|
||||||
} else
|
} else
|
||||||
PWRN("Could not find capability to be deleted");
|
warning("Could not find capability to be deleted");
|
||||||
});
|
});
|
||||||
if (entry) destroy(_md_alloc, entry);
|
if (entry) destroy(_md_alloc, entry);
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,7 @@ GEN_CORE_DIR = $(BASE_DIR)/src/core
|
|||||||
LIBS += base-common
|
LIBS += base-common
|
||||||
|
|
||||||
SRC_CC += stack_area.cc \
|
SRC_CC += stack_area.cc \
|
||||||
core_printf.cc \
|
core_log.cc \
|
||||||
core_region_map.cc \
|
core_region_map.cc \
|
||||||
core_rpc_cap_alloc.cc \
|
core_rpc_cap_alloc.cc \
|
||||||
cpu_session_component.cc \
|
cpu_session_component.cc \
|
||||||
@ -69,6 +69,5 @@ vpath rom_session_component.cc $(GEN_CORE_DIR)
|
|||||||
vpath trace_session_component.cc $(GEN_CORE_DIR)
|
vpath trace_session_component.cc $(GEN_CORE_DIR)
|
||||||
vpath core_rpc_cap_alloc.cc $(GEN_CORE_DIR)
|
vpath core_rpc_cap_alloc.cc $(GEN_CORE_DIR)
|
||||||
vpath core_region_map.cc $(GEN_CORE_DIR)
|
vpath core_region_map.cc $(GEN_CORE_DIR)
|
||||||
vpath core_printf.cc $(BASE_DIR)/src/lib/base
|
|
||||||
vpath %.cc $(REP_DIR)/src/core
|
vpath %.cc $(REP_DIR)/src/core
|
||||||
vpath %.cc $(REP_DIR)/src/lib/base
|
vpath %.cc $(REP_DIR)/src/lib/base
|
||||||
|
@ -33,7 +33,7 @@ using namespace Genode;
|
|||||||
|
|
||||||
void Thread::_deinit_platform_thread()
|
void Thread::_deinit_platform_thread()
|
||||||
{
|
{
|
||||||
PWRN("%s: not implemented yet!", __func__);
|
warning(__func__, ": not implemented yet!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,35 +0,0 @@
|
|||||||
/*
|
|
||||||
* \brief Console backend using the Fiasco kernel debugger
|
|
||||||
* \author Norman Feske
|
|
||||||
* \date 2006-04-08
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Copyright (C) 2006-2013 Genode Labs GmbH
|
|
||||||
*
|
|
||||||
* This file is part of the Genode OS framework, which is distributed
|
|
||||||
* under the terms of the GNU General Public License version 2.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _INCLUDE__BASE__INTERNAL__CORE_CONSOLE_H_
|
|
||||||
#define _INCLUDE__BASE__INTERNAL__CORE_CONSOLE_H_
|
|
||||||
|
|
||||||
/* Fiasco includes */
|
|
||||||
namespace Fiasco {
|
|
||||||
#include <l4/sys/kdebug.h>
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Genode includes */
|
|
||||||
#include <base/console.h>
|
|
||||||
|
|
||||||
namespace Genode {
|
|
||||||
|
|
||||||
class Core_console : public Console
|
|
||||||
{
|
|
||||||
protected:
|
|
||||||
|
|
||||||
void _out_char(char c) { Fiasco::outchar(c); }
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* _INCLUDE__BASE__INTERNAL__CORE_CONSOLE_H_ */
|
|
@ -15,7 +15,6 @@
|
|||||||
|
|
||||||
/* Genode includes */
|
/* Genode includes */
|
||||||
#include <base/thread.h>
|
#include <base/thread.h>
|
||||||
#include <base/printf.h>
|
|
||||||
#include <base/sleep.h>
|
#include <base/sleep.h>
|
||||||
#include <base/env.h>
|
#include <base/env.h>
|
||||||
#include <cpu_thread/client.h>
|
#include <cpu_thread/client.h>
|
||||||
|
@ -17,7 +17,6 @@ INC_DIR += $(BASE_DIR)/../base-hw/src/include
|
|||||||
INC_DIR += $(BASE_DIR)/src/include
|
INC_DIR += $(BASE_DIR)/src/include
|
||||||
|
|
||||||
# add C++ sources
|
# add C++ sources
|
||||||
SRC_CC += console.cc
|
|
||||||
SRC_CC += cpu_session_component.cc
|
SRC_CC += cpu_session_component.cc
|
||||||
SRC_CC += cpu_session_support.cc
|
SRC_CC += cpu_session_support.cc
|
||||||
SRC_CC += cpu_thread_component.cc
|
SRC_CC += cpu_thread_component.cc
|
||||||
|
@ -1,91 +0,0 @@
|
|||||||
/*
|
|
||||||
* \brief Genode-console backend
|
|
||||||
* \author Martin Stein
|
|
||||||
* \date 2011-10-17
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Copyright (C) 2011-2013 Genode Labs GmbH
|
|
||||||
*
|
|
||||||
* This file is part of the Genode OS framework, which is distributed
|
|
||||||
* under the terms of the GNU General Public License version 2.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Genode includes */
|
|
||||||
#include <base/console.h>
|
|
||||||
#include <base/printf.h>
|
|
||||||
|
|
||||||
/* core includes */
|
|
||||||
#include <serial.h>
|
|
||||||
|
|
||||||
/* base-internal includes */
|
|
||||||
#include <base/internal/unmanaged_singleton.h>
|
|
||||||
|
|
||||||
namespace Genode
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Platform specific Genode console
|
|
||||||
*/
|
|
||||||
class Platform_console : public Console, public Serial
|
|
||||||
{
|
|
||||||
enum { BAUD_RATE = 115200 };
|
|
||||||
|
|
||||||
protected:
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Print a char to the console
|
|
||||||
*/
|
|
||||||
void _out_char(char c)
|
|
||||||
{
|
|
||||||
enum {
|
|
||||||
ASCII_LINE_FEED = 10,
|
|
||||||
ASCII_CARRIAGE_RETURN = 13,
|
|
||||||
};
|
|
||||||
|
|
||||||
/* auto complete new line commands */
|
|
||||||
if (c == ASCII_LINE_FEED)
|
|
||||||
Serial::put_char(ASCII_CARRIAGE_RETURN);
|
|
||||||
|
|
||||||
/* print char */
|
|
||||||
Serial::put_char(c);
|
|
||||||
}
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructor
|
|
||||||
*/
|
|
||||||
Platform_console() : Serial(BAUD_RATE) { }
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
using namespace Genode;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Static object to print log output
|
|
||||||
*/
|
|
||||||
static Platform_console * platform_console()
|
|
||||||
{
|
|
||||||
return unmanaged_singleton<Platform_console>();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/****************************
|
|
||||||
** Genode print functions **
|
|
||||||
****************************/
|
|
||||||
|
|
||||||
void Genode::printf(const char *format, ...)
|
|
||||||
{
|
|
||||||
va_list list;
|
|
||||||
va_start(list, format);
|
|
||||||
platform_console()->vprintf(format, list);
|
|
||||||
va_end(list);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Genode::vprintf(const char *format, va_list list)
|
|
||||||
{
|
|
||||||
platform_console()->vprintf(format, list);
|
|
||||||
}
|
|
||||||
|
|
72
repos/base-hw/src/core/default_log.cc
Normal file
72
repos/base-hw/src/core/default_log.cc
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
/*
|
||||||
|
* \brief Access to the core's log facility
|
||||||
|
* \author Norman Feske
|
||||||
|
* \author Stefan Kalkowski
|
||||||
|
* \date 2016-05-03
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2016 Genode Labs GmbH
|
||||||
|
*
|
||||||
|
* This file is part of the Genode OS framework, which is distributed
|
||||||
|
* under the terms of the GNU General Public License version 2.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Genode includes */
|
||||||
|
#include <base/log.h>
|
||||||
|
|
||||||
|
/* base-internal includes */
|
||||||
|
#include <base/internal/globals.h>
|
||||||
|
#include <base/internal/output.h>
|
||||||
|
#include <base/internal/unmanaged_singleton.h>
|
||||||
|
|
||||||
|
#include <core_log.h>
|
||||||
|
#include <serial.h>
|
||||||
|
#include <kernel/log.h>
|
||||||
|
|
||||||
|
using namespace Genode;
|
||||||
|
|
||||||
|
static Log *log_ptr;
|
||||||
|
|
||||||
|
|
||||||
|
Log &Log::log() { return *log_ptr; }
|
||||||
|
|
||||||
|
|
||||||
|
static void out_char(char const c)
|
||||||
|
{
|
||||||
|
enum {
|
||||||
|
ASCII_LINE_FEED = 10,
|
||||||
|
ASCII_CARRIAGE_RETURN = 13,
|
||||||
|
BAUD_RATE = 115200
|
||||||
|
};
|
||||||
|
|
||||||
|
Serial & serial = *unmanaged_singleton<Serial>(BAUD_RATE);
|
||||||
|
if (c == ASCII_LINE_FEED) serial.put_char(ASCII_CARRIAGE_RETURN);
|
||||||
|
serial.put_char(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Genode::Core_log::out(char const c) { out_char(c); }
|
||||||
|
|
||||||
|
|
||||||
|
void Genode::init_log()
|
||||||
|
{
|
||||||
|
/* ignore subsequent calls */
|
||||||
|
if (log_ptr) return;
|
||||||
|
|
||||||
|
struct Write_fn
|
||||||
|
{
|
||||||
|
Core_log log;
|
||||||
|
void operator () (char const *s) { log.output(s); }
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef Buffered_output<512, Write_fn> Buffered_log_output;
|
||||||
|
|
||||||
|
static Buffered_log_output *buffered_log_output =
|
||||||
|
unmanaged_singleton<Buffered_log_output>(Write_fn());
|
||||||
|
|
||||||
|
log_ptr = unmanaged_singleton<Log>(*buffered_log_output);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Kernel::log(char const c) { out_char(c); }
|
@ -201,7 +201,6 @@ class Kernel::Ipc_node : public Ipc_node_queue::Element
|
|||||||
***************/
|
***************/
|
||||||
|
|
||||||
Pd * const pd() const { return _pd; }
|
Pd * const pd() const { return _pd; }
|
||||||
char const * pd_label() const;
|
|
||||||
Genode::Native_utcb * utcb() { return _utcb; }
|
Genode::Native_utcb * utcb() { return _utcb; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
19
repos/base-hw/src/core/include/kernel/log.h
Normal file
19
repos/base-hw/src/core/include/kernel/log.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
/*
|
||||||
|
* \brief Kernel backend log messages
|
||||||
|
* \author Stefan Kalkowski
|
||||||
|
* \date 2016-10-10
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2016 Genode Labs GmbH
|
||||||
|
*
|
||||||
|
* This file is part of the Genode OS framework, which is distributed
|
||||||
|
* under the terms of the GNU General Public License version 2.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _CORE__INCLUDE__KERNEL__LOG_H_
|
||||||
|
#define _CORE__INCLUDE__KERNEL__LOG_H_
|
||||||
|
|
||||||
|
namespace Kernel { void log(char const); }
|
||||||
|
|
||||||
|
#endif
|
@ -86,8 +86,6 @@ class Kernel::Thread
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
enum { START_VERBOSE = 0 };
|
|
||||||
|
|
||||||
enum State
|
enum State
|
||||||
{
|
{
|
||||||
ACTIVE = 1,
|
ACTIVE = 1,
|
||||||
@ -195,23 +193,6 @@ class Kernel::Thread
|
|||||||
*/
|
*/
|
||||||
size_t _core_to_kernel_quota(size_t const quota) const;
|
size_t _core_to_kernel_quota(size_t const quota) const;
|
||||||
|
|
||||||
/**
|
|
||||||
* Print the activity of the thread
|
|
||||||
*
|
|
||||||
* \param printing_thread wether this thread caused the debugging
|
|
||||||
*/
|
|
||||||
void _print_activity(bool const printing_thread);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Print the activity of the thread when it awaits a message
|
|
||||||
*/
|
|
||||||
void _print_activity_when_awaits_ipc();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Print activity info that is printed regardless of the thread state
|
|
||||||
*/
|
|
||||||
void _print_common_activity();
|
|
||||||
|
|
||||||
|
|
||||||
/*********************************************************
|
/*********************************************************
|
||||||
** Kernel-call back-ends, see kernel-interface headers **
|
** Kernel-call back-ends, see kernel-interface headers **
|
||||||
@ -340,6 +321,8 @@ class Kernel::Thread
|
|||||||
static void syscall_destroy(Thread * thread) {
|
static void syscall_destroy(Thread * thread) {
|
||||||
call(call_id_delete_thread(), (Call_arg)thread); }
|
call(call_id_delete_thread(), (Call_arg)thread); }
|
||||||
|
|
||||||
|
void print(Genode::Output &out) const;
|
||||||
|
|
||||||
|
|
||||||
/*************
|
/*************
|
||||||
** Cpu_job **
|
** Cpu_job **
|
||||||
|
@ -14,9 +14,6 @@
|
|||||||
#ifndef _CORE__INCLUDE__MAP_LOCAL_H_
|
#ifndef _CORE__INCLUDE__MAP_LOCAL_H_
|
||||||
#define _CORE__INCLUDE__MAP_LOCAL_H_
|
#define _CORE__INCLUDE__MAP_LOCAL_H_
|
||||||
|
|
||||||
/* Genode includes */
|
|
||||||
#include <base/printf.h>
|
|
||||||
|
|
||||||
/* core includes */
|
/* core includes */
|
||||||
#include <page_flags.h>
|
#include <page_flags.h>
|
||||||
|
|
||||||
|
@ -17,7 +17,6 @@
|
|||||||
|
|
||||||
/* Genode includes */
|
/* Genode includes */
|
||||||
#include <util/register.h>
|
#include <util/register.h>
|
||||||
#include <base/printf.h>
|
|
||||||
|
|
||||||
/* core includes */
|
/* core includes */
|
||||||
#include <util.h>
|
#include <util.h>
|
||||||
|
@ -17,7 +17,6 @@
|
|||||||
/* Genode includes */
|
/* Genode includes */
|
||||||
#include <util/misc_math.h>
|
#include <util/misc_math.h>
|
||||||
#include <util/register.h>
|
#include <util/register.h>
|
||||||
#include <base/printf.h>
|
|
||||||
|
|
||||||
/* base-hw includes */
|
/* base-hw includes */
|
||||||
#include <page_flags.h>
|
#include <page_flags.h>
|
||||||
|
@ -64,13 +64,13 @@ class Genode::Vm_session_component
|
|||||||
void pause(void);
|
void pause(void);
|
||||||
|
|
||||||
void attach(Dataspace_capability ds_cap, addr_t vm_addr) {
|
void attach(Dataspace_capability ds_cap, addr_t vm_addr) {
|
||||||
PWRN("Not implemented for TrustZone case"); }
|
warning("Not implemented for TrustZone case"); }
|
||||||
|
|
||||||
void attach_pic(addr_t vm_addr) {
|
void attach_pic(addr_t vm_addr) {
|
||||||
PWRN("Not implemented for TrustZone case"); }
|
warning("Not implemented for TrustZone case"); }
|
||||||
|
|
||||||
void detach(addr_t vm_addr, size_t size) {
|
void detach(addr_t vm_addr, size_t size) {
|
||||||
PWRN("Not implemented for TrustZone case"); }
|
warning("Not implemented for TrustZone case"); }
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* _CORE__INCLUDE__SPEC__ARM_V7__TRUSTZONE__VM_SESSION_COMPONENT_H_ */
|
#endif /* _CORE__INCLUDE__SPEC__ARM_V7__TRUSTZONE__VM_SESSION_COMPONENT_H_ */
|
||||||
|
@ -18,7 +18,6 @@
|
|||||||
#include <kernel/types.h>
|
#include <kernel/types.h>
|
||||||
|
|
||||||
/* Genode includes */
|
/* Genode includes */
|
||||||
#include <base/printf.h>
|
|
||||||
#include <base/stdint.h>
|
#include <base/stdint.h>
|
||||||
|
|
||||||
/* Core includes */
|
/* Core includes */
|
||||||
|
@ -15,12 +15,8 @@
|
|||||||
#define _CORE__INCLUDE__SPEC__X86_64__MUEN__SINFO_INSTANCE_H_
|
#define _CORE__INCLUDE__SPEC__X86_64__MUEN__SINFO_INSTANCE_H_
|
||||||
|
|
||||||
/* base includes */
|
/* base includes */
|
||||||
#include <base/printf.h>
|
|
||||||
#include <muen/sinfo.h>
|
#include <muen/sinfo.h>
|
||||||
|
|
||||||
/* core includes */
|
|
||||||
#include <board.h>
|
|
||||||
|
|
||||||
namespace Genode
|
namespace Genode
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
|
@ -51,7 +51,7 @@ class Genode::Vm_session_component
|
|||||||
void exception_handler(Signal_context_capability handler)
|
void exception_handler(Signal_context_capability handler)
|
||||||
{
|
{
|
||||||
if (!create(&_state, Capability_space::capid(handler), nullptr))
|
if (!create(&_state, Capability_space::capid(handler), nullptr))
|
||||||
PWRN("Cannot instantiate vm kernel object, "
|
warning("Cannot instantiate vm kernel object, "
|
||||||
"invalid signal context?");
|
"invalid signal context?");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -21,7 +21,6 @@
|
|||||||
/* Genode includes */
|
/* Genode includes */
|
||||||
#include <util/mmio.h>
|
#include <util/mmio.h>
|
||||||
#include <base/stdint.h>
|
#include <base/stdint.h>
|
||||||
#include <base/printf.h>
|
|
||||||
|
|
||||||
/* core includes */
|
/* core includes */
|
||||||
#include <port_io.h>
|
#include <port_io.h>
|
||||||
|
@ -17,7 +17,6 @@
|
|||||||
/* Genode includes */
|
/* Genode includes */
|
||||||
#include <util/misc_math.h>
|
#include <util/misc_math.h>
|
||||||
#include <util/register.h>
|
#include <util/register.h>
|
||||||
#include <base/printf.h>
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
/* base-hw includes */
|
/* base-hw includes */
|
||||||
|
@ -16,7 +16,6 @@
|
|||||||
|
|
||||||
/* Genode includes */
|
/* Genode includes */
|
||||||
#include <rm_session/rm_session.h>
|
#include <rm_session/rm_session.h>
|
||||||
#include <base/printf.h>
|
|
||||||
|
|
||||||
/* base-internal includes */
|
/* base-internal includes */
|
||||||
#include <base/internal/page_size.h>
|
#include <base/internal/page_size.h>
|
||||||
|
@ -84,7 +84,7 @@ void Cpu_job::_interrupt(unsigned const cpu_id)
|
|||||||
/* it needs to be a user interrupt */
|
/* it needs to be a user interrupt */
|
||||||
User_irq * irq = User_irq::object(irq_id);
|
User_irq * irq = User_irq::object(irq_id);
|
||||||
if (irq) irq->occurred();
|
if (irq) irq->occurred();
|
||||||
else PWRN("Unknown interrupt %u", irq_id);
|
else Genode::warning("Unknown interrupt ", irq_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* end interrupt request at controller */
|
/* end interrupt request at controller */
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
|
|
||||||
/* base includes */
|
/* base includes */
|
||||||
#include <base/internal/unmanaged_singleton.h>
|
#include <base/internal/unmanaged_singleton.h>
|
||||||
|
#include <base/internal/globals.h>
|
||||||
|
|
||||||
using namespace Kernel;
|
using namespace Kernel;
|
||||||
|
|
||||||
@ -59,7 +60,9 @@ extern "C" void init_kernel()
|
|||||||
|
|
||||||
Core_thread::singleton();
|
Core_thread::singleton();
|
||||||
|
|
||||||
Genode::printf("\nkernel initialized\n");
|
Genode::init_log();
|
||||||
|
Genode::log("");
|
||||||
|
Genode::log("kernel initialized");
|
||||||
|
|
||||||
kernel();
|
kernel();
|
||||||
}
|
}
|
||||||
|
@ -252,10 +252,6 @@ void Ipc_node::cancel_waiting()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
char const * Ipc_node::pd_label() const {
|
|
||||||
return (_pd) ? _pd->platform_pd()->label() : "?"; }
|
|
||||||
|
|
||||||
|
|
||||||
Ipc_node::~Ipc_node()
|
Ipc_node::~Ipc_node()
|
||||||
{
|
{
|
||||||
_cancel_request_queue();
|
_cancel_request_queue();
|
||||||
|
@ -26,6 +26,7 @@
|
|||||||
#include <kernel/kernel.h>
|
#include <kernel/kernel.h>
|
||||||
#include <kernel/thread.h>
|
#include <kernel/thread.h>
|
||||||
#include <kernel/irq.h>
|
#include <kernel/irq.h>
|
||||||
|
#include <kernel/log.h>
|
||||||
#include <map_local.h>
|
#include <map_local.h>
|
||||||
#include <platform_pd.h>
|
#include <platform_pd.h>
|
||||||
#include <pic.h>
|
#include <pic.h>
|
||||||
@ -176,7 +177,7 @@ Cpu_job * Thread::helping_sink() {
|
|||||||
void Thread::_receive_yielded_cpu()
|
void Thread::_receive_yielded_cpu()
|
||||||
{
|
{
|
||||||
if (_state == AWAITS_RESUME) { _become_active(); }
|
if (_state == AWAITS_RESUME) { _become_active(); }
|
||||||
else { PWRN("failed to receive yielded CPU"); }
|
else { Genode::warning("failed to receive yielded CPU"); }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -216,7 +217,7 @@ void Thread::_call_start_thread()
|
|||||||
/* lookup CPU */
|
/* lookup CPU */
|
||||||
Cpu * const cpu = cpu_pool()->cpu(user_arg_2());
|
Cpu * const cpu = cpu_pool()->cpu(user_arg_2());
|
||||||
if (!cpu) {
|
if (!cpu) {
|
||||||
PWRN("failed to lookup CPU");
|
Genode::warning("failed to lookup CPU");
|
||||||
user_arg_0(-2);
|
user_arg_0(-2);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -230,15 +231,6 @@ void Thread::_call_start_thread()
|
|||||||
/* join protection domain */
|
/* join protection domain */
|
||||||
thread->_pd = (Pd *) user_arg_3();
|
thread->_pd = (Pd *) user_arg_3();
|
||||||
thread->_pd->admit(thread);
|
thread->_pd->admit(thread);
|
||||||
|
|
||||||
/* print log message */
|
|
||||||
if (START_VERBOSE) {
|
|
||||||
Genode::printf("start thread '%s' in program '%s' ",
|
|
||||||
thread->label(), thread->pd_label());
|
|
||||||
if (NR_OF_CPUS) {
|
|
||||||
Genode::printf("on CPU %u/%u ", cpu->id(), NR_OF_CPUS); }
|
|
||||||
Genode::printf("\n");
|
|
||||||
}
|
|
||||||
thread->Ipc_node::_init((Native_utcb *)user_arg_4(), this);
|
thread->Ipc_node::_init((Native_utcb *)user_arg_4(), this);
|
||||||
thread->_become_active();
|
thread->_become_active();
|
||||||
}
|
}
|
||||||
@ -262,8 +254,8 @@ void Thread::_call_resume_local_thread()
|
|||||||
/* lookup thread */
|
/* lookup thread */
|
||||||
Thread * const thread = pd()->cap_tree().find<Thread>(user_arg_1());
|
Thread * const thread = pd()->cap_tree().find<Thread>(user_arg_1());
|
||||||
if (!thread || pd() != thread->pd()) {
|
if (!thread || pd() != thread->pd()) {
|
||||||
PWRN("%s -> %s: failed to lookup thread %u to resume it",
|
warning(*this, ": failed to lookup thread ", (unsigned)user_arg_1(),
|
||||||
pd_label(), label(), (capid_t)user_arg_1());
|
" to resume it");
|
||||||
_stop();
|
_stop();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -319,9 +311,8 @@ void Thread::timeout_triggered()
|
|||||||
{
|
{
|
||||||
Signal_context * const c =
|
Signal_context * const c =
|
||||||
pd()->cap_tree().find<Signal_context>(_timeout_sigid);
|
pd()->cap_tree().find<Signal_context>(_timeout_sigid);
|
||||||
if(!c || c->submit(1)) {
|
if (!c || c->submit(1))
|
||||||
PWRN("%s -> %s: failed to submit timeout signal", pd_label(), label());
|
Genode::warning(*this, ": failed to submit timeout signal");
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -330,8 +321,8 @@ void Thread::_call_send_request_msg()
|
|||||||
Object_identity_reference * oir = pd()->cap_tree().find(user_arg_1());
|
Object_identity_reference * oir = pd()->cap_tree().find(user_arg_1());
|
||||||
Thread * const dst = (oir) ? oir->object<Thread>() : nullptr;
|
Thread * const dst = (oir) ? oir->object<Thread>() : nullptr;
|
||||||
if (!dst) {
|
if (!dst) {
|
||||||
PWRN("%s -> %s: cannot send to unknown recipient %llu",
|
Genode::warning(*this, ": cannot send to unknown recipient ",
|
||||||
pd_label(), label(), (unsigned long long)user_arg_1());
|
(unsigned)user_arg_1());
|
||||||
_become_inactive(AWAITS_IPC);
|
_become_inactive(AWAITS_IPC);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -386,60 +377,7 @@ Signal_context * const Thread_event::signal_context() const {
|
|||||||
return _signal_context; }
|
return _signal_context; }
|
||||||
|
|
||||||
|
|
||||||
void Thread::_print_activity(bool const printing_thread)
|
void Thread::_call_print_char() { Kernel::log((char)user_arg_1()); }
|
||||||
{
|
|
||||||
Genode::printf("\033[33m%s -> %s:\033[0m", pd_label(), label());
|
|
||||||
switch (_state) {
|
|
||||||
case AWAITS_START: {
|
|
||||||
Genode::printf("\033[32m init\033[0m");
|
|
||||||
break; }
|
|
||||||
case ACTIVE: {
|
|
||||||
if (!printing_thread) { Genode::printf("\033[32m run\033[0m"); }
|
|
||||||
else { Genode::printf("\033[32m debug\033[0m"); }
|
|
||||||
break; }
|
|
||||||
case AWAITS_IPC: {
|
|
||||||
_print_activity_when_awaits_ipc();
|
|
||||||
break; }
|
|
||||||
case AWAITS_RESUME: {
|
|
||||||
Genode::printf("\033[32m await RES\033[0m");
|
|
||||||
break; }
|
|
||||||
case AWAITS_SIGNAL: {
|
|
||||||
Genode::printf("\033[32m await SIG\033[0m");
|
|
||||||
break; }
|
|
||||||
case AWAITS_SIGNAL_CONTEXT_KILL: {
|
|
||||||
Genode::printf("\033[32m await SCK\033[0m");
|
|
||||||
break; }
|
|
||||||
case STOPPED: {
|
|
||||||
Genode::printf("\033[32m stop\033[0m");
|
|
||||||
break; }
|
|
||||||
}
|
|
||||||
_print_common_activity();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Thread::_print_common_activity()
|
|
||||||
{
|
|
||||||
Genode::printf(" ip %lx sp %lx\n", ip, sp);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Thread::_print_activity_when_awaits_ipc()
|
|
||||||
{
|
|
||||||
switch (Ipc_node::state()) {
|
|
||||||
case AWAIT_REPLY: {
|
|
||||||
Thread * const server = dynamic_cast<Thread *>(Ipc_node::callee());
|
|
||||||
Genode::printf("\033[32m await RPL %s -> %s\033[0m",
|
|
||||||
server->pd_label(), server->label());
|
|
||||||
break; }
|
|
||||||
case AWAIT_REQUEST: {
|
|
||||||
Genode::printf("\033[32m await REQ\033[0m");
|
|
||||||
break; }
|
|
||||||
default: break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Thread::_call_print_char() { Genode::printf("%c", (char)user_arg_1()); }
|
|
||||||
|
|
||||||
|
|
||||||
void Thread::_call_await_signal()
|
void Thread::_call_await_signal()
|
||||||
@ -447,14 +385,14 @@ void Thread::_call_await_signal()
|
|||||||
/* lookup receiver */
|
/* lookup receiver */
|
||||||
Signal_receiver * const r = pd()->cap_tree().find<Signal_receiver>(user_arg_1());
|
Signal_receiver * const r = pd()->cap_tree().find<Signal_receiver>(user_arg_1());
|
||||||
if (!r) {
|
if (!r) {
|
||||||
PWRN("%s -> %s: cannot await, unknown signal receiver %u",
|
Genode::warning(*this, ": cannot await, unknown signal receiver ",
|
||||||
pd_label(), label(), (capid_t)user_arg_1());
|
(unsigned)user_arg_1());
|
||||||
user_arg_0(-1);
|
user_arg_0(-1);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
/* register handler at the receiver */
|
/* register handler at the receiver */
|
||||||
if (r->add_handler(this)) {
|
if (r->add_handler(this)) {
|
||||||
PWRN("failed to register handler at signal receiver");
|
Genode::warning("failed to register handler at signal receiver");
|
||||||
user_arg_0(-1);
|
user_arg_0(-1);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -467,15 +405,14 @@ void Thread::_call_submit_signal()
|
|||||||
/* lookup signal context */
|
/* lookup signal context */
|
||||||
Signal_context * const c = pd()->cap_tree().find<Signal_context>(user_arg_1());
|
Signal_context * const c = pd()->cap_tree().find<Signal_context>(user_arg_1());
|
||||||
if(!c) {
|
if(!c) {
|
||||||
PWRN("%s -> %s: cannot submit unknown signal context",
|
Genode::warning(*this, ": cannot submit unknown signal context");
|
||||||
pd_label(), label());
|
|
||||||
user_arg_0(-1);
|
user_arg_0(-1);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* trigger signal context */
|
/* trigger signal context */
|
||||||
if (c->submit(user_arg_2())) {
|
if (c->submit(user_arg_2())) {
|
||||||
PWRN("failed to submit signal context");
|
Genode::warning("failed to submit signal context");
|
||||||
user_arg_0(-1);
|
user_arg_0(-1);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -488,8 +425,7 @@ void Thread::_call_ack_signal()
|
|||||||
/* lookup signal context */
|
/* lookup signal context */
|
||||||
Signal_context * const c = pd()->cap_tree().find<Signal_context>(user_arg_1());
|
Signal_context * const c = pd()->cap_tree().find<Signal_context>(user_arg_1());
|
||||||
if (!c) {
|
if (!c) {
|
||||||
PWRN("%s -> %s: cannot ack unknown signal context",
|
Genode::warning(*this, ": cannot ack unknown signal context");
|
||||||
pd_label(), label());
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -503,15 +439,14 @@ void Thread::_call_kill_signal_context()
|
|||||||
/* lookup signal context */
|
/* lookup signal context */
|
||||||
Signal_context * const c = pd()->cap_tree().find<Signal_context>(user_arg_1());
|
Signal_context * const c = pd()->cap_tree().find<Signal_context>(user_arg_1());
|
||||||
if (!c) {
|
if (!c) {
|
||||||
PWRN("%s -> %s: cannot kill unknown signal context",
|
Genode::warning(*this, ": cannot kill unknown signal context");
|
||||||
pd_label(), label());
|
|
||||||
user_arg_0(-1);
|
user_arg_0(-1);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* kill signal context */
|
/* kill signal context */
|
||||||
if (c->kill(this)) {
|
if (c->kill(this)) {
|
||||||
PWRN("failed to kill signal context");
|
Genode::warning("failed to kill signal context");
|
||||||
user_arg_0(-1);
|
user_arg_0(-1);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -522,8 +457,7 @@ void Thread::_call_new_irq()
|
|||||||
{
|
{
|
||||||
Signal_context * const c = pd()->cap_tree().find<Signal_context>(user_arg_3());
|
Signal_context * const c = pd()->cap_tree().find<Signal_context>(user_arg_3());
|
||||||
if (!c) {
|
if (!c) {
|
||||||
PWRN("%s -> %s: invalid signal context for interrupt",
|
Genode::warning(*this, ": invalid signal context for interrupt");
|
||||||
pd_label(), label());
|
|
||||||
user_arg_0(-1);
|
user_arg_0(-1);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -545,7 +479,7 @@ void Thread::_call_new_obj()
|
|||||||
if (!thread ||
|
if (!thread ||
|
||||||
(static_cast<Core_object<Thread>*>(thread)->capid() != ref->capid())) {
|
(static_cast<Core_object<Thread>*>(thread)->capid() != ref->capid())) {
|
||||||
if (thread)
|
if (thread)
|
||||||
PWRN("faked thread %s -> %s", thread->pd_label(), thread->label());
|
Genode::warning("faked thread", thread);
|
||||||
user_arg_0(cap_id_invalid());
|
user_arg_0(cap_id_invalid());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -610,8 +544,7 @@ void Thread::_call()
|
|||||||
default:
|
default:
|
||||||
/* check wether this is a core thread */
|
/* check wether this is a core thread */
|
||||||
if (!_core()) {
|
if (!_core()) {
|
||||||
PWRN("%s -> %s: not entitled to do kernel call",
|
Genode::warning(*this, ": not entitled to do kernel call");
|
||||||
pd_label(), label());
|
|
||||||
_stop();
|
_stop();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -648,7 +581,7 @@ void Thread::_call()
|
|||||||
case call_id_new_obj(): _call_new_obj(); return;
|
case call_id_new_obj(): _call_new_obj(); return;
|
||||||
case call_id_delete_obj(): _call_delete_obj(); return;
|
case call_id_delete_obj(): _call_delete_obj(); return;
|
||||||
default:
|
default:
|
||||||
PWRN("%s -> %s: unknown kernel call", pd_label(), label());
|
Genode::warning(*this, ": unknown kernel call");
|
||||||
_stop();
|
_stop();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -674,6 +607,14 @@ Thread_event Thread::* Thread::_event(unsigned const id) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Thread::print(Genode::Output &out) const
|
||||||
|
{
|
||||||
|
Genode::print(out, (_pd) ? _pd->platform_pd()->label() : "?");
|
||||||
|
Genode::print(out, " -> ");
|
||||||
|
Genode::print(out, label());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*****************
|
/*****************
|
||||||
** Core_thread **
|
** Core_thread **
|
||||||
*****************/
|
*****************/
|
||||||
|
@ -13,8 +13,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* Genode includes */
|
/* Genode includes */
|
||||||
#include <base/printf.h>
|
|
||||||
#include <base/sleep.h>
|
|
||||||
#include <base/log.h>
|
#include <base/log.h>
|
||||||
|
|
||||||
/* core includes */
|
/* core includes */
|
||||||
@ -133,7 +131,6 @@ Platform::Platform()
|
|||||||
* Core mem alloc must come first because it is
|
* Core mem alloc must come first because it is
|
||||||
* used by the other allocators.
|
* used by the other allocators.
|
||||||
*/
|
*/
|
||||||
enum { VERBOSE = 0 };
|
|
||||||
init_alloc(_core_mem_alloc.phys_alloc(), _ram_regions,
|
init_alloc(_core_mem_alloc.phys_alloc(), _ram_regions,
|
||||||
_core_only_ram_regions, get_page_size_log2());
|
_core_only_ram_regions, get_page_size_log2());
|
||||||
init_alloc(_core_mem_alloc.virt_alloc(), virt_region,
|
init_alloc(_core_mem_alloc.virt_alloc(), virt_region,
|
||||||
@ -165,32 +162,30 @@ Platform::Platform()
|
|||||||
_init_additional();
|
_init_additional();
|
||||||
|
|
||||||
/* print ressource summary */
|
/* print ressource summary */
|
||||||
if (VERBOSE) {
|
log("Core virtual memory allocator");
|
||||||
printf("Core virtual memory allocator\n");
|
log("---------------------");
|
||||||
printf("---------------------\n");
|
|
||||||
(*_core_mem_alloc.virt_alloc())()->dump_addr_tree();
|
(*_core_mem_alloc.virt_alloc())()->dump_addr_tree();
|
||||||
printf("\n");
|
log("\n");
|
||||||
printf("RAM memory allocator\n");
|
log("RAM memory allocator");
|
||||||
printf("---------------------\n");
|
log("---------------------");
|
||||||
(*_core_mem_alloc.phys_alloc())()->dump_addr_tree();
|
(*_core_mem_alloc.phys_alloc())()->dump_addr_tree();
|
||||||
printf("\n");
|
log("");
|
||||||
printf("IO memory allocator\n");
|
log("IO memory allocator");
|
||||||
printf("-------------------\n");
|
log("-------------------");
|
||||||
_io_mem_alloc()->dump_addr_tree();
|
_io_mem_alloc()->dump_addr_tree();
|
||||||
printf("\n");
|
log("");
|
||||||
printf("IO port allocator\n");
|
log("IO port allocator");
|
||||||
printf("-------------------\n");
|
log("-------------------");
|
||||||
_io_port_alloc()->dump_addr_tree();
|
_io_port_alloc()->dump_addr_tree();
|
||||||
printf("\n");
|
log("");
|
||||||
printf("IRQ allocator\n");
|
log("IRQ allocator");
|
||||||
printf("-------------------\n");
|
log("-------------------");
|
||||||
_irq_alloc()->dump_addr_tree();
|
_irq_alloc()->dump_addr_tree();
|
||||||
printf("\n");
|
log("");
|
||||||
printf("ROM filesystem\n");
|
log("ROM filesystem");
|
||||||
printf("--------------\n");
|
log("--------------");
|
||||||
_rom_fs.print_fs();
|
_rom_fs.print_fs();
|
||||||
printf("\n");
|
log("");
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -63,7 +63,7 @@ void Pager_entrypoint::entry()
|
|||||||
/* fetch fault data */
|
/* fetch fault data */
|
||||||
Platform_thread * const pt = (Platform_thread *)po->badge();
|
Platform_thread * const pt = (Platform_thread *)po->badge();
|
||||||
if (!pt) {
|
if (!pt) {
|
||||||
PWRN("failed to get platform thread of faulter");
|
Genode::warning("failed to get platform thread of faulter");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -39,15 +39,15 @@ void Thread::exception(unsigned const cpu)
|
|||||||
return;
|
return;
|
||||||
case UNDEFINED_INSTRUCTION:
|
case UNDEFINED_INSTRUCTION:
|
||||||
if (_cpu->retry_undefined_instr(*this)) { return; }
|
if (_cpu->retry_undefined_instr(*this)) { return; }
|
||||||
Genode::warning(pd_label(), " -> ", label(), ": "
|
Genode::warning(*this, ": undefined instruction at ip=",
|
||||||
"undefined instruction at ip=", Genode::Hex(ip));
|
Genode::Hex(ip));
|
||||||
_stop();
|
_stop();
|
||||||
return;
|
return;
|
||||||
case RESET:
|
case RESET:
|
||||||
return;
|
return;
|
||||||
default:
|
default:
|
||||||
Genode::warning(pd_label(), " -> ", label(), ": "
|
Genode::warning(*this, ": triggered an unknown exception ",
|
||||||
"triggered an unknown exception ", cpu_exception);
|
cpu_exception);
|
||||||
_stop();
|
_stop();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -72,7 +72,7 @@ void Thread::_mmu_exception()
|
|||||||
_fault.submit();
|
_fault.submit();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Genode::error(pd_label(), " -> ", label(), ": raised unhandled ",
|
Genode::error(*this, ": raised unhandled ",
|
||||||
cpu_exception == DATA_ABORT ? "data abort" : "prefetch abort", " "
|
cpu_exception == DATA_ABORT ? "data abort" : "prefetch abort", " "
|
||||||
"DFSR=", Genode::Hex(Cpu::Dfsr::read()), " "
|
"DFSR=", Genode::Hex(Cpu::Dfsr::read()), " "
|
||||||
"ISFR=", Genode::Hex(Cpu::Ifsr::read()), " "
|
"ISFR=", Genode::Hex(Cpu::Ifsr::read()), " "
|
||||||
|
@ -63,7 +63,7 @@ void Vm::proceed(unsigned const cpu)
|
|||||||
unsigned const irq = _state->irq_injection;
|
unsigned const irq = _state->irq_injection;
|
||||||
if (irq) {
|
if (irq) {
|
||||||
if (secure_irq(irq)) {
|
if (secure_irq(irq)) {
|
||||||
PWRN("Refuse to inject secure IRQ into VM");
|
Genode::warning("Refuse to inject secure IRQ into VM");
|
||||||
} else {
|
} else {
|
||||||
pic()->trigger(irq);
|
pic()->trigger(irq);
|
||||||
_state->irq_injection = 0;
|
_state->irq_injection = 0;
|
||||||
|
@ -23,7 +23,7 @@ void Vm_session_component::exception_handler(Signal_context_capability handler)
|
|||||||
if (!create((void*)_ds.core_local_addr(), Capability_space::capid(handler),
|
if (!create((void*)_ds.core_local_addr(), Capability_space::capid(handler),
|
||||||
nullptr))
|
nullptr))
|
||||||
{
|
{
|
||||||
PWRN("Cannot instantiate vm kernel object twice,"
|
warning("Cannot instantiate vm kernel object twice,"
|
||||||
"or invalid signal context?");
|
"or invalid signal context?");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -12,7 +12,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* Genode includes */
|
/* Genode includes */
|
||||||
#include <base/printf.h>
|
|
||||||
#include <kernel/interface.h>
|
#include <kernel/interface.h>
|
||||||
|
|
||||||
/* Core includes */
|
/* Core includes */
|
||||||
|
@ -35,8 +35,8 @@ void Thread::exception(unsigned const cpu)
|
|||||||
_mmu_exception();
|
_mmu_exception();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
PWRN("%s -> %s: unhandled exception %lu at ip=%lx addr=%lx",
|
Genode::warning(*this, ": unhandled exception ", cpu_exception,
|
||||||
pd_label(), label(), cpu_exception, ip, Cpu::sbadaddr());
|
" at ip=", (void*)ip, " addr=", Cpu::sbadaddr());
|
||||||
_stop();
|
_stop();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,7 +24,7 @@ void Kernel::Cpu_idle::exception(unsigned const cpu)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
PWRN("Unknown exception %lu with error code %lu at ip=%p", trapno,
|
Genode::warning("Unknown exception ", trapno, " with error code ",
|
||||||
errcode, (void *)ip);
|
errcode, " at ip=", (void *)ip);
|
||||||
assert(0);
|
assert(0);
|
||||||
}
|
}
|
||||||
|
@ -26,12 +26,11 @@ void Thread::exception(unsigned const cpu)
|
|||||||
return;
|
return;
|
||||||
case NO_MATH_COPROC:
|
case NO_MATH_COPROC:
|
||||||
if (_cpu->fpu().fault(*this)) { return; }
|
if (_cpu->fpu().fault(*this)) { return; }
|
||||||
PWRN("%s -> %s: FPU error", pd_label(), label());
|
Genode::warning(*this, ": FPU error");
|
||||||
_stop();
|
_stop();
|
||||||
return;
|
return;
|
||||||
case UNDEFINED_INSTRUCTION:
|
case UNDEFINED_INSTRUCTION:
|
||||||
PWRN("%s -> %s: undefined instruction at ip=%p",
|
Genode::warning(*this, ": undefined instruction at ip=", (void*)ip);
|
||||||
pd_label(), label(), (void*)ip);
|
|
||||||
_stop();
|
_stop();
|
||||||
return;
|
return;
|
||||||
case SUPERVISOR_CALL:
|
case SUPERVISOR_CALL:
|
||||||
@ -42,7 +41,7 @@ void Thread::exception(unsigned const cpu)
|
|||||||
_interrupt(cpu);
|
_interrupt(cpu);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
PWRN("%s -> %s: triggered unknown exception %lu with error code %lu"
|
Genode::warning(*this, ": triggered unknown exception ", trapno,
|
||||||
" at ip=%p", pd_label(), label(), trapno, errcode, (void*)ip);
|
" with error code ", errcode, " at ip=%p", (void*)ip);
|
||||||
_stop();
|
_stop();
|
||||||
}
|
}
|
||||||
|
@ -25,7 +25,7 @@ void Kernel::Cpu_idle::exception(unsigned const cpu)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
PWRN("Unknown exception %lu with error code %lu at ip=%p", trapno,
|
Genode::warning("Unknown exception ", trapno, " with error code ", errcode,
|
||||||
errcode, (void *)ip);
|
" at ip=", (void *)ip);
|
||||||
assert(0);
|
assert(0);
|
||||||
}
|
}
|
||||||
|
@ -26,12 +26,11 @@ void Thread::exception(unsigned const cpu)
|
|||||||
return;
|
return;
|
||||||
case NO_MATH_COPROC:
|
case NO_MATH_COPROC:
|
||||||
if (_cpu->fpu().fault(*this)) { return; }
|
if (_cpu->fpu().fault(*this)) { return; }
|
||||||
PWRN("%s -> %s: FPU error", pd_label(), label());
|
Genode::warning(*this, ": FPU error");
|
||||||
_stop();
|
_stop();
|
||||||
return;
|
return;
|
||||||
case UNDEFINED_INSTRUCTION:
|
case UNDEFINED_INSTRUCTION:
|
||||||
PWRN("%s -> %s: undefined instruction at ip=%p",
|
Genode::warning(*this, ": undefined instruction at ip=", (void*)ip);
|
||||||
pd_label(), label(), (void*)ip);
|
|
||||||
_stop();
|
_stop();
|
||||||
return;
|
return;
|
||||||
case SUPERVISOR_CALL:
|
case SUPERVISOR_CALL:
|
||||||
@ -43,7 +42,7 @@ void Thread::exception(unsigned const cpu)
|
|||||||
_interrupt(cpu);
|
_interrupt(cpu);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
PWRN("%s -> %s: triggered unknown exception %lu with error code %lu"
|
Genode::warning(*this, ": triggered unknown exception ", trapno,
|
||||||
" at ip=%p", pd_label(), label(), trapno, errcode, (void*)ip);
|
" with error code ", errcode, " at ip=%p", (void*)ip);
|
||||||
_stop();
|
_stop();
|
||||||
}
|
}
|
||||||
|
@ -50,8 +50,8 @@ void Kernel::Vm::exception(unsigned const cpu_id)
|
|||||||
_context->submit(1);
|
_context->submit(1);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
PWRN("VM: triggered unknown exception %lu with error code %lu",
|
Genode::warning("VM: triggered unknown exception ", _state->trapno,
|
||||||
_state->trapno, _state->errcode);
|
" with error code ", _state->errcode);
|
||||||
assert(false);
|
assert(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -81,7 +81,8 @@ Native_region * Platform::_ram_regions(unsigned const i)
|
|||||||
}
|
}
|
||||||
_regions[i] = { base, size };
|
_regions[i] = { base, size };
|
||||||
} else if (i >= max)
|
} else if (i >= max)
|
||||||
PWRN("physical ram region 0x%llx+0x%llx will be not used", base, size);
|
warning("physical ram region ", (void*)base, "+", (size_t)size,
|
||||||
|
" will be not used");
|
||||||
|
|
||||||
return i < max ? &_regions[i] : nullptr;
|
return i < max ? &_regions[i] : nullptr;
|
||||||
}
|
}
|
||||||
|
@ -12,7 +12,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* Genode includes */
|
/* Genode includes */
|
||||||
#include <base/printf.h>
|
|
||||||
#include <kernel/interface.h>
|
#include <kernel/interface.h>
|
||||||
|
|
||||||
using namespace Kernel;
|
using namespace Kernel;
|
||||||
|
@ -12,7 +12,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* Genode includes */
|
/* Genode includes */
|
||||||
#include <base/printf.h>
|
|
||||||
#include <kernel/interface.h>
|
#include <kernel/interface.h>
|
||||||
|
|
||||||
using namespace Kernel;
|
using namespace Kernel;
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* Genode includes */
|
/* Genode includes */
|
||||||
#include <base/printf.h>
|
#include <base/log.h>
|
||||||
#include <base/thread.h>
|
#include <base/thread.h>
|
||||||
#include <base/sleep.h>
|
#include <base/sleep.h>
|
||||||
#include <timer_session/connection.h>
|
#include <timer_session/connection.h>
|
||||||
@ -77,7 +77,7 @@ class Counter : private Thread_deprecated<2 * 1024 * sizeof(Genode::addr_t)>
|
|||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
|
|
||||||
char const _name;
|
String<64> _name;
|
||||||
unsigned long long volatile _value;
|
unsigned long long volatile _value;
|
||||||
Sync::Signal _sync_sig;
|
Sync::Signal _sync_sig;
|
||||||
unsigned volatile _stage;
|
unsigned volatile _stage;
|
||||||
@ -103,7 +103,7 @@ class Counter : private Thread_deprecated<2 * 1024 * sizeof(Genode::addr_t)>
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
Counter(char const name, size_t const weight,
|
Counter(char const *name, size_t const weight,
|
||||||
Sync::Session * const sync)
|
Sync::Session * const sync)
|
||||||
:
|
:
|
||||||
Thread_deprecated(weight, "counter"), _name(name), _value(0) ,
|
Thread_deprecated(weight, "counter"), _name(name), _value(0) ,
|
||||||
@ -123,7 +123,7 @@ class Counter : private Thread_deprecated<2 * 1024 * sizeof(Genode::addr_t)>
|
|||||||
|
|
||||||
void go() { _stage_1_end.submit(); }
|
void go() { _stage_1_end.submit(); }
|
||||||
|
|
||||||
void result() { printf("counter %c %llu\n", _name, _value); }
|
void result() { log("counter ", _name, " ", _value); }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -145,8 +145,8 @@ int main()
|
|||||||
Timer::Connection timer;
|
Timer::Connection timer;
|
||||||
Sync::Connection sync;
|
Sync::Connection sync;
|
||||||
Sync::Signal sync_sig(&sync, SYNC_SIG);
|
Sync::Signal sync_sig(&sync, SYNC_SIG);
|
||||||
Counter counter_a('A', Cpu_session::quota_lim_upscale(10, 100), &sync);
|
Counter counter_a("A", Cpu_session::quota_lim_upscale(10, 100), &sync);
|
||||||
Counter counter_b('B', Cpu_session::quota_lim_upscale(90, 100), &sync);
|
Counter counter_b("B", Cpu_session::quota_lim_upscale(90, 100), &sync);
|
||||||
|
|
||||||
timer.sigh(timer_sig);
|
timer.sigh(timer_sig);
|
||||||
|
|
||||||
@ -168,10 +168,10 @@ int main()
|
|||||||
sync_sig.threshold(3);
|
sync_sig.threshold(3);
|
||||||
sync_sig.sync();
|
sync_sig.sync();
|
||||||
Cpu_session::Quota quota = Genode::env()->cpu_session()->quota();
|
Cpu_session::Quota quota = Genode::env()->cpu_session()->quota();
|
||||||
Genode::printf("quota super period %lu\n", quota.super_period_us);
|
log("quota super period ", quota.super_period_us);
|
||||||
Genode::printf("quota %lu\n", quota.us);
|
log("quota ", quota.us);
|
||||||
counter_a.result();
|
counter_a.result();
|
||||||
counter_b.result();
|
counter_b.result();
|
||||||
printf("done\n");
|
log("done");
|
||||||
sleep_forever();
|
sleep_forever();
|
||||||
}
|
}
|
||||||
|
20
repos/base-linux/src/core/core_log.cc
Normal file
20
repos/base-linux/src/core/core_log.cc
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
/*
|
||||||
|
* \brief Kernel-specific core's 'log' backend
|
||||||
|
* \author Stefan Kalkowski
|
||||||
|
* \date 2016-10-10
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2016 Genode Labs GmbH
|
||||||
|
*
|
||||||
|
* This file is part of the Genode OS framework, which is distributed
|
||||||
|
* under the terms of the GNU General Public License version 2.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* core includes */
|
||||||
|
#include <core_log.h>
|
||||||
|
|
||||||
|
/* Linux syscall bindings */
|
||||||
|
#include <linux_syscalls.h>
|
||||||
|
|
||||||
|
void Genode::Core_log::out(char const c) { lx_write(1, &c, sizeof(c)); }
|
@ -207,7 +207,7 @@ namespace Genode {
|
|||||||
|
|
||||||
Cpu_session_capability cpu_session_cap() override
|
Cpu_session_capability cpu_session_cap() override
|
||||||
{
|
{
|
||||||
PWRN("%s:%u not implemented", __FILE__, __LINE__);
|
warning(__FILE__, ":", __LINE__, " not implemented");
|
||||||
return Cpu_session_capability();
|
return Cpu_session_capability();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -23,7 +23,6 @@
|
|||||||
#include <util/string.h>
|
#include <util/string.h>
|
||||||
#include <util/misc_math.h>
|
#include <util/misc_math.h>
|
||||||
#include <base/rpc_server.h>
|
#include <base/rpc_server.h>
|
||||||
#include <base/printf.h>
|
|
||||||
|
|
||||||
/* base-internal includes */
|
/* base-internal includes */
|
||||||
#include <base/internal/capability_space_tpl.h>
|
#include <base/internal/capability_space_tpl.h>
|
||||||
@ -79,7 +78,7 @@ namespace Genode {
|
|||||||
:
|
:
|
||||||
_size(size), _addr(phys_addr), _fd(-1), _owner(_owner)
|
_size(size), _addr(phys_addr), _fd(-1), _owner(_owner)
|
||||||
{
|
{
|
||||||
PWRN("Should only be used for IOMEM and not within Linux.");
|
warning("Should only be used for IOMEM and not within Linux.");
|
||||||
_fname.buf[0] = 0;
|
_fname.buf[0] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,7 +16,6 @@
|
|||||||
|
|
||||||
/* Genode includes */
|
/* Genode includes */
|
||||||
#include <base/allocator.h>
|
#include <base/allocator.h>
|
||||||
#include <base/printf.h>
|
|
||||||
#include <base/rpc_server.h>
|
#include <base/rpc_server.h>
|
||||||
#include <io_mem_session/io_mem_session.h>
|
#include <io_mem_session/io_mem_session.h>
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
* under the terms of the GNU General Public License version 2.
|
* under the terms of the GNU General Public License version 2.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <base/printf.h>
|
#include <base/log.h>
|
||||||
|
|
||||||
#include <io_mem_session_component.h>
|
#include <io_mem_session_component.h>
|
||||||
|
|
||||||
@ -21,7 +21,5 @@ using namespace Genode;
|
|||||||
Io_mem_session_component::Io_mem_session_component(Range_allocator *io_mem_alloc,
|
Io_mem_session_component::Io_mem_session_component(Range_allocator *io_mem_alloc,
|
||||||
Range_allocator *ram_alloc,
|
Range_allocator *ram_alloc,
|
||||||
Rpc_entrypoint *ds_ep,
|
Rpc_entrypoint *ds_ep,
|
||||||
const char *args)
|
const char *args) {
|
||||||
{
|
warning("no io_mem support on Linux (args=\"", args, "\")"); }
|
||||||
PWRN("no io_mem support on Linux (args=\"%s\")", args);
|
|
||||||
}
|
|
||||||
|
@ -14,7 +14,6 @@
|
|||||||
/* Genode includes */
|
/* Genode includes */
|
||||||
#include <rm_session/rm_session.h>
|
#include <rm_session/rm_session.h>
|
||||||
#include <ram_session/ram_session.h>
|
#include <ram_session/ram_session.h>
|
||||||
#include <base/printf.h>
|
|
||||||
#include <base/thread.h>
|
#include <base/thread.h>
|
||||||
|
|
||||||
/* base-internal includes */
|
/* base-internal includes */
|
||||||
@ -64,8 +63,11 @@ class Stack_area_region_map : public Genode::Region_map
|
|||||||
return local_addr;
|
return local_addr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void detach(Local_addr local_addr) {
|
void detach(Local_addr local_addr)
|
||||||
PWRN("stack area detach from 0x%p - not implemented", (void *)local_addr); }
|
{
|
||||||
|
Genode::warning("stack area detach from ", (void*)local_addr,
|
||||||
|
" - not implemented");
|
||||||
|
}
|
||||||
|
|
||||||
void fault_handler(Genode::Signal_context_capability) { }
|
void fault_handler(Genode::Signal_context_capability) { }
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@ SRC_CC = main.cc \
|
|||||||
trace_session_component.cc \
|
trace_session_component.cc \
|
||||||
thread_linux.cc \
|
thread_linux.cc \
|
||||||
stack_area.cc \
|
stack_area.cc \
|
||||||
core_printf.cc \
|
core_log.cc \
|
||||||
default_log.cc \
|
default_log.cc \
|
||||||
env_reinit.cc \
|
env_reinit.cc \
|
||||||
thread.cc thread_myself.cc
|
thread.cc thread_myself.cc
|
||||||
@ -55,7 +55,6 @@ vpath signal_source_component.cc $(GEN_CORE_DIR)
|
|||||||
vpath trace_session_component.cc $(GEN_CORE_DIR)
|
vpath trace_session_component.cc $(GEN_CORE_DIR)
|
||||||
vpath core_rpc_cap_alloc.cc $(GEN_CORE_DIR)
|
vpath core_rpc_cap_alloc.cc $(GEN_CORE_DIR)
|
||||||
vpath default_log.cc $(GEN_CORE_DIR)
|
vpath default_log.cc $(GEN_CORE_DIR)
|
||||||
vpath core_printf.cc $(BASE_DIR)/src/lib/base
|
|
||||||
vpath thread.cc $(BASE_DIR)/src/lib/base
|
vpath thread.cc $(BASE_DIR)/src/lib/base
|
||||||
vpath thread_myself.cc $(BASE_DIR)/src/lib/base
|
vpath thread_myself.cc $(BASE_DIR)/src/lib/base
|
||||||
vpath trace.cc $(BASE_DIR)/src/lib/base
|
vpath trace.cc $(BASE_DIR)/src/lib/base
|
||||||
|
@ -1,35 +0,0 @@
|
|||||||
/*
|
|
||||||
* \brief Printf backend using Linux stdout
|
|
||||||
* \author Norman Feske
|
|
||||||
* \date 2006-04-08
|
|
||||||
*
|
|
||||||
* This console back-end should only be used by core.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Copyright (C) 2006-2013 Genode Labs GmbH
|
|
||||||
*
|
|
||||||
* This file is part of the Genode OS framework, which is distributed
|
|
||||||
* under the terms of the GNU General Public License version 2.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _INCLUDE__BASE__INTERNAL__CORE_CONSOLE_H_
|
|
||||||
#define _INCLUDE__BASE__INTERNAL__CORE_CONSOLE_H_
|
|
||||||
|
|
||||||
/* Genode includes */
|
|
||||||
#include <base/console.h>
|
|
||||||
|
|
||||||
/* Linux syscall bindings */
|
|
||||||
#include <linux_syscalls.h>
|
|
||||||
|
|
||||||
namespace Genode {
|
|
||||||
|
|
||||||
class Core_console : public Console
|
|
||||||
{
|
|
||||||
protected:
|
|
||||||
|
|
||||||
void _out_char(char c) { lx_write(1, &c, sizeof(c)); }
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* _INCLUDE__BASE__INTERNAL__CORE_CONSOLE_H_ */
|
|
@ -109,7 +109,6 @@ void Genode::call_global_static_constructors() { }
|
|||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
Genode::init_log();
|
|
||||||
Genode::bootstrap_component();
|
Genode::bootstrap_component();
|
||||||
|
|
||||||
/* never reached */
|
/* never reached */
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
/* Genode includes */
|
/* Genode includes */
|
||||||
#include <base/component.h>
|
#include <base/component.h>
|
||||||
#include <base/printf.h>
|
#include <base/log.h>
|
||||||
|
|
||||||
/* local includes */
|
/* local includes */
|
||||||
#include "testlib.h"
|
#include "testlib.h"
|
||||||
@ -28,7 +28,7 @@ struct Testapp_testclass
|
|||||||
{
|
{
|
||||||
Testapp_testclass()
|
Testapp_testclass()
|
||||||
{
|
{
|
||||||
Genode::printf("Global static constructor of Genode application called\n");
|
Genode::log("Global static constructor of Genode application called");
|
||||||
}
|
}
|
||||||
|
|
||||||
void dummy() { }
|
void dummy() { }
|
||||||
@ -52,7 +52,7 @@ Genode::size_t Component::stack_size() { return 16*1024*sizeof(long); }
|
|||||||
*/
|
*/
|
||||||
void Component::construct(Genode::Env &env)
|
void Component::construct(Genode::Env &env)
|
||||||
{
|
{
|
||||||
printf("--- lx_hybrid global static constructor test ---\n");
|
log("--- lx_hybrid global static constructor test ---");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Call a dummy function on each test object to make sure that the
|
* Call a dummy function on each test object to make sure that the
|
||||||
@ -61,7 +61,7 @@ void Component::construct(Genode::Env &env)
|
|||||||
testlib_testobject.dummy();
|
testlib_testobject.dummy();
|
||||||
testapp_testobject.dummy();
|
testapp_testobject.dummy();
|
||||||
|
|
||||||
printf("--- returning from main ---\n");
|
log("--- returning from main ---");
|
||||||
exit_status = 0;
|
exit_status = 0;
|
||||||
env.ep().schedule_suspend(exit_on_suspended, nullptr);
|
env.ep().schedule_suspend(exit_on_suspended, nullptr);
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
/* Genode includes */
|
/* Genode includes */
|
||||||
#include <base/component.h>
|
#include <base/component.h>
|
||||||
#include <base/printf.h>
|
#include <base/log.h>
|
||||||
|
|
||||||
/* Linux includes */
|
/* Linux includes */
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@ -35,16 +35,16 @@ Genode::size_t Component::stack_size() { return 16*1024*sizeof(long); }
|
|||||||
*/
|
*/
|
||||||
void Component::construct(Genode::Env &env)
|
void Component::construct(Genode::Env &env)
|
||||||
{
|
{
|
||||||
printf("--- lx_hybrid exception test ---\n");
|
log("--- lx_hybrid exception test ---");
|
||||||
|
|
||||||
try {
|
try {
|
||||||
printf("Throwing Test_exception\n");
|
log("Throwing Test_exception");
|
||||||
throw Test_exception();
|
throw Test_exception();
|
||||||
} catch (Test_exception) {
|
} catch (Test_exception) {
|
||||||
printf("Caught Test_exception\n");
|
log("Caught Test_exception");
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("--- returning from main ---\n");
|
log("--- returning from main ---");
|
||||||
exit_status = 0;
|
exit_status = 0;
|
||||||
env.ep().schedule_suspend(exit_on_suspended, nullptr);
|
env.ep().schedule_suspend(exit_on_suspended, nullptr);
|
||||||
}
|
}
|
||||||
|
30
repos/base-nova/src/core/core_log.cc
Normal file
30
repos/base-nova/src/core/core_log.cc
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
/*
|
||||||
|
* \brief Kernel-specific core's 'log' backend
|
||||||
|
* \author Stefan Kalkowski
|
||||||
|
* \date 2016-10-10
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2016 Genode Labs GmbH
|
||||||
|
*
|
||||||
|
* This file is part of the Genode OS framework, which is distributed
|
||||||
|
* under the terms of the GNU General Public License version 2.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* core includes */
|
||||||
|
#include <core_log.h>
|
||||||
|
|
||||||
|
/* Genode includes */
|
||||||
|
#include <bios_data_area.h>
|
||||||
|
#include <drivers/uart_base.h>
|
||||||
|
|
||||||
|
void Genode::Core_log::out(char const c)
|
||||||
|
{
|
||||||
|
enum { CLOCK = 0, BAUDRATE = 115200 };
|
||||||
|
|
||||||
|
static X86_uart_base uart(Bios_data_area::singleton()->serial_port(),
|
||||||
|
CLOCK, BAUDRATE);
|
||||||
|
if (c == '\n')
|
||||||
|
uart.put_char('\r');
|
||||||
|
uart.put_char(c);
|
||||||
|
}
|
@ -18,7 +18,6 @@
|
|||||||
#include <base/cache.h>
|
#include <base/cache.h>
|
||||||
#include <base/ipc.h>
|
#include <base/ipc.h>
|
||||||
#include <base/stdint.h>
|
#include <base/stdint.h>
|
||||||
#include <base/printf.h>
|
|
||||||
|
|
||||||
/* NOVA includes */
|
/* NOVA includes */
|
||||||
#include <nova/syscalls.h>
|
#include <nova/syscalls.h>
|
||||||
|
@ -15,7 +15,6 @@
|
|||||||
#define _CORE__INCLUDE__MAP_LOCAL_H_
|
#define _CORE__INCLUDE__MAP_LOCAL_H_
|
||||||
|
|
||||||
/* Genode includes */
|
/* Genode includes */
|
||||||
#include <base/printf.h>
|
|
||||||
#include <base/thread.h>
|
#include <base/thread.h>
|
||||||
|
|
||||||
/* core includes */
|
/* core includes */
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
#include <base/lock.h>
|
#include <base/lock.h>
|
||||||
#include <base/capability.h>
|
#include <base/capability.h>
|
||||||
#include <base/tslab.h>
|
#include <base/tslab.h>
|
||||||
#include <base/printf.h>
|
#include <base/log.h>
|
||||||
|
|
||||||
namespace Genode { class Rpc_cap_factory; }
|
namespace Genode { class Rpc_cap_factory; }
|
||||||
|
|
||||||
@ -56,7 +56,7 @@ class Genode::Rpc_cap_factory
|
|||||||
|
|
||||||
Native_capability alloc(Native_capability)
|
Native_capability alloc(Native_capability)
|
||||||
{
|
{
|
||||||
PWRN("unexpected call to non-implemented Rpc_cap_factory::alloc");
|
warning("unexpected call to non-implemented Rpc_cap_factory::alloc");
|
||||||
return Native_capability();
|
return Native_capability();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -83,7 +83,7 @@ class Genode::Signal_broker
|
|||||||
Native_capability sm = _source.blocking_semaphore();
|
Native_capability sm = _source.blocking_semaphore();
|
||||||
|
|
||||||
if (!sm.valid()) {
|
if (!sm.valid()) {
|
||||||
PWRN("signal receiver sm is not valid");
|
warning("signal receiver sm is not valid");
|
||||||
for (;;);
|
for (;;);
|
||||||
return Signal_context_capability();
|
return Signal_context_capability();
|
||||||
}
|
}
|
||||||
@ -94,7 +94,7 @@ class Genode::Signal_broker
|
|||||||
uint8_t res = Nova::create_si(cap.local_name(), __core_pd_sel, imprint,
|
uint8_t res = Nova::create_si(cap.local_name(), __core_pd_sel, imprint,
|
||||||
sm.local_name());
|
sm.local_name());
|
||||||
if (res != Nova::NOVA_OK) {
|
if (res != Nova::NOVA_OK) {
|
||||||
PWRN("creating signal failed - error %u", res);
|
warning("creating signal failed - error ", res);
|
||||||
return Signal_context_capability();
|
return Signal_context_capability();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -115,8 +115,8 @@ class Genode::Signal_broker
|
|||||||
_obj_pool.apply(context_cap, lambda);
|
_obj_pool.apply(context_cap, lambda);
|
||||||
|
|
||||||
if (!context) {
|
if (!context) {
|
||||||
PWRN("%p - specified signal-context capability has wrong type %lx",
|
warning(this, " - specified signal-context capability has wrong type ",
|
||||||
this, context_cap.local_name());
|
Hex(context_cap.local_name()));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
destroy(&_contexts_slab, context);
|
destroy(&_contexts_slab, context);
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
/* Genode includes */
|
/* Genode includes */
|
||||||
#include <rm_session/rm_session.h>
|
#include <rm_session/rm_session.h>
|
||||||
#include <base/printf.h>
|
#include <base/log.h>
|
||||||
|
|
||||||
/* base-internal includes */
|
/* base-internal includes */
|
||||||
#include <base/internal/page_size.h>
|
#include <base/internal/page_size.h>
|
||||||
@ -51,19 +51,6 @@ namespace Genode {
|
|||||||
log(" ", __builtin_return_address(3));
|
log(" ", __builtin_return_address(3));
|
||||||
log(" ", __builtin_return_address(4));
|
log(" ", __builtin_return_address(4));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline void hexdump(void *addr)
|
|
||||||
{
|
|
||||||
unsigned char *s = (unsigned char *)addr;
|
|
||||||
printf("\nhexdump at 0x%p:\n", addr);
|
|
||||||
for (unsigned j = 0; j < 4; j++) {
|
|
||||||
printf(" ");
|
|
||||||
for (unsigned i = 0; i < 16; i++)
|
|
||||||
printf("0x%02x ", s[j*16 + i]);
|
|
||||||
printf("\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* _CORE__INCLUDE__UTIL_H_ */
|
#endif /* _CORE__INCLUDE__UTIL_H_ */
|
||||||
|
@ -5,7 +5,7 @@ GEN_CORE_DIR = $(BASE_DIR)/src/core
|
|||||||
|
|
||||||
SRC_CC = stack_area.cc \
|
SRC_CC = stack_area.cc \
|
||||||
core_mem_alloc.cc \
|
core_mem_alloc.cc \
|
||||||
core_printf.cc \
|
core_log.cc \
|
||||||
core_region_map.cc \
|
core_region_map.cc \
|
||||||
core_rpc_cap_alloc.cc \
|
core_rpc_cap_alloc.cc \
|
||||||
cpu_session_component.cc \
|
cpu_session_component.cc \
|
||||||
@ -69,5 +69,4 @@ vpath default_log.cc $(GEN_CORE_DIR)
|
|||||||
vpath dump_alloc.cc $(GEN_CORE_DIR)
|
vpath dump_alloc.cc $(GEN_CORE_DIR)
|
||||||
vpath platform_services.cc $(GEN_CORE_DIR)/spec/x86
|
vpath platform_services.cc $(GEN_CORE_DIR)/spec/x86
|
||||||
vpath stack_area.cc $(GEN_CORE_DIR)
|
vpath stack_area.cc $(GEN_CORE_DIR)
|
||||||
vpath core_printf.cc $(BASE_DIR)/src/lib/base
|
|
||||||
vpath %.cc $(REP_DIR)/src/core
|
vpath %.cc $(REP_DIR)/src/core
|
||||||
|
@ -1,48 +0,0 @@
|
|||||||
/*
|
|
||||||
* \brief Console backend for NOVA
|
|
||||||
* \author Norman Feske
|
|
||||||
* \author Alexander Boettcher
|
|
||||||
* \date 2009-12-28
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Copyright (C) 2009-2015 Genode Labs GmbH
|
|
||||||
*
|
|
||||||
* This file is part of the Genode OS framework, which is distributed
|
|
||||||
* under the terms of the GNU General Public License version 2.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _INCLUDE__BASE__INTERNAL__CORE_CONSOLE_H_
|
|
||||||
#define _INCLUDE__BASE__INTERNAL__CORE_CONSOLE_H_
|
|
||||||
|
|
||||||
/* Genode includes */
|
|
||||||
#include <base/console.h>
|
|
||||||
#include <bios_data_area.h>
|
|
||||||
#include <drivers/uart_base.h>
|
|
||||||
|
|
||||||
namespace Genode { class Core_console; }
|
|
||||||
|
|
||||||
class Genode::Core_console : public X86_uart_base, public Console
|
|
||||||
{
|
|
||||||
private:
|
|
||||||
|
|
||||||
enum { CLOCK = 0, BAUDRATE = 115200 };
|
|
||||||
|
|
||||||
void _out_char(char c)
|
|
||||||
{
|
|
||||||
if (c == '\n')
|
|
||||||
put_char('\r');
|
|
||||||
|
|
||||||
put_char(c);
|
|
||||||
}
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
Core_console()
|
|
||||||
:
|
|
||||||
X86_uart_base(Bios_data_area::singleton()->serial_port(),
|
|
||||||
CLOCK, BAUDRATE)
|
|
||||||
{ }
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* _INCLUDE__BASE__INTERNAL__CORE_CONSOLE_H_ */
|
|
21
repos/base-okl4/src/core/core_log.cc
Normal file
21
repos/base-okl4/src/core/core_log.cc
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
/*
|
||||||
|
* \brief Kernel-specific core's 'log' backend
|
||||||
|
* \author Stefan Kalkowski
|
||||||
|
* \date 2016-10-10
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2016 Genode Labs GmbH
|
||||||
|
*
|
||||||
|
* This file is part of the Genode OS framework, which is distributed
|
||||||
|
* under the terms of the GNU General Public License version 2.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* core includes */
|
||||||
|
#include <core_log.h>
|
||||||
|
|
||||||
|
namespace Okl4 { extern "C" {
|
||||||
|
#include <l4/kdebug.h>
|
||||||
|
}; }
|
||||||
|
|
||||||
|
void Genode::Core_log::out(char const c) { Okl4::L4_KDB_PrintChar(c); }
|
@ -11,9 +11,6 @@
|
|||||||
* under the terms of the GNU General Public License version 2.
|
* under the terms of the GNU General Public License version 2.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Genode includes */
|
|
||||||
#include <base/printf.h>
|
|
||||||
|
|
||||||
/* core includes */
|
/* core includes */
|
||||||
#include <region_map_component.h>
|
#include <region_map_component.h>
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@ GEN_CORE_DIR = $(BASE_DIR)/src/core
|
|||||||
|
|
||||||
SRC_CC += stack_area.cc \
|
SRC_CC += stack_area.cc \
|
||||||
core_mem_alloc.cc \
|
core_mem_alloc.cc \
|
||||||
core_printf.cc \
|
core_log.cc \
|
||||||
core_region_map.cc \
|
core_region_map.cc \
|
||||||
core_rpc_cap_alloc.cc \
|
core_rpc_cap_alloc.cc \
|
||||||
cpu_session_component.cc \
|
cpu_session_component.cc \
|
||||||
@ -69,5 +69,3 @@ vpath default_log.cc $(GEN_CORE_DIR)
|
|||||||
vpath stack_area.cc $(GEN_CORE_DIR)
|
vpath stack_area.cc $(GEN_CORE_DIR)
|
||||||
vpath pager_ep.cc $(GEN_CORE_DIR)
|
vpath pager_ep.cc $(GEN_CORE_DIR)
|
||||||
vpath %.cc $(REP_DIR)/src/core
|
vpath %.cc $(REP_DIR)/src/core
|
||||||
vpath core_printf.cc $(BASE_DIR)/src/lib/base
|
|
||||||
|
|
||||||
|
@ -1,34 +0,0 @@
|
|||||||
/*
|
|
||||||
* \brief Console backend for OKL4
|
|
||||||
* \author Norman Feske
|
|
||||||
* \date 2009-03-25
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Copyright (C) 2009-2013 Genode Labs GmbH
|
|
||||||
*
|
|
||||||
* This file is part of the Genode OS framework, which is distributed
|
|
||||||
* under the terms of the GNU General Public License version 2.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _INCLUDE__BASE__INTERNAL__CORE_CONSOLE_H_
|
|
||||||
#define _INCLUDE__BASE__INTERNAL__CORE_CONSOLE_H_
|
|
||||||
|
|
||||||
namespace Okl4 { extern "C" {
|
|
||||||
#include <l4/kdebug.h>
|
|
||||||
} }
|
|
||||||
|
|
||||||
#include <base/console.h>
|
|
||||||
|
|
||||||
|
|
||||||
namespace Genode
|
|
||||||
{
|
|
||||||
class Core_console : public Console
|
|
||||||
{
|
|
||||||
protected:
|
|
||||||
|
|
||||||
void _out_char(char c) { Okl4::L4_KDB_PrintChar(c); }
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* _INCLUDE__BASE__INTERNAL__CORE_CONSOLE_H_ */
|
|
22
repos/base-pistachio/src/core/core_log.cc
Normal file
22
repos/base-pistachio/src/core/core_log.cc
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
/*
|
||||||
|
* \brief Kernel-specific core's 'log' backend
|
||||||
|
* \author Stefan Kalkowski
|
||||||
|
* \date 2016-10-10
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2016 Genode Labs GmbH
|
||||||
|
*
|
||||||
|
* This file is part of the Genode OS framework, which is distributed
|
||||||
|
* under the terms of the GNU General Public License version 2.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* core includes */
|
||||||
|
#include <core_log.h>
|
||||||
|
|
||||||
|
/* Pistachio includes */
|
||||||
|
namespace Pistachio {
|
||||||
|
#include <l4/kdebug.h>
|
||||||
|
}
|
||||||
|
|
||||||
|
void Genode::Core_log::out(char const c) { Pistachio::L4_KDB_PrintChar(c); }
|
@ -70,8 +70,8 @@ namespace Genode {
|
|||||||
|
|
||||||
L4_MsgTag_t result = L4_Call(core_pager);
|
L4_MsgTag_t result = L4_Call(core_pager);
|
||||||
if (L4_IpcFailed(result)) {
|
if (L4_IpcFailed(result)) {
|
||||||
PWRN("could not locally remap 0x%lx to 0x%lx, error code is %ld",
|
warning("could not locally remap ", (void*)from_addr, " to ",
|
||||||
from_addr, to_addr, L4_ErrorCode());
|
(void*)to_addr, ", error code is ", L4_ErrorCode());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -22,9 +22,6 @@ namespace Pistachio {
|
|||||||
|
|
||||||
using namespace Genode;
|
using namespace Genode;
|
||||||
|
|
||||||
static const bool verbose_unmap = false;
|
|
||||||
|
|
||||||
|
|
||||||
void Rm_client::unmap(addr_t core_local_base, addr_t virt_base, size_t size)
|
void Rm_client::unmap(addr_t core_local_base, addr_t virt_base, size_t size)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
@ -38,10 +35,6 @@ void Rm_client::unmap(addr_t core_local_base, addr_t virt_base, size_t size)
|
|||||||
|
|
||||||
L4_Word_t page_size = get_page_size();
|
L4_Word_t page_size = get_page_size();
|
||||||
|
|
||||||
if (verbose_unmap)
|
|
||||||
printf("RM client %p (%lx) unmap core-local [%lx,%lx)\n",
|
|
||||||
this, badge(), core_local_base, core_local_base + size);
|
|
||||||
|
|
||||||
addr_t addr = core_local_base;
|
addr_t addr = core_local_base;
|
||||||
for (; addr < core_local_base + size; addr += page_size) {
|
for (; addr < core_local_base + size; addr += page_size) {
|
||||||
L4_Fpage_t fp = L4_Fpage(addr, page_size);
|
L4_Fpage_t fp = L4_Fpage(addr, page_size);
|
||||||
|
@ -5,7 +5,7 @@ LIBS = base-common
|
|||||||
GEN_CORE_DIR = $(BASE_DIR)/src/core
|
GEN_CORE_DIR = $(BASE_DIR)/src/core
|
||||||
|
|
||||||
SRC_CC = stack_area.cc \
|
SRC_CC = stack_area.cc \
|
||||||
core_printf.cc \
|
core_log.cc \
|
||||||
core_rpc_cap_alloc.cc \
|
core_rpc_cap_alloc.cc \
|
||||||
core_region_map.cc \
|
core_region_map.cc \
|
||||||
cpu_session_component.cc \
|
cpu_session_component.cc \
|
||||||
@ -69,5 +69,4 @@ vpath core_rpc_cap_alloc.cc $(GEN_CORE_DIR)
|
|||||||
vpath core_region_map.cc $(GEN_CORE_DIR)
|
vpath core_region_map.cc $(GEN_CORE_DIR)
|
||||||
vpath stack_area.cc $(GEN_CORE_DIR)
|
vpath stack_area.cc $(GEN_CORE_DIR)
|
||||||
vpath pager_ep.cc $(GEN_CORE_DIR)
|
vpath pager_ep.cc $(GEN_CORE_DIR)
|
||||||
vpath core_printf.cc $(BASE_DIR)/src/lib/base
|
|
||||||
vpath %.cc $(REP_DIR)/src/core
|
vpath %.cc $(REP_DIR)/src/core
|
||||||
|
@ -1,35 +0,0 @@
|
|||||||
/*
|
|
||||||
* \brief Console backend for Pistachio
|
|
||||||
* \author Julian Stecklina
|
|
||||||
* \date 2008-08-20
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Copyright (C) 2008-2013 Genode Labs GmbH
|
|
||||||
*
|
|
||||||
* This file is part of the Genode OS framework, which is distributed
|
|
||||||
* under the terms of the GNU General Public License version 2.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _INCLUDE__BASE__INTERNAL__CORE_CONSOLE_H_
|
|
||||||
#define _INCLUDE__BASE__INTERNAL__CORE_CONSOLE_H_
|
|
||||||
|
|
||||||
/* Pistachio includes */
|
|
||||||
namespace Pistachio {
|
|
||||||
#include <l4/kdebug.h>
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Genode includes */
|
|
||||||
#include <base/console.h>
|
|
||||||
|
|
||||||
namespace Genode
|
|
||||||
{
|
|
||||||
class Core_console : public Console
|
|
||||||
{
|
|
||||||
protected:
|
|
||||||
|
|
||||||
void _out_char(char c) { Pistachio::L4_KDB_PrintChar(c); }
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* _INCLUDE__BASE__INTERNAL__CORE_CONSOLE_H_ */
|
|
@ -37,7 +37,7 @@ SRC_CC += \
|
|||||||
capability_space.cc \
|
capability_space.cc \
|
||||||
pager.cc
|
pager.cc
|
||||||
|
|
||||||
LIBS += core_printf base-common syscall
|
LIBS += core_log base-common syscall
|
||||||
|
|
||||||
INC_DIR += $(REP_DIR)/src/core/include $(GEN_CORE_DIR)/include \
|
INC_DIR += $(REP_DIR)/src/core/include $(GEN_CORE_DIR)/include \
|
||||||
$(REP_DIR)/src/include $(BASE_DIR)/src/include
|
$(REP_DIR)/src/include $(BASE_DIR)/src/include
|
||||||
|
6
repos/base-sel4/lib/mk/core_log.mk
Normal file
6
repos/base-sel4/lib/mk/core_log.mk
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
SRC_CC = core_log.cc default_log.cc
|
||||||
|
INC_DIR += $(REP_DIR)/src/include $(BASE_DIR)/src/include $(BASE_DIR)/src/core/include
|
||||||
|
LIBS += syscall
|
||||||
|
|
||||||
|
vpath core_log.cc $(REP_DIR)/src/core
|
||||||
|
vpath default_log.cc $(BASE_DIR)/src/core
|
@ -1,6 +0,0 @@
|
|||||||
SRC_CC = core_printf.cc default_log.cc
|
|
||||||
INC_DIR += $(REP_DIR)/src/include $(BASE_DIR)/src/include
|
|
||||||
LIBS += syscall
|
|
||||||
|
|
||||||
vpath core_printf.cc $(BASE_DIR)/src/lib/base
|
|
||||||
vpath default_log.cc $(BASE_DIR)/src/core
|
|
@ -13,7 +13,6 @@
|
|||||||
|
|
||||||
/* base includes */
|
/* base includes */
|
||||||
#include <base/capability.h>
|
#include <base/capability.h>
|
||||||
#include <base/printf.h>
|
|
||||||
|
|
||||||
/* base-internal includes */
|
/* base-internal includes */
|
||||||
#include <base/internal/capability_data.h>
|
#include <base/internal/capability_data.h>
|
||||||
|
21
repos/base-sel4/src/core/core_log.cc
Normal file
21
repos/base-sel4/src/core/core_log.cc
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
/*
|
||||||
|
* \brief Kernel-specific core's 'log' backend
|
||||||
|
* \author Stefan Kalkowski
|
||||||
|
* \date 2016-10-10
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2016 Genode Labs GmbH
|
||||||
|
*
|
||||||
|
* This file is part of the Genode OS framework, which is distributed
|
||||||
|
* under the terms of the GNU General Public License version 2.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* core includes */
|
||||||
|
#include <core_log.h>
|
||||||
|
|
||||||
|
/* seL4 includes */
|
||||||
|
#include <sel4/arch/functions.h>
|
||||||
|
#include <sel4/arch/syscalls.h>
|
||||||
|
|
||||||
|
void Genode::Core_log::out(char const c) { seL4_DebugPutChar(c); }
|
@ -59,8 +59,8 @@ class Genode::Cnode_base
|
|||||||
int const ret = seL4_CNode_Copy(service, dest_index, dest_depth,
|
int const ret = seL4_CNode_Copy(service, dest_index, dest_depth,
|
||||||
src_root, src_index, src_depth, rights);
|
src_root, src_index, src_depth, rights);
|
||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
PWRN("%s: seL4_CNode_Copy (0x%lx) returned %d", __FUNCTION__,
|
warning(__FUNCTION__, ": seL4_CNode_Copy (",
|
||||||
from_idx.value(), ret);
|
(void*)from_idx.value(), ") returned ", ret);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -112,8 +112,8 @@ class Genode::Cnode_base
|
|||||||
int const ret = seL4_CNode_Move(service, dest_index, dest_depth,
|
int const ret = seL4_CNode_Move(service, dest_index, dest_depth,
|
||||||
src_root, src_index, src_depth);
|
src_root, src_index, src_depth);
|
||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
PWRN("%s: seL4_CNode_Move (0x%lx) returned %d", __FUNCTION__,
|
warning(__FUNCTION__, ": seL4_CNode_Move (",
|
||||||
from_idx.value(), ret);
|
(void*)from_idx.value(), ") returned ", ret);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -14,9 +14,6 @@
|
|||||||
#ifndef _CORE__INCLUDE__MAP_LOCAL_H_
|
#ifndef _CORE__INCLUDE__MAP_LOCAL_H_
|
||||||
#define _CORE__INCLUDE__MAP_LOCAL_H_
|
#define _CORE__INCLUDE__MAP_LOCAL_H_
|
||||||
|
|
||||||
/* Genode includes */
|
|
||||||
#include <base/printf.h>
|
|
||||||
|
|
||||||
/* core includes */
|
/* core includes */
|
||||||
#include <util.h>
|
#include <util.h>
|
||||||
#include <platform.h>
|
#include <platform.h>
|
||||||
|
@ -14,9 +14,6 @@
|
|||||||
#ifndef _CORE__INCLUDE__PLATFORM_H_
|
#ifndef _CORE__INCLUDE__PLATFORM_H_
|
||||||
#define _CORE__INCLUDE__PLATFORM_H_
|
#define _CORE__INCLUDE__PLATFORM_H_
|
||||||
|
|
||||||
/* Genode includes */
|
|
||||||
#include <base/printf.h>
|
|
||||||
|
|
||||||
/* local includes */
|
/* local includes */
|
||||||
#include <platform_generic.h>
|
#include <platform_generic.h>
|
||||||
#include <core_mem_alloc.h>
|
#include <core_mem_alloc.h>
|
||||||
|
@ -17,9 +17,6 @@
|
|||||||
#ifndef _CORE__INCLUDE__THREAD_SEL4_H_
|
#ifndef _CORE__INCLUDE__THREAD_SEL4_H_
|
||||||
#define _CORE__INCLUDE__THREAD_SEL4_H_
|
#define _CORE__INCLUDE__THREAD_SEL4_H_
|
||||||
|
|
||||||
/* Genode includes */
|
|
||||||
#include <base/printf.h>
|
|
||||||
|
|
||||||
/* base-internal includes */
|
/* base-internal includes */
|
||||||
#include <base/internal/assert.h>
|
#include <base/internal/assert.h>
|
||||||
|
|
||||||
|
@ -14,10 +14,6 @@
|
|||||||
#ifndef _CORE__INCLUDE__UTIL_H_
|
#ifndef _CORE__INCLUDE__UTIL_H_
|
||||||
#define _CORE__INCLUDE__UTIL_H_
|
#define _CORE__INCLUDE__UTIL_H_
|
||||||
|
|
||||||
/* Genode includes */
|
|
||||||
#include <rm_session/rm_session.h>
|
|
||||||
#include <base/printf.h>
|
|
||||||
|
|
||||||
/* base-internal includes */
|
/* base-internal includes */
|
||||||
#include <base/internal/page_size.h>
|
#include <base/internal/page_size.h>
|
||||||
|
|
||||||
|
@ -33,7 +33,7 @@ Native_capability Rpc_cap_factory::_alloc(Rpc_cap_factory *owner,
|
|||||||
Native_capability ep)
|
Native_capability ep)
|
||||||
{
|
{
|
||||||
if (!ep.valid()) {
|
if (!ep.valid()) {
|
||||||
PWRN("Invalid entrypoint capability");
|
warning("Invalid entrypoint capability");
|
||||||
return Native_capability();
|
return Native_capability();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,37 +0,0 @@
|
|||||||
/*
|
|
||||||
* \brief Console backend for seL4
|
|
||||||
* \author Norman Feske
|
|
||||||
* \date 2014-10-14
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Copyright (C) 2014 Genode Labs GmbH
|
|
||||||
*
|
|
||||||
* This file is part of the Genode OS framework, which is distributed
|
|
||||||
* under the terms of the GNU General Public License version 2.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _INCLUDE__BASE__INTERNAL__CORE_CONSOLE_H_
|
|
||||||
#define _INCLUDE__BASE__INTERNAL__CORE_CONSOLE_H_
|
|
||||||
|
|
||||||
/* Genode includes */
|
|
||||||
#include <base/console.h>
|
|
||||||
|
|
||||||
/* seL4 includes */
|
|
||||||
#include <sel4/arch/functions.h>
|
|
||||||
#include <sel4/arch/syscalls.h>
|
|
||||||
|
|
||||||
namespace Genode { class Core_console; }
|
|
||||||
|
|
||||||
|
|
||||||
class Genode::Core_console : public Console
|
|
||||||
{
|
|
||||||
protected:
|
|
||||||
|
|
||||||
void _out_char(char c)
|
|
||||||
{
|
|
||||||
seL4_DebugPutChar(c);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* _INCLUDE__BASE__INTERNAL__CORE_CONSOLE_H_ */
|
|
@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
/* base includes */
|
/* base includes */
|
||||||
#include <base/capability.h>
|
#include <base/capability.h>
|
||||||
#include <base/printf.h>
|
#include <base/log.h>
|
||||||
#include <util/bit_allocator.h>
|
#include <util/bit_allocator.h>
|
||||||
|
|
||||||
/* base-internal includes */
|
/* base-internal includes */
|
||||||
@ -156,7 +156,7 @@ void Capability_space::reset_sel(unsigned sel)
|
|||||||
{
|
{
|
||||||
int ret = seL4_CNode_Delete(INITIAL_SEL_CNODE, sel, CSPACE_SIZE_LOG2);
|
int ret = seL4_CNode_Delete(INITIAL_SEL_CNODE, sel, CSPACE_SIZE_LOG2);
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
PWRN("seL4_CNode_Delete returned %d", ret);
|
warning("seL4_CNode_Delete returned ", ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -30,32 +30,6 @@ namespace Genode { class Mmio; }
|
|||||||
*/
|
*/
|
||||||
class Genode::Mmio
|
class Genode::Mmio
|
||||||
{
|
{
|
||||||
/*
|
|
||||||
* If set 0 verbosity isn't needed at all and the enum enables the
|
|
||||||
* compiler to remove all verbosity code. If set 1 verbosity code
|
|
||||||
* gets compiled and is then switched via '*_verbose' member variables.
|
|
||||||
*/
|
|
||||||
enum { VERBOSITY_AVAILABLE = 0 };
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Proclaim a MMIO access
|
|
||||||
*
|
|
||||||
* \param _ACCESS_T integer type of access
|
|
||||||
* \param dst access destination
|
|
||||||
* \param v access value
|
|
||||||
* \param w 1: write access 0: read access
|
|
||||||
*/
|
|
||||||
template <typename _ACCESS_T>
|
|
||||||
inline void _access_verbosity(addr_t const dst, _ACCESS_T const v,
|
|
||||||
bool const w) const
|
|
||||||
{
|
|
||||||
if (!VERBOSITY_AVAILABLE) return;
|
|
||||||
if ((w && !_write_verbose) || (!w && !_read_verbose)) return;
|
|
||||||
printf("mmio %s 0x%p: 0x", w ? "write" : "read ", (void *)dst);
|
|
||||||
Trait::Uint_type<_ACCESS_T>::print_hex(v);
|
|
||||||
printf("\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Write '_ACCESS_T' typed 'value' to MMIO base + 'o'
|
* Write '_ACCESS_T' typed 'value' to MMIO base + 'o'
|
||||||
*/
|
*/
|
||||||
@ -63,7 +37,6 @@ class Genode::Mmio
|
|||||||
inline void _write(off_t const o, _ACCESS_T const value)
|
inline void _write(off_t const o, _ACCESS_T const value)
|
||||||
{
|
{
|
||||||
addr_t const dst = (addr_t)base + o;
|
addr_t const dst = (addr_t)base + o;
|
||||||
_access_verbosity<_ACCESS_T>(dst, value, 1);
|
|
||||||
*(_ACCESS_T volatile *)dst = value;
|
*(_ACCESS_T volatile *)dst = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -75,23 +48,9 @@ class Genode::Mmio
|
|||||||
{
|
{
|
||||||
addr_t const dst = (addr_t)base + o;
|
addr_t const dst = (addr_t)base + o;
|
||||||
_ACCESS_T const value = *(_ACCESS_T volatile *)dst;
|
_ACCESS_T const value = *(_ACCESS_T volatile *)dst;
|
||||||
_access_verbosity<_ACCESS_T>(dst, value, 0);
|
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
|
||||||
|
|
||||||
/*
|
|
||||||
* If VERBOSITY_AVAILABLE is set MMIO isn't verbose by default.
|
|
||||||
* Instead it causes this switches to be asked everytime MMIO
|
|
||||||
* could be verbose. This way the user can either enable verbosity
|
|
||||||
* locally by overwriting them in a deriving class or change their
|
|
||||||
* initialization temporarily to enable verbosity globally and
|
|
||||||
* then supress it locally by overwriting it.
|
|
||||||
*/
|
|
||||||
bool _write_verbose;
|
|
||||||
bool _read_verbose;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
enum { BYTE_WIDTH_LOG2 = 3, BYTE_WIDTH = 1 << BYTE_WIDTH_LOG2 };
|
enum { BYTE_WIDTH_LOG2 = 3, BYTE_WIDTH = 1 << BYTE_WIDTH_LOG2 };
|
||||||
@ -287,8 +246,7 @@ class Genode::Mmio
|
|||||||
*
|
*
|
||||||
* \param mmio_base base address of targeted MMIO region
|
* \param mmio_base base address of targeted MMIO region
|
||||||
*/
|
*/
|
||||||
inline Mmio(addr_t mmio_base)
|
inline Mmio(addr_t mmio_base) : base(mmio_base) { }
|
||||||
: _write_verbose(0), _read_verbose(0), base(mmio_base) { }
|
|
||||||
|
|
||||||
|
|
||||||
/*************************
|
/*************************
|
||||||
|
@ -16,7 +16,6 @@
|
|||||||
|
|
||||||
/* Genode includes */
|
/* Genode includes */
|
||||||
#include <base/stdint.h>
|
#include <base/stdint.h>
|
||||||
#include <base/printf.h>
|
|
||||||
|
|
||||||
namespace Genode {
|
namespace Genode {
|
||||||
|
|
||||||
@ -55,45 +54,30 @@ namespace Genode { namespace Trait {
|
|||||||
* Access widths wich are dividers to the compound type width
|
* Access widths wich are dividers to the compound type width
|
||||||
*/
|
*/
|
||||||
template <unsigned long _DIVISOR_WIDTH> struct Divisor;
|
template <unsigned long _DIVISOR_WIDTH> struct Divisor;
|
||||||
|
|
||||||
static inline void print_hex(bool const v) {
|
|
||||||
printf("%01x", v); }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
template <> struct Uint_width<8> : Uint_width<1>
|
template <> struct Uint_width<8> : Uint_width<1>
|
||||||
{
|
{
|
||||||
typedef uint8_t Type;
|
typedef uint8_t Type;
|
||||||
enum { WIDTH_LOG2 = 3 };
|
enum { WIDTH_LOG2 = 3 };
|
||||||
|
|
||||||
static inline void print_hex(uint8_t const v) {
|
|
||||||
printf("%02x", v); }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
template <> struct Uint_width<16> : Uint_width<8>
|
template <> struct Uint_width<16> : Uint_width<8>
|
||||||
{
|
{
|
||||||
typedef uint16_t Type;
|
typedef uint16_t Type;
|
||||||
enum { WIDTH_LOG2 = 4 };
|
enum { WIDTH_LOG2 = 4 };
|
||||||
|
|
||||||
static inline void print_hex(uint16_t const v) {
|
|
||||||
printf("%04x", v); }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
template <> struct Uint_width<32> : Uint_width<16>
|
template <> struct Uint_width<32> : Uint_width<16>
|
||||||
{
|
{
|
||||||
typedef uint32_t Type;
|
typedef uint32_t Type;
|
||||||
enum { WIDTH_LOG2 = 5 };
|
enum { WIDTH_LOG2 = 5 };
|
||||||
|
|
||||||
static inline void print_hex (uint32_t const v) {
|
|
||||||
printf("%08x", v); }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
template <> struct Uint_width<64> : Uint_width<32>
|
template <> struct Uint_width<64> : Uint_width<32>
|
||||||
{
|
{
|
||||||
typedef uint64_t Type;
|
typedef uint64_t Type;
|
||||||
enum { WIDTH_LOG2 = 6 };
|
enum { WIDTH_LOG2 = 6 };
|
||||||
|
|
||||||
static inline void print_hex(uint64_t const v) {
|
|
||||||
printf("%016llx", v); }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
template <> struct Uint_width<1>::Divisor<1> { enum { WIDTH_LOG2 = 0 }; };
|
template <> struct Uint_width<1>::Divisor<1> { enum { WIDTH_LOG2 = 0 }; };
|
||||||
|
36
repos/base/run/log.run
Normal file
36
repos/base/run/log.run
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
build "core init test/log"
|
||||||
|
|
||||||
|
create_boot_directory
|
||||||
|
|
||||||
|
install_config {
|
||||||
|
<config>
|
||||||
|
<parent-provides>
|
||||||
|
<service name="LOG"/>
|
||||||
|
<service name="RM"/>
|
||||||
|
</parent-provides>
|
||||||
|
<default-route>
|
||||||
|
<any-service> <parent/> </any-service>
|
||||||
|
</default-route>
|
||||||
|
<start name="test-log">
|
||||||
|
<resource name="RAM" quantum="10M"/>
|
||||||
|
</start>
|
||||||
|
</config>
|
||||||
|
}
|
||||||
|
|
||||||
|
build_boot_image "core init test-log"
|
||||||
|
|
||||||
|
append qemu_args "-nographic -m 64"
|
||||||
|
|
||||||
|
run_genode_until "Test done.*\n" 10
|
||||||
|
|
||||||
|
grep_output {\[init -\> test-log\]}
|
||||||
|
|
||||||
|
compare_output_to {
|
||||||
|
[init -> test-log] hex range: [0e00,1680)
|
||||||
|
[init -> test-log] empty hex range: [0abc0000,0abc0000) (empty!)
|
||||||
|
[init -> test-log] hex range to limit: [f8,ff]
|
||||||
|
[init -> test-log] invalid hex range: [f8,08) (overflow!)
|
||||||
|
[init -> test-log] negative hex char: 0xfe
|
||||||
|
[init -> test-log] positive hex char: 0x02
|
||||||
|
[init -> test-log] Test done.
|
||||||
|
}
|
@ -1,26 +0,0 @@
|
|||||||
build "core init test/printf"
|
|
||||||
|
|
||||||
create_boot_directory
|
|
||||||
|
|
||||||
install_config {
|
|
||||||
<config>
|
|
||||||
<parent-provides>
|
|
||||||
<service name="LOG"/>
|
|
||||||
<service name="RM"/>
|
|
||||||
</parent-provides>
|
|
||||||
<default-route>
|
|
||||||
<any-service> <parent/> </any-service>
|
|
||||||
</default-route>
|
|
||||||
<start name="test-printf">
|
|
||||||
<resource name="RAM" quantum="10M"/>
|
|
||||||
</start>
|
|
||||||
</config>
|
|
||||||
}
|
|
||||||
|
|
||||||
build_boot_image "core init test-printf"
|
|
||||||
|
|
||||||
append qemu_args "-nographic -m 64"
|
|
||||||
|
|
||||||
run_genode_until {-1 = -1 = -1} 10
|
|
||||||
|
|
||||||
puts "Test succeeded"
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user