From 18cf51e6497df99e60d92f8e84ab0fe0cdcda723 Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Tue, 4 Feb 2025 15:01:57 +0100 Subject: [PATCH] nova: remove nova_die and throw from ipc layer Issue #5443 --- repos/base-nova/src/lib/base/ipc.cc | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/repos/base-nova/src/lib/base/ipc.cc b/repos/base-nova/src/lib/base/ipc.cc index 1bb6b07fe31..10c87f51188 100644 --- a/repos/base-nova/src/lib/base/ipc.cc +++ b/repos/base-nova/src/lib/base/ipc.cc @@ -5,7 +5,7 @@ */ /* - * Copyright (C) 2009-2017 Genode Labs GmbH + * Copyright (C) 2009-2025 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. @@ -14,7 +14,6 @@ /* Genode includes */ #include #include -#include /* base-internal includes */ #include @@ -46,7 +45,7 @@ Rpc_exception_code Genode::ipc_call(Native_capability dst, /* if this happens, the call is bogus and invalid */ if ((log2_max >= sizeof(rcv_caps) * 8)) - throw Ipc_error(); + return Rpc_exception_code(Rpc_exception_code::INVALID_OBJECT); if ((1UL << log2_max) < rcv_caps) log2_max ++; @@ -59,10 +58,8 @@ Rpc_exception_code Genode::ipc_call(Native_capability dst, Nova::Utcb &utcb = *(Nova::Utcb *)myself->utcb(); /* the protocol value is unused as the badge is delivered by the kernel */ - if (!copy_msgbuf_to_utcb(utcb, snd_msg, 0)) { - error("could not setup IPC"); - throw Ipc_error(); - } + if (!copy_msgbuf_to_utcb(utcb, snd_msg, 0)) + return Rpc_exception_code(Rpc_exception_code::INVALID_OBJECT); /* * Determine manually defined selector for receiving the call result. @@ -74,7 +71,7 @@ Rpc_exception_code Genode::ipc_call(Native_capability dst, /* if we can't setup receive window, die in order to recognize the issue */ if (!rcv_window.prepare_rcv_window(utcb, manual_rcv_sel)) /* printf doesn't work here since for IPC also rcv_prepare* is used */ - nova_die(); + return Rpc_exception_code(Rpc_exception_code::INVALID_OBJECT); /* establish the mapping via a portal traversal */ uint8_t res = Nova::call(dst.local_name());