mirror of
https://github.com/nim-lang/Nim.git
synced 2026-04-30 03:03:57 +00:00
Genode fixes (#8501)
* Genode fixes - wrap strings in "Genode::Cstring" when logging - define SIGABRT for Genode - disable GCC -fstack-protector - use log RPC for fatal messages - add --os:genode build to appveyor - define paramStr and paramCount * Select fixups for Genode POSIX
This commit is contained in:
committed by
Andreas Rumpf
parent
87b2d2aad6
commit
2da0341b4d
@@ -129,13 +129,13 @@ __clang__
|
||||
defined __DMC__ || \
|
||||
defined __BORLANDC__ )
|
||||
# define NIM_THREADVAR __declspec(thread)
|
||||
#elif defined(__TINYC__) || defined(__GENODE__)
|
||||
# define NIM_THREADVAR
|
||||
/* note that ICC (linux) and Clang are covered by __GNUC__ */
|
||||
#elif defined __GNUC__ || \
|
||||
defined __SUNPRO_C || \
|
||||
defined __xlC__
|
||||
# define NIM_THREADVAR __thread
|
||||
#elif defined __TINYC__
|
||||
# define NIM_THREADVAR
|
||||
#else
|
||||
# error "Cannot define NIM_THREADVAR"
|
||||
#endif
|
||||
|
||||
@@ -310,7 +310,10 @@ proc selectInto*[T](s: Selector[T], timeout: int,
|
||||
var rset, wset, eset: FdSet
|
||||
|
||||
if timeout != -1:
|
||||
tv.tv_sec = timeout.int32 div 1_000
|
||||
when defined(genode):
|
||||
tv.tv_sec = Time(timeout div 1_000)
|
||||
else:
|
||||
tv.tv_sec = timeout.int32 div 1_000
|
||||
tv.tv_usec = (timeout.int32 %% 1_000) * 1_000
|
||||
else:
|
||||
ptv = nil
|
||||
@@ -391,7 +394,6 @@ proc contains*[T](s: Selector[T], fd: SocketHandle|int): bool {.inline.} =
|
||||
for i in 0..<FD_SETSIZE:
|
||||
if s.fds[i].ident == fdi:
|
||||
return true
|
||||
inc(i)
|
||||
|
||||
when hasThreadSupport:
|
||||
template withSelectLock[T](s: Selector[T], body: untyped) =
|
||||
|
||||
@@ -1363,9 +1363,15 @@ elif defined(nintendoswitch):
|
||||
proc paramCount*(): int {.tags: [ReadIOEffect].} =
|
||||
raise newException(OSError, "paramCount is not implemented on Nintendo Switch")
|
||||
|
||||
elif defined(genode):
|
||||
proc paramStr*(i: int): TaintedString =
|
||||
raise newException(OSError, "paramStr is not implemented on Genode")
|
||||
|
||||
proc paramCount*(): int =
|
||||
raise newException(OSError, "paramCount is not implemented on Genode")
|
||||
|
||||
elif not defined(createNimRtl) and
|
||||
not(defined(posix) and appType == "lib") and
|
||||
not defined(genode):
|
||||
not(defined(posix) and appType == "lib"):
|
||||
# On Posix, there is no portable way to get the command line from a DLL.
|
||||
var
|
||||
cmdCount {.importc: "cmdCount".}: cint
|
||||
|
||||
@@ -4152,8 +4152,13 @@ when defined(cpp) and appType != "lib" and
|
||||
|
||||
let ex = getCurrentException()
|
||||
let trace = ex.getStackTrace()
|
||||
stderr.write trace & "Error: unhandled exception: " & ex.msg &
|
||||
" [" & $ex.name & "]\n"
|
||||
when defined(genode):
|
||||
# stderr not available by default, use the LOG session
|
||||
echo trace & "Error: unhandled exception: " & ex.msg &
|
||||
" [" & $ex.name & "]\n"
|
||||
else:
|
||||
stderr.write trace & "Error: unhandled exception: " & ex.msg &
|
||||
" [" & $ex.name & "]\n"
|
||||
quit 1
|
||||
|
||||
when not defined(js):
|
||||
|
||||
@@ -50,7 +50,7 @@ when defined(windows):
|
||||
SIGTERM = cint(15)
|
||||
elif defined(macosx) or defined(linux) or defined(freebsd) or
|
||||
defined(openbsd) or defined(netbsd) or defined(solaris) or
|
||||
defined(dragonfly) or defined(nintendoswitch):
|
||||
defined(dragonfly) or defined(nintendoswitch) or defined(genode):
|
||||
const
|
||||
SIGABRT = cint(6)
|
||||
SIGFPE = cint(8)
|
||||
|
||||
@@ -31,7 +31,11 @@ proc showErrorMessage(data: cstring) {.gcsafe.} =
|
||||
if errorMessageWriter != nil:
|
||||
errorMessageWriter($data)
|
||||
else:
|
||||
writeToStdErr(data)
|
||||
when defined(genode):
|
||||
# stderr not available by default, use the LOG session
|
||||
echo data
|
||||
else:
|
||||
writeToStdErr(data)
|
||||
|
||||
proc quitOrDebug() {.inline.} =
|
||||
when not defined(endb):
|
||||
|
||||
Reference in New Issue
Block a user