From ea46c462a45bb45fc1801eada2f3c96509a833b9 Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Tue, 20 Jun 2017 15:01:05 +0200 Subject: [PATCH] base: make stack area base specifiable for core When running core as the kernel inside every component, a separate stack area for core is needed that is different from the user-land component's one. Ref #2091 --- .../base-fiasco/lib/mk/base-fiasco-common.mk | 1 + ...base-foc-common.inc => base-foc-common.mk} | 0 repos/base-foc/lib/mk/base-foc.inc | 1 + repos/base-foc/lib/mk/core-foc.inc | 1 + .../lib/mk/spec/arm/base-foc-common.mk | 4 --- .../lib/mk/spec/x86/base-foc-common.mk | 1 - repos/base-foc/src/core/stack_area_addr.cc | 24 ++++++++++++++ .../spec/arm/base/internal/stack_area.h | 33 ------------------- repos/base-hw/lib/mk/base-hw.mk | 1 + repos/base-hw/lib/mk/core-hw.inc | 1 + repos/base-hw/src/core/stack_area_addr.cc | 17 ++++++++++ .../src/include/base/internal/stack_area.h | 26 --------------- repos/base-nova/lib/mk/base-nova-common.mk | 1 + .../src/include/base/internal/stack_area.h | 26 --------------- .../base-nova/src/lib/base/stack_area_addr.cc | 17 ++++++++++ repos/base-okl4/lib/mk/base-okl4-common.mk | 1 + .../lib/mk/base-pistachio-common.mk | 1 + repos/base-sel4/lib/mk/base-sel4-common.mk | 1 + .../src/include/base/internal/stack_area.h | 2 +- repos/base/src/lib/base/stack_area_addr.cc | 17 ++++++++++ 20 files changed, 85 insertions(+), 91 deletions(-) rename repos/base-foc/lib/mk/{base-foc-common.inc => base-foc-common.mk} (100%) delete mode 100644 repos/base-foc/lib/mk/spec/arm/base-foc-common.mk delete mode 100644 repos/base-foc/lib/mk/spec/x86/base-foc-common.mk create mode 100644 repos/base-foc/src/core/stack_area_addr.cc delete mode 100644 repos/base-foc/src/include/spec/arm/base/internal/stack_area.h create mode 100644 repos/base-hw/src/core/stack_area_addr.cc delete mode 100644 repos/base-hw/src/include/base/internal/stack_area.h delete mode 100644 repos/base-nova/src/include/base/internal/stack_area.h create mode 100644 repos/base-nova/src/lib/base/stack_area_addr.cc create mode 100644 repos/base/src/lib/base/stack_area_addr.cc diff --git a/repos/base-fiasco/lib/mk/base-fiasco-common.mk b/repos/base-fiasco/lib/mk/base-fiasco-common.mk index 27d54dd5a..851758c6f 100644 --- a/repos/base-fiasco/lib/mk/base-fiasco-common.mk +++ b/repos/base-fiasco/lib/mk/base-fiasco-common.mk @@ -11,3 +11,4 @@ LIBS += startup-fiasco syscall-fiasco SRC_CC += capability.cc capability_raw.cc SRC_CC += rpc_dispatch_loop.cc SRC_CC += thread.cc thread_bootstrap.cc thread_myself.cc +SRC_CC += stack_area_addr.cc diff --git a/repos/base-foc/lib/mk/base-foc-common.inc b/repos/base-foc/lib/mk/base-foc-common.mk similarity index 100% rename from repos/base-foc/lib/mk/base-foc-common.inc rename to repos/base-foc/lib/mk/base-foc-common.mk diff --git a/repos/base-foc/lib/mk/base-foc.inc b/repos/base-foc/lib/mk/base-foc.inc index 4b78fbf6b..5d6c42573 100644 --- a/repos/base-foc/lib/mk/base-foc.inc +++ b/repos/base-foc/lib/mk/base-foc.inc @@ -5,3 +5,4 @@ LIBS += base-foc-common syscall-foc cxx SRC_CC += cap_map_remove.cc cap_alloc.cc SRC_CC += thread_start.cc SRC_CC += signal_transmitter.cc signal.cc +SRC_CC += stack_area_addr.cc diff --git a/repos/base-foc/lib/mk/core-foc.inc b/repos/base-foc/lib/mk/core-foc.inc index 93370c5bc..e24f98f6a 100644 --- a/repos/base-foc/lib/mk/core-foc.inc +++ b/repos/base-foc/lib/mk/core-foc.inc @@ -3,6 +3,7 @@ GEN_CORE_DIR = $(BASE_DIR)/src/core LIBS += base-foc-common syscall-foc cxx SRC_CC += stack_area.cc \ + stack_area_addr.cc \ core_log.cc \ core_region_map.cc \ core_rpc_cap_alloc.cc \ diff --git a/repos/base-foc/lib/mk/spec/arm/base-foc-common.mk b/repos/base-foc/lib/mk/spec/arm/base-foc-common.mk deleted file mode 100644 index d8c63d420..000000000 --- a/repos/base-foc/lib/mk/spec/arm/base-foc-common.mk +++ /dev/null @@ -1,4 +0,0 @@ -# override default stack-area location -INC_DIR += $(REP_DIR)/src/include/spec/arm - -include $(REP_DIR)/lib/mk/base-foc-common.inc diff --git a/repos/base-foc/lib/mk/spec/x86/base-foc-common.mk b/repos/base-foc/lib/mk/spec/x86/base-foc-common.mk deleted file mode 100644 index f3a625c67..000000000 --- a/repos/base-foc/lib/mk/spec/x86/base-foc-common.mk +++ /dev/null @@ -1 +0,0 @@ -include $(REP_DIR)/lib/mk/base-foc-common.inc diff --git a/repos/base-foc/src/core/stack_area_addr.cc b/repos/base-foc/src/core/stack_area_addr.cc new file mode 100644 index 000000000..594b01d0f --- /dev/null +++ b/repos/base-foc/src/core/stack_area_addr.cc @@ -0,0 +1,24 @@ +/* + * \brief Component-local stack area base address for core on Fiasco.OC + * \author Stefan Kalkowski + * \date 2017-06-02 + */ + +/* + * Copyright (C) 2017 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +/* base-internal includes */ +#include + +/* + * The base address of the context area differs for core, because + * roottask on Fiasco.OC uses identity mappings. The virtual address range + * of the stack area must not overlap with physical memory. We pick an + * address range that lies outside of the RAM of the currently supported + * platforms. + */ +Genode::addr_t Genode::stack_area_virtual_base() { return 0x20000000UL; } diff --git a/repos/base-foc/src/include/spec/arm/base/internal/stack_area.h b/repos/base-foc/src/include/spec/arm/base/internal/stack_area.h deleted file mode 100644 index 9e3e2af42..000000000 --- a/repos/base-foc/src/include/spec/arm/base/internal/stack_area.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * \brief Stack area layout parameters - * \author Norman Feske - * \date 2016-03-03 - */ - -/* - * Copyright (C) 2016-2017 Genode Labs GmbH - * - * This file is part of the Genode OS framework, which is distributed - * under the terms of the GNU Affero General Public License version 3. - */ - -#ifndef _INCLUDE__BASE__INTERNAL__STACK_AREA_H_ -#define _INCLUDE__BASE__INTERNAL__STACK_AREA_H_ - -#include - -namespace Genode { - - /* - * The base address of the context area differs between ARM and x86 because - * roottask on Fiasco.OC uses identity mappings. The virtual address range - * of the stack area must not overlap with physical memory. We pick an - * address range that lies outside of the RAM of the currently supported - * ARM platforms. - */ - static constexpr addr_t stack_area_virtual_base() { return 0x20000000UL; } - static constexpr addr_t stack_area_virtual_size() { return 0x10000000UL; } - static constexpr addr_t stack_virtual_size() { return 0x00100000UL; } -} - -#endif /* _INCLUDE__BASE__INTERNAL__STACK_AREA_H_ */ diff --git a/repos/base-hw/lib/mk/base-hw.mk b/repos/base-hw/lib/mk/base-hw.mk index c18d3a8ed..53ba241b4 100644 --- a/repos/base-hw/lib/mk/base-hw.mk +++ b/repos/base-hw/lib/mk/base-hw.mk @@ -5,5 +5,6 @@ SRC_CC += capability.cc SRC_CC += cache.cc SRC_CC += raw_write_string.cc SRC_CC += signal_receiver.cc +SRC_CC += stack_area_addr.cc LIBS += startup-hw base-hw-common cxx timeout-hw diff --git a/repos/base-hw/lib/mk/core-hw.inc b/repos/base-hw/lib/mk/core-hw.inc index be8820484..c21b2cd4a 100644 --- a/repos/base-hw/lib/mk/core-hw.inc +++ b/repos/base-hw/lib/mk/core-hw.inc @@ -62,6 +62,7 @@ SRC_CC += kernel/timer.cc SRC_CC += kernel/object.cc SRC_CC += init_main_thread.cc SRC_CC += capability.cc +SRC_CC += stack_area_addr.cc # provide Genode version information include $(BASE_DIR)/src/core/version.inc diff --git a/repos/base-hw/src/core/stack_area_addr.cc b/repos/base-hw/src/core/stack_area_addr.cc new file mode 100644 index 000000000..9fca7d46f --- /dev/null +++ b/repos/base-hw/src/core/stack_area_addr.cc @@ -0,0 +1,17 @@ +/* + * \brief Component-local stack area base address for HW core + * \author Stefan Kalkowski + * \date 2017-06-02 + */ + +/* + * Copyright (C) 2017 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +/* base-internal includes */ +#include + +Genode::addr_t Genode::stack_area_virtual_base() { return 0xd0000000UL; } diff --git a/repos/base-hw/src/include/base/internal/stack_area.h b/repos/base-hw/src/include/base/internal/stack_area.h deleted file mode 100644 index b59eca766..000000000 --- a/repos/base-hw/src/include/base/internal/stack_area.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * \brief Stack area layout parameters - * \author Norman Feske - * \date 2016-03-03 - */ - -/* - * Copyright (C) 2016-2017 Genode Labs GmbH - * - * This file is part of the Genode OS framework, which is distributed - * under the terms of the GNU Affero General Public License version 3. - */ - -#ifndef _INCLUDE__BASE__INTERNAL__STACK_AREA_H_ -#define _INCLUDE__BASE__INTERNAL__STACK_AREA_H_ - -#include - -namespace Genode { - - static constexpr addr_t stack_area_virtual_base() { return 0xe0000000UL; } - static constexpr addr_t stack_area_virtual_size() { return 0x10000000UL; } - static constexpr addr_t stack_virtual_size() { return 0x00100000UL; } -} - -#endif /* _INCLUDE__BASE__INTERNAL__STACK_AREA_H_ */ diff --git a/repos/base-nova/lib/mk/base-nova-common.mk b/repos/base-nova/lib/mk/base-nova-common.mk index 5ff6fa4ad..81ebc9f3d 100644 --- a/repos/base-nova/lib/mk/base-nova-common.mk +++ b/repos/base-nova/lib/mk/base-nova-common.mk @@ -10,6 +10,7 @@ LIBS += startup-nova SRC_CC += thread.cc thread_myself.cc SRC_CC += stack.cc +SRC_CC += stack_area_addr.cc SRC_CC += cap_map.cc SRC_CC += capability.cc SRC_CC += signal_transmitter.cc diff --git a/repos/base-nova/src/include/base/internal/stack_area.h b/repos/base-nova/src/include/base/internal/stack_area.h deleted file mode 100644 index 4f8d95341..000000000 --- a/repos/base-nova/src/include/base/internal/stack_area.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * \brief Stack area layout parameters - * \author Norman Feske - * \date 2016-03-03 - */ - -/* - * Copyright (C) 2016-2017 Genode Labs GmbH - * - * This file is part of the Genode OS framework, which is distributed - * under the terms of the GNU Affero General Public License version 3. - */ - -#ifndef _INCLUDE__BASE__INTERNAL__STACK_AREA_H_ -#define _INCLUDE__BASE__INTERNAL__STACK_AREA_H_ - -#include - -namespace Genode { - - static constexpr addr_t stack_area_virtual_base() { return 0xa0000000UL; } - static constexpr addr_t stack_area_virtual_size() { return 0x10000000UL; } - static constexpr addr_t stack_virtual_size() { return 0x00100000UL; } -} - -#endif /* _INCLUDE__BASE__INTERNAL__STACK_AREA_H_ */ diff --git a/repos/base-nova/src/lib/base/stack_area_addr.cc b/repos/base-nova/src/lib/base/stack_area_addr.cc new file mode 100644 index 000000000..0ac9033d8 --- /dev/null +++ b/repos/base-nova/src/lib/base/stack_area_addr.cc @@ -0,0 +1,17 @@ +/* + * \brief Component-local stack area base address for NOVA + * \author Stefan Kalkowski + * \date 2017-06-02 + */ + +/* + * Copyright (C) 2017 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +/* base-internal includes */ +#include + +Genode::addr_t Genode::stack_area_virtual_base() { return 0xa0000000UL; } diff --git a/repos/base-okl4/lib/mk/base-okl4-common.mk b/repos/base-okl4/lib/mk/base-okl4-common.mk index 590b57991..fcde126c9 100644 --- a/repos/base-okl4/lib/mk/base-okl4-common.mk +++ b/repos/base-okl4/lib/mk/base-okl4-common.mk @@ -11,3 +11,4 @@ LIBS += startup-okl4 syscall-okl4 SRC_CC += capability.cc capability_raw.cc SRC_CC += rpc_dispatch_loop.cc SRC_CC += thread.cc thread_bootstrap.cc thread_myself.cc +SRC_CC += stack_area_addr.cc diff --git a/repos/base-pistachio/lib/mk/base-pistachio-common.mk b/repos/base-pistachio/lib/mk/base-pistachio-common.mk index 833e729cb..3ec2a587f 100644 --- a/repos/base-pistachio/lib/mk/base-pistachio-common.mk +++ b/repos/base-pistachio/lib/mk/base-pistachio-common.mk @@ -11,6 +11,7 @@ LIBS += startup-pistachio syscall-pistachio SRC_CC += capability.cc capability_raw.cc SRC_CC += rpc_dispatch_loop.cc SRC_CC += thread.cc thread_bootstrap.cc thread_myself.cc +SRC_CC += stack_area_addr.cc # suppress warning caused by Pistachio's 'l4/message.h' CC_WARN += -Wno-array-bounds diff --git a/repos/base-sel4/lib/mk/base-sel4-common.mk b/repos/base-sel4/lib/mk/base-sel4-common.mk index b173938e5..a6606a746 100644 --- a/repos/base-sel4/lib/mk/base-sel4-common.mk +++ b/repos/base-sel4/lib/mk/base-sel4-common.mk @@ -11,3 +11,4 @@ LIBS += startup-sel4 syscall-sel4 SRC_CC += rpc_dispatch_loop.cc SRC_CC += thread.cc thread_myself.cc thread_bootstrap.cc SRC_CC += capability.cc capability_raw.cc +SRC_CC += stack_area_addr.cc diff --git a/repos/base/src/include/base/internal/stack_area.h b/repos/base/src/include/base/internal/stack_area.h index a43b376d6..b593634fc 100644 --- a/repos/base/src/include/base/internal/stack_area.h +++ b/repos/base/src/include/base/internal/stack_area.h @@ -18,7 +18,7 @@ namespace Genode { - static constexpr addr_t stack_area_virtual_base() { return 0x40000000UL; } + addr_t stack_area_virtual_base(); static constexpr addr_t stack_area_virtual_size() { return 0x10000000UL; } static constexpr addr_t stack_virtual_size() { return 0x00100000UL; } } diff --git a/repos/base/src/lib/base/stack_area_addr.cc b/repos/base/src/lib/base/stack_area_addr.cc new file mode 100644 index 000000000..11f7333e7 --- /dev/null +++ b/repos/base/src/lib/base/stack_area_addr.cc @@ -0,0 +1,17 @@ +/* + * \brief Component-local stack area base address + * \author Stefan Kalkowski + * \date 2017-06-02 + */ + +/* + * Copyright (C) 2017 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +/* base-internal includes */ +#include + +Genode::addr_t Genode::stack_area_virtual_base() { return 0x40000000UL; }