Genode platform fixes (#17521)

* Genode: move dyncall failures to runtime

Do not use the "error" pragma to warn that dynamic library loading is
not implemented, print a message at runtime and exit.

* Genode: use stricter dataspace type in page allocator

* Genode: remove compiler configuration from nim.cfg

Self-hosting Nim is not supported on Genode and defining the
cross-compilation environment can be done externally.

* Genode: use new mutex API

* Genode: call nim_component_construct as a C procedure

* Genode: implement echo for NimStringV2
This commit is contained in:
Emery Hemingway 2021-04-09 16:29:10 +02:00 • committed by GitHub
commit 8aa5991bea
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 60 additions and 53 deletions

View file

@ -17,18 +17,18 @@ when not defined(genode):
when not declared(GenodeEnv):
include genode/env
type DataspaceCapability {.
importcpp: "Genode::Dataspace_capability", pure.} = object
type RamDataspaceCapability {.
importcpp: "Genode::Ram_dataspace_capability", pure.} = object
type
Map = object
attachment: pointer
size: int
ds: DataspaceCapability
ds: RamDataspaceCapability
SlabMeta = object
next: ptr MapSlab
ds: DataspaceCapability
ds: RamDataspaceCapability
MapSlab = object
meta: SlabMeta
@ -45,11 +45,11 @@ proc capsAvail(env: GenodeEnv): int {.
## Return the number of available capabilities.
## Each dataspace allocation consumes a capability.
proc allocDataspace(env: GenodeEnv; size: int): DataspaceCapability {.
proc allocDataspace(env: GenodeEnv; size: int): RamDataspaceCapability {.
importcpp: "#->pd().alloc(@)".}
## Allocate a dataspace and its capability.
proc attachDataspace(env: GenodeEnv; ds: DataspaceCapability): pointer {.
proc attachDataspace(env: GenodeEnv; ds: RamDataspaceCapability): pointer {.
importcpp: "#->rm().attach(@)".}
## Attach a dataspace into the component address-space.
@ -57,7 +57,7 @@ proc detachAddress(env: GenodeEnv; p: pointer) {.
importcpp: "#->rm().detach(@)".}
## Detach a dataspace from the component address-space.
proc freeDataspace(env: GenodeEnv; ds: DataspaceCapability) {.
proc freeDataspace(env: GenodeEnv; ds: RamDataspaceCapability) {.
importcpp: "#->pd().free(@)".}
## Free a dataspace.