dynlib: use posix module (#11623)
This commit is contained in:
parent
d0616ed115
commit
9e7d885f35
6 changed files with 32 additions and 50 deletions
|
|
@ -418,6 +418,9 @@ const PROT_READ* = cint(1)
|
|||
const PROT_WRITE* = cint(2)
|
||||
const PROT_EXEC* = cint(4)
|
||||
const PROT_NONE* = cint(0)
|
||||
const MAP_ANONYMOUS* = cint(32)
|
||||
const MAP_FIXED_NOREPLACE* = cint(1048576)
|
||||
const MAP_NORESERVE* = cint(16384)
|
||||
const MAP_SHARED* = cint(1)
|
||||
const MAP_PRIVATE* = cint(2)
|
||||
const MAP_FIXED* = cint(16)
|
||||
|
|
@ -634,7 +637,7 @@ const SC_MQ_OPEN_MAX* = cint(27)
|
|||
const SC_MQ_PRIO_MAX* = cint(28)
|
||||
const SC_NGROUPS_MAX* = cint(3)
|
||||
const SC_OPEN_MAX* = cint(4)
|
||||
const SC_PAGE_SIZE* = cint(30)
|
||||
const SC_PAGESIZE* = cint(30)
|
||||
const SC_PRIORITIZED_IO* = cint(13)
|
||||
const SC_PRIORITY_SCHEDULING* = cint(10)
|
||||
const SC_RAW_SOCKETS* = cint(236)
|
||||
|
|
|
|||
|
|
@ -434,6 +434,9 @@ var PROT_READ* {.importc: "PROT_READ", header: "<sys/mman.h>".}: cint
|
|||
var PROT_WRITE* {.importc: "PROT_WRITE", header: "<sys/mman.h>".}: cint
|
||||
var PROT_EXEC* {.importc: "PROT_EXEC", header: "<sys/mman.h>".}: cint
|
||||
var PROT_NONE* {.importc: "PROT_NONE", header: "<sys/mman.h>".}: cint
|
||||
var MAP_ANONYMOUS* {.importc: "MAP_ANONYMOUS", header: "<sys/mman.h>".}: cint
|
||||
var MAP_FIXED_NOREPLACE* {.importc: "MAP_FIXED_NOREPLACE", header: "<sys/mman.h>".}: cint
|
||||
var MAP_NORESERVE* {.importc: "MAP_NORESERVE", header: "<sys/mman.h>".}: cint
|
||||
var MAP_SHARED* {.importc: "MAP_SHARED", header: "<sys/mman.h>".}: cint
|
||||
var MAP_PRIVATE* {.importc: "MAP_PRIVATE", header: "<sys/mman.h>".}: cint
|
||||
var MAP_FIXED* {.importc: "MAP_FIXED", header: "<sys/mman.h>".}: cint
|
||||
|
|
@ -655,7 +658,7 @@ var SC_MQ_OPEN_MAX* {.importc: "_SC_MQ_OPEN_MAX", header: "<unistd.h>".}: cint
|
|||
var SC_MQ_PRIO_MAX* {.importc: "_SC_MQ_PRIO_MAX", header: "<unistd.h>".}: cint
|
||||
var SC_NGROUPS_MAX* {.importc: "_SC_NGROUPS_MAX", header: "<unistd.h>".}: cint
|
||||
var SC_OPEN_MAX* {.importc: "_SC_OPEN_MAX", header: "<unistd.h>".}: cint
|
||||
var SC_PAGE_SIZE* {.importc: "_SC_PAGE_SIZE", header: "<unistd.h>".}: cint
|
||||
var SC_PAGESIZE* {.importc: "_SC_PAGESIZE", header: "<unistd.h>".}: cint
|
||||
var SC_PRIORITIZED_IO* {.importc: "_SC_PRIORITIZED_IO", header: "<unistd.h>".}: cint
|
||||
var SC_PRIORITY_SCHEDULING* {.importc: "_SC_PRIORITY_SCHEDULING", header: "<unistd.h>".}: cint
|
||||
var SC_RAW_SOCKETS* {.importc: "_SC_RAW_SOCKETS", header: "<unistd.h>".}: cint
|
||||
|
|
|
|||
|
|
@ -106,7 +106,7 @@ proc loadLibPattern*(pattern: string, global_symbols=false): LibHandle =
|
|||
result = loadLib(c, global_symbols)
|
||||
if not result.isNil: break
|
||||
|
||||
when defined(posix):
|
||||
when defined(posix) and not defined(nintendoswitch):
|
||||
#
|
||||
# =========================================================================
|
||||
# This is an implementation based on the dlfcn interface.
|
||||
|
|
@ -115,24 +115,18 @@ when defined(posix):
|
|||
# as an emulation layer on top of native functions.
|
||||
# =========================================================================
|
||||
#
|
||||
var
|
||||
RTLD_NOW {.importc: "RTLD_NOW", header: "<dlfcn.h>".}: int
|
||||
RTLD_GLOBAL {.importc: "RTLD_GLOBAL", header: "<dlfcn.h>".}: int
|
||||
|
||||
proc dlclose(lib: LibHandle) {.importc, header: "<dlfcn.h>".}
|
||||
proc dlopen(path: cstring, mode: int): LibHandle {.
|
||||
importc, header: "<dlfcn.h>".}
|
||||
proc dlsym(lib: LibHandle, name: cstring): pointer {.
|
||||
importc, header: "<dlfcn.h>".}
|
||||
import posix
|
||||
|
||||
proc loadLib(path: string, global_symbols=false): LibHandle =
|
||||
var flags = RTLD_NOW
|
||||
if global_symbols: flags = flags or RTLD_GLOBAL
|
||||
return dlopen(path, flags)
|
||||
proc loadLib(): LibHandle = return dlopen(nil, RTLD_NOW)
|
||||
proc unloadLib(lib: LibHandle) = dlclose(lib)
|
||||
proc symAddr(lib: LibHandle, name: cstring): pointer =
|
||||
return dlsym(lib, name)
|
||||
let flags =
|
||||
if global_symbols: RTLD_NOW or RTLD_GLOBAL
|
||||
else: RTLD_NOW
|
||||
|
||||
dlopen(path, flags)
|
||||
|
||||
proc loadLib(): LibHandle = dlopen(nil, RTLD_NOW)
|
||||
proc unloadLib(lib: LibHandle) = discard dlclose(lib)
|
||||
proc symAddr(lib: LibHandle, name: cstring): pointer = dlsym(lib, name)
|
||||
|
||||
elif defined(nintendoswitch):
|
||||
#
|
||||
|
|
|
|||
|
|
@ -79,12 +79,6 @@ when defined(windows):
|
|||
else:
|
||||
import posix
|
||||
|
||||
var MAP_ANONYMOUS {.importc: "MAP_ANONYMOUS", header: "<sys/mman.h>".}: cint
|
||||
var MAP_NORESERVE {.importc: "MAP_NORESERVE", header: "<sys/mman.h>".}: cint
|
||||
# var MAP_FIXED_NOREPLACE {.importc: "MAP_FIXED_NOREPLACE", header: "<sys/mman.h>".}: cint
|
||||
|
||||
var SC_PAGESIZE {.importc: "_SC_PAGESIZE", header: "<unistd.h>".}: cint
|
||||
|
||||
let allocationGranularity = sysconf(SC_PAGESIZE)
|
||||
|
||||
let
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue