mirror of
https://github.com/nim-lang/Nim.git
synced 2026-05-05 05:24:49 +00:00
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:
@@ -13,7 +13,7 @@
|
||||
|
||||
/* Genode includes */
|
||||
#include <base/semaphore.h>
|
||||
#include <base/lock.h>
|
||||
#include <base/mutex.h>
|
||||
|
||||
namespace Nim {
|
||||
struct SysLock;
|
||||
@@ -22,15 +22,14 @@ namespace Nim {
|
||||
|
||||
struct Nim::SysLock
|
||||
{
|
||||
Genode::Lock _lock_a, _lock_b;
|
||||
Genode::Mutex _mutex_a, _mutex_b;
|
||||
bool _locked;
|
||||
|
||||
void acquireSys()
|
||||
{
|
||||
_lock_a.lock();
|
||||
Genode::Mutex::Guard guard(_mutex_a);
|
||||
_locked = true;
|
||||
_lock_a.unlock();
|
||||
_lock_b.lock();
|
||||
_mutex_b.acquire();
|
||||
}
|
||||
|
||||
bool tryAcquireSys()
|
||||
@@ -38,23 +37,22 @@ struct Nim::SysLock
|
||||
if (_locked)
|
||||
return false;
|
||||
|
||||
_lock_a.lock();
|
||||
Genode::Mutex::Guard guard(_mutex_a);
|
||||
|
||||
if (_locked) {
|
||||
_lock_a.unlock();
|
||||
return false;
|
||||
} else {
|
||||
_locked = true;
|
||||
_lock_b.lock();
|
||||
_lock_a.unlock();
|
||||
_mutex_b.acquire();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
void releaseSys()
|
||||
{
|
||||
Genode::Mutex::Guard guard(_mutex_a);
|
||||
_locked = false;
|
||||
_lock_a.unlock();
|
||||
_lock_b.unlock();
|
||||
_mutex_b.release();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user