From 08a311b033b49b54fa4b1760855485308e11666c Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Mon, 21 Aug 2017 15:34:27 +0200 Subject: [PATCH] hw: make address variables 64-bit safe (fix #2503) --- .../src/core/kernel/signal_receiver.cc | 4 +-- .../base-hw/src/core/kernel/signal_receiver.h | 4 +-- repos/base-hw/src/core/kernel/thread.cc | 3 +-- repos/base-hw/src/core/pager.cc | 2 +- repos/base-hw/src/core/pager.h | 2 +- repos/base-hw/src/core/signal_broker.h | 2 +- .../src/core/signal_source_component.h | 4 +-- repos/base-hw/src/core/spec/arm/cpu_support.h | 27 ++++++++----------- repos/base-hw/src/core/spec/cortex_a15/cpu.h | 26 +++++++----------- repos/base-hw/src/core/spec/riscv/cpu.h | 20 +++++++------- repos/base-hw/src/core/spec/x86_64/cpu.h | 6 ----- 11 files changed, 41 insertions(+), 59 deletions(-) diff --git a/repos/base-hw/src/core/kernel/signal_receiver.cc b/repos/base-hw/src/core/kernel/signal_receiver.cc index 826c7a7d4..b08350b0f 100644 --- a/repos/base-hw/src/core/kernel/signal_receiver.cc +++ b/repos/base-hw/src/core/kernel/signal_receiver.cc @@ -126,7 +126,7 @@ Signal_context::~Signal_context() } -Signal_context::Signal_context(Signal_receiver * const r, unsigned const imprint) +Signal_context::Signal_context(Signal_receiver * const r, addr_t const imprint) : _deliver_fe(this), _contexts_fe(this), @@ -164,7 +164,7 @@ void Signal_receiver::_listen() /* create a signal data-object */ typedef Genode::Signal_context * Signal_imprint; auto const context = _deliver.dequeue()->object(); - auto const imprint = + Signal_imprint const imprint = reinterpret_cast(context->_imprint); Signal::Data data(imprint, context->_submits); diff --git a/repos/base-hw/src/core/kernel/signal_receiver.h b/repos/base-hw/src/core/kernel/signal_receiver.h index 5f8742f77..c4f6d8e1f 100644 --- a/repos/base-hw/src/core/kernel/signal_receiver.h +++ b/repos/base-hw/src/core/kernel/signal_receiver.h @@ -143,7 +143,7 @@ class Kernel::Signal_context : public Kernel::Object Fifo_element _deliver_fe; Fifo_element _contexts_fe; Signal_receiver * const _receiver; - unsigned const _imprint; + addr_t const _imprint; unsigned _submits; bool _ack; bool _killed; @@ -179,7 +179,7 @@ class Kernel::Signal_context : public Kernel::Object * * \throw Assign_to_receiver_failed */ - Signal_context(Signal_receiver * const r, unsigned const imprint); + Signal_context(Signal_receiver * const r, addr_t const imprint); /** * Submit the signal diff --git a/repos/base-hw/src/core/kernel/thread.cc b/repos/base-hw/src/core/kernel/thread.cc index 0cc20312b..9cd38704b 100644 --- a/repos/base-hw/src/core/kernel/thread.cc +++ b/repos/base-hw/src/core/kernel/thread.cc @@ -590,8 +590,7 @@ void Thread::_call() case call_id_delete_pd(): _call_delete(); return; case call_id_new_signal_receiver(): _call_new(); return; case call_id_new_signal_context(): - _call_new((Signal_receiver*) user_arg_2(), - (unsigned) user_arg_3()); + _call_new((Signal_receiver*) user_arg_2(), user_arg_3()); return; case call_id_delete_signal_context(): _call_delete(); return; case call_id_delete_signal_receiver(): _call_delete(); return; diff --git a/repos/base-hw/src/core/pager.cc b/repos/base-hw/src/core/pager.cc index 8c1ef2c80..03478324c 100644 --- a/repos/base-hw/src/core/pager.cc +++ b/repos/base-hw/src/core/pager.cc @@ -79,7 +79,7 @@ void Pager_object::print(Output &out) const } Pager_object::Pager_object(Cpu_session_capability cpu_session_cap, - Thread_capability thread_cap, unsigned const badge, + Thread_capability thread_cap, addr_t const badge, Affinity::Location, Session_label const &, Cpu_session::Name const &) : diff --git a/repos/base-hw/src/core/pager.h b/repos/base-hw/src/core/pager.h index 39a19a60c..77992a06f 100644 --- a/repos/base-hw/src/core/pager.h +++ b/repos/base-hw/src/core/pager.h @@ -134,7 +134,7 @@ class Genode::Pager_object : public Object_pool::Entry, * \param badge user identifaction of pager object */ Pager_object(Cpu_session_capability cpu_session_cap, - Thread_capability thread_cap, unsigned const badge, + Thread_capability thread_cap, addr_t const badge, Affinity::Location, Session_label const&, Cpu_session::Name const&); diff --git a/repos/base-hw/src/core/signal_broker.h b/repos/base-hw/src/core/signal_broker.h index 00fdf0936..f49b340bd 100644 --- a/repos/base-hw/src/core/signal_broker.h +++ b/repos/base-hw/src/core/signal_broker.h @@ -99,7 +99,7 @@ class Genode::Signal_broker * \throw Invalid_signal_source */ Signal_context_capability - alloc_context(Capability source, unsigned long imprint) + alloc_context(Capability source, addr_t imprint) { auto lambda = [&] (Signal_source_component *s) { if (!s) { diff --git a/repos/base-hw/src/core/signal_source_component.h b/repos/base-hw/src/core/signal_source_component.h index a6809bf40..4b592163c 100644 --- a/repos/base-hw/src/core/signal_source_component.h +++ b/repos/base-hw/src/core/signal_source_component.h @@ -36,7 +36,7 @@ struct Genode::Signal_context_component : Kernel_object, Signal_context_pool::Entry { inline Signal_context_component(Signal_source_component &s, - unsigned long const imprint); + addr_t const imprint); Signal_source_component *source() { ASSERT_NEVER_CALLED; } }; @@ -56,7 +56,7 @@ struct Genode::Signal_source_component : Kernel_object, Genode::Signal_context_component::Signal_context_component(Signal_source_component &s, - unsigned long const imprint) + addr_t const imprint) : Kernel_object(true, s.kernel_object(), imprint), Signal_context_pool::Entry(Kernel_object::_cap) diff --git a/repos/base-hw/src/core/spec/arm/cpu_support.h b/repos/base-hw/src/core/spec/arm/cpu_support.h index 9eea79a15..f72fdce7a 100644 --- a/repos/base-hw/src/core/spec/arm/cpu_support.h +++ b/repos/base-hw/src/core/spec/arm/cpu_support.h @@ -22,6 +22,7 @@ #include /* local includes */ +#include #include #include #include @@ -111,22 +112,16 @@ struct Genode::Arm_cpu : public Hw::Arm_cpu /** * Support for kernel calls */ - void user_arg_0(unsigned const arg) { r0 = arg; } - void user_arg_1(unsigned const arg) { r1 = arg; } - void user_arg_2(unsigned const arg) { r2 = arg; } - void user_arg_3(unsigned const arg) { r3 = arg; } - void user_arg_4(unsigned const arg) { r4 = arg; } - void user_arg_5(unsigned const arg) { r5 = arg; } - void user_arg_6(unsigned const arg) { r6 = arg; } - void user_arg_7(unsigned const arg) { r7 = arg; } - unsigned user_arg_0() const { return r0; } - unsigned user_arg_1() const { return r1; } - unsigned user_arg_2() const { return r2; } - unsigned user_arg_3() const { return r3; } - unsigned user_arg_4() const { return r4; } - unsigned user_arg_5() const { return r5; } - unsigned user_arg_6() const { return r6; } - unsigned user_arg_7() const { return r7; } + void user_arg_0(Kernel::Call_arg const arg) { r0 = arg; } + void user_arg_1(Kernel::Call_arg const arg) { r1 = arg; } + void user_arg_2(Kernel::Call_arg const arg) { r2 = arg; } + void user_arg_3(Kernel::Call_arg const arg) { r3 = arg; } + void user_arg_4(Kernel::Call_arg const arg) { r4 = arg; } + Kernel::Call_arg user_arg_0() const { return r0; } + Kernel::Call_arg user_arg_1() const { return r1; } + Kernel::Call_arg user_arg_2() const { return r2; } + Kernel::Call_arg user_arg_3() const { return r3; } + Kernel::Call_arg user_arg_4() const { return r4; } /** * Initialize thread context diff --git a/repos/base-hw/src/core/spec/cortex_a15/cpu.h b/repos/base-hw/src/core/spec/cortex_a15/cpu.h index 317e7014f..49bdf7174 100644 --- a/repos/base-hw/src/core/spec/cortex_a15/cpu.h +++ b/repos/base-hw/src/core/spec/cortex_a15/cpu.h @@ -166,22 +166,16 @@ class Genode::Cpu : public Arm_v7_cpu /** * Support for kernel calls */ - void user_arg_0(unsigned const arg) { r0 = arg; } - void user_arg_1(unsigned const arg) { r1 = arg; } - void user_arg_2(unsigned const arg) { r2 = arg; } - void user_arg_3(unsigned const arg) { r3 = arg; } - void user_arg_4(unsigned const arg) { r4 = arg; } - void user_arg_5(unsigned const arg) { r5 = arg; } - void user_arg_6(unsigned const arg) { r6 = arg; } - void user_arg_7(unsigned const arg) { r7 = arg; } - unsigned user_arg_0() const { return r0; } - unsigned user_arg_1() const { return r1; } - unsigned user_arg_2() const { return r2; } - unsigned user_arg_3() const { return r3; } - unsigned user_arg_4() const { return r4; } - unsigned user_arg_5() const { return r5; } - unsigned user_arg_6() const { return r6; } - unsigned user_arg_7() const { return r7; } + void user_arg_0(Kernel::Call_arg const arg) { r0 = arg; } + void user_arg_1(Kernel::Call_arg const arg) { r1 = arg; } + void user_arg_2(Kernel::Call_arg const arg) { r2 = arg; } + void user_arg_3(Kernel::Call_arg const arg) { r3 = arg; } + void user_arg_4(Kernel::Call_arg const arg) { r4 = arg; } + Kernel::Call_arg user_arg_0() const { return r0; } + Kernel::Call_arg user_arg_1() const { return r1; } + Kernel::Call_arg user_arg_2() const { return r2; } + Kernel::Call_arg user_arg_3() const { return r3; } + Kernel::Call_arg user_arg_4() const { return r4; } /** * Initialize thread context diff --git a/repos/base-hw/src/core/spec/riscv/cpu.h b/repos/base-hw/src/core/spec/riscv/cpu.h index 16d98b307..9b96c143b 100644 --- a/repos/base-hw/src/core/spec/riscv/cpu.h +++ b/repos/base-hw/src/core/spec/riscv/cpu.h @@ -88,16 +88,16 @@ class Genode::Cpu /** * Support for kernel calls */ - void user_arg_0(unsigned const arg) { a0 = arg; } - void user_arg_1(unsigned const arg) { a1 = arg; } - void user_arg_2(unsigned const arg) { a2 = arg; } - void user_arg_3(unsigned const arg) { a3 = arg; } - void user_arg_4(unsigned const arg) { a4 = arg; } - addr_t user_arg_0() const { return a0; } - addr_t user_arg_1() const { return a1; } - addr_t user_arg_2() const { return a2; } - addr_t user_arg_3() const { return a3; } - addr_t user_arg_4() const { return a4; } + void user_arg_0(Kernel::Call_arg const arg) { a0 = arg; } + void user_arg_1(Kernel::Call_arg const arg) { a1 = arg; } + void user_arg_2(Kernel::Call_arg const arg) { a2 = arg; } + void user_arg_3(Kernel::Call_arg const arg) { a3 = arg; } + void user_arg_4(Kernel::Call_arg const arg) { a4 = arg; } + Kernel::Call_arg user_arg_0() const { return a0; } + Kernel::Call_arg user_arg_1() const { return a1; } + Kernel::Call_arg user_arg_2() const { return a2; } + Kernel::Call_arg user_arg_3() const { return a3; } + Kernel::Call_arg user_arg_4() const { return a4; } /** * Initialize thread context diff --git a/repos/base-hw/src/core/spec/x86_64/cpu.h b/repos/base-hw/src/core/spec/x86_64/cpu.h index 8b60f64e5..aa524739b 100644 --- a/repos/base-hw/src/core/spec/x86_64/cpu.h +++ b/repos/base-hw/src/core/spec/x86_64/cpu.h @@ -109,17 +109,11 @@ class Genode::Cpu void user_arg_2(Kernel::Call_arg const arg) { rdx = arg; } void user_arg_3(Kernel::Call_arg const arg) { rcx = arg; } void user_arg_4(Kernel::Call_arg const arg) { r8 = arg; } - void user_arg_5(Kernel::Call_arg const arg) { r9 = arg; } - void user_arg_6(Kernel::Call_arg const arg) { r10 = arg; } - void user_arg_7(Kernel::Call_arg const arg) { r11 = arg; } Kernel::Call_arg user_arg_0() const { return rdi; } Kernel::Call_arg user_arg_1() const { return rsi; } Kernel::Call_arg user_arg_2() const { return rdx; } Kernel::Call_arg user_arg_3() const { return rcx; } Kernel::Call_arg user_arg_4() const { return r8; } - Kernel::Call_arg user_arg_5() const { return r9; } - Kernel::Call_arg user_arg_6() const { return r10; } - Kernel::Call_arg user_arg_7() const { return r11; } }; protected: