-
-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge remote-tracking branch 'upstream/devel' into pr#20694
- Loading branch information
Showing
22 changed files
with
342 additions
and
84 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
# | ||
# | ||
# Nim's Runtime Library | ||
# (c) Copyright 2022 Emery Hemingway | ||
# | ||
# See the file "copying.txt", included in this | ||
# distribution, for details about the copyright. | ||
# | ||
|
||
type Constructible*[T] {. | ||
importcpp: "Genode::Constructible", | ||
header: "<util/reconstructible.h>", byref, pure.} = object | ||
|
||
proc construct*[T](x: Constructible[T]) {.importcpp.} | ||
## Construct a constructible C++ object. | ||
|
||
proc destruct*[T](x: Constructible[T]) {.importcpp.} | ||
## Destruct a constructible C++ object. | ||
|
||
proc constructed*[T](x: Constructible[T]): bool {.importcpp.} | ||
## Test if an object is constructed. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
# | ||
# | ||
# Nim's Runtime Library | ||
# (c) Copyright 2022 Emery Hemingway | ||
# | ||
# See the file "copying.txt", included in this | ||
# distribution, for details about the copyright. | ||
# | ||
|
||
## See `Genode Foundations - Entrypoint <https://genode.org/documentation/genode-foundations/21.05/functional_specification/Entrypoint.html>` | ||
## for a description of Entrypoints. | ||
|
||
type | ||
EntrypointObj {. | ||
importcpp: "Genode::Entrypoint", | ||
header: "<base/entrypoint.h>", | ||
pure.} = object | ||
Entrypoint* = ptr EntrypointObj | ||
## Opaque Entrypoint object. | ||
|
||
proc ep*(env: GenodeEnv): Entrypoint {.importcpp: "(&#->ep())".} | ||
## Access the entrypoint associated with `env`. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
# | ||
# | ||
# Nim's Runtime Library | ||
# (c) Copyright 2022 Emery Hemingway | ||
# | ||
# See the file "copying.txt", included in this | ||
# distribution, for details about the copyright. | ||
# | ||
|
||
## See `Genode Foundations - Asynchronous notifications <https://genode.org/documentation/genode-foundations/21.05/architecture/Inter-component_communication.html#Asynchronous_notifications>` | ||
## for a description of Genode signals. | ||
|
||
when not defined(genode) or defined(nimdoc): | ||
{.error: "Genode only module".} | ||
|
||
import ./entrypoints, ./constructibles | ||
|
||
export ep # Entrypoint accessor on GenodeEnv | ||
|
||
type | ||
SignalContextCapability* {. | ||
importcpp: "Genode::Signal_context_capability", | ||
header: "<base/signal.h>", pure.} = object | ||
## Capability to an asynchronous signal context. | ||
|
||
proc isValid*(cap: SignalContextCapability): bool {.importcpp: "#.valid()".} | ||
## Call the Genode core to check if this `SignalContextCapability` is valid. | ||
# TODO: RpcEffect | ||
|
||
type | ||
HandlerProc = proc () {.closure, gcsafe.} | ||
|
||
SignalHandlerBase {. | ||
importcpp: "Nim::SignalHandler", | ||
header: "genode_cpp/signals.h", | ||
pure.} = object | ||
|
||
SignalHandlerCpp = Constructible[SignalHandlerBase] | ||
|
||
SignalHandlerObj = object | ||
cpp: SignalHandlerCpp | ||
cb: HandlerProc | ||
## Signal handling procedure called during dispatch. | ||
|
||
SignalHandler* = ref SignalHandlerObj | ||
## Nim object enclosing a Genode signal handler. | ||
|
||
proc construct(cpp: SignalHandlerCpp; ep: Entrypoint; sh: SignalHandler) {.importcpp.} | ||
|
||
proc cap(cpp: SignalHandlerCpp): SignalContextCapability {.importcpp: "#->cap()".} | ||
|
||
proc newSignalHandler*(ep: Entrypoint; cb: HandlerProc): SignalHandler = | ||
## Create a new signal handler. A label is recommended for | ||
## debugging purposes. A signal handler will not be garbage | ||
## collected until after it has been dissolved. | ||
result = SignalHandler(cb: cb) | ||
result.cpp.construct(ep, result) | ||
GCref result | ||
|
||
proc dissolve*(sig: SignalHandler) = | ||
## Dissolve signal dispatcher from entrypoint. | ||
# TODO: =destroy? | ||
destruct sig.cpp | ||
sig.cb = nil # lose the callback | ||
GCunref sig | ||
|
||
proc cap*(sig: SignalHandler): SignalContextCapability = | ||
## Signal context capability. Can be delegated to external components. | ||
sig.cpp.cap | ||
|
||
proc submit*(cap: SignalContextCapability) {. | ||
importcpp: "Genode::Signal_transmitter(#).submit()".} | ||
## Submit a signal to a context capability. | ||
|
||
proc nimHandleSignal(p: pointer) {.exportc.} = | ||
## C symbol invoked by entrypoint during signal dispatch. | ||
cast[SignalHandler](p).cb() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
/* | ||
* | ||
* Nim's Runtime Library | ||
* (c) Copyright 2022 Emery Hemingway | ||
* | ||
* See the file "copying.txt", included in this | ||
* distribution, for details about the copyright. | ||
* | ||
*/ | ||
|
||
#ifndef _NIM_SIGNALS_H_ | ||
#define _NIM_SIGNALS_H_ | ||
|
||
#include <libc/component.h> | ||
#include <base/signal.h> | ||
#include <util/reconstructible.h> | ||
|
||
// Symbol for calling back into Nim | ||
extern "C" void nimHandleSignal(void *arg); | ||
|
||
namespace Nim { struct SignalHandler; } | ||
|
||
struct Nim::SignalHandler | ||
{ | ||
// Pointer to the Nim handler object. | ||
void *arg; | ||
|
||
void handle_signal() { | ||
Libc::with_libc([this] () { nimHandleSignal(arg); }); } | ||
|
||
Genode::Signal_handler<SignalHandler> handler; | ||
|
||
SignalHandler(Genode::Entrypoint *ep, void *arg) | ||
: arg(arg), handler(*ep, *this, &SignalHandler::handle_signal) { } | ||
|
||
Genode::Signal_context_capability cap() { return handler; } | ||
}; | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.