diff options
Diffstat (limited to 'lib/system')
-rw-r--r-- | lib/system/dyncalls.nim | 5 | ||||
-rw-r--r-- | lib/system/gc2.nim | 12 | ||||
-rw-r--r-- | lib/system/gc_common.nim | 1 | ||||
-rw-r--r-- | lib/system/osalloc.nim | 2 |
4 files changed, 14 insertions, 6 deletions
diff --git a/lib/system/dyncalls.nim b/lib/system/dyncalls.nim index 0a994efac..fa997e982 100644 --- a/lib/system/dyncalls.nim +++ b/lib/system/dyncalls.nim @@ -26,6 +26,8 @@ proc nimLoadLibraryError(path: string) = stderr.rawWrite("could not load: ") stderr.rawWrite(path) stderr.rawWrite("\n") + when not(defined(nimDebugDlOpen)): + stderr.rawWrite("compile with -d:nimDebugDlOpen for more information\n") quit(1) proc procAddrError(name: cstring) {.noinline.} = @@ -74,7 +76,8 @@ when defined(posix): when defined(nimDebugDlOpen): let error = dlerror() if error != nil: - c_fprintf(c_stderr, "%s\n", error) + stderr.write(error) + stderr.rawWrite("\n") proc nimGetProcAddr(lib: LibHandle, name: cstring): ProcAddr = result = dlsym(lib, name) diff --git a/lib/system/gc2.nim b/lib/system/gc2.nim index 089c9c915..ce2bfc2ae 100644 --- a/lib/system/gc2.nim +++ b/lib/system/gc2.nim @@ -33,6 +33,9 @@ when withRealTime and not declared(getTicks): when defined(memProfiler): proc nimProfile(requestedSize: int) {.benign.} +when hasThreadSupport: + include sharedlist + type ObjectSpaceIter = object state: range[-1..0] @@ -96,7 +99,7 @@ type stat: GcStat additionalRoots: CellSeq # dummy roots for GC_ref/unref spaceIter: ObjectSpaceIter - dumpHeapFile: File # File that is used for GC_dumpHeap + pDumpHeapFile: pointer # File that is used for GC_dumpHeap when hasThreadSupport: toDispose: SharedList[pointer] @@ -612,6 +615,9 @@ template checkTime {.dirty.} = # ---------------- dump heap ---------------- +template dumpHeapFile(gch: var GcHeap): File = + cast[File](gch.pDumpHeapFile) + proc debugGraph(s: PCell) = c_fprintf(gch.dumpHeapFile, "child %p\n", s) @@ -625,7 +631,7 @@ proc GC_dumpHeap*(file: File) = ## Dumps the GCed heap's content to a file. Can be useful for ## debugging. Produces an undocumented text file format that ## can be translated into "dot" syntax via the "heapdump2dot" tool. - gch.dumpHeapFile = file + gch.pDumpHeapFile = file var spaceIter: ObjectSpaceIter var d = gch.decStack.d for i in 0 .. < gch.decStack.len: @@ -643,7 +649,7 @@ proc GC_dumpHeap*(file: File) = writeCell(file, "cell ", c) forAllChildren(c, waDebug) c_fprintf(file, "end\n") - gch.dumpHeapFile = nil + gch.pDumpHeapFile = nil proc GC_dumpHeap() = var f: File diff --git a/lib/system/gc_common.nim b/lib/system/gc_common.nim index 7a1b88c84..513ede173 100644 --- a/lib/system/gc_common.nim +++ b/lib/system/gc_common.nim @@ -120,6 +120,7 @@ when allowForeignThreadGc: ## switches are used if not localGcInitialized: localGcInitialized = true + initAllocator() var stackTop {.volatile.}: pointer setStackBottom(addr(stackTop)) initGC() diff --git a/lib/system/osalloc.nim b/lib/system/osalloc.nim index b07a362a0..316dd74d7 100644 --- a/lib/system/osalloc.nim +++ b/lib/system/osalloc.nim @@ -87,8 +87,6 @@ elif defined(posix): const MAP_ANONYMOUS = 0x1000 elif defined(solaris): const MAP_ANONYMOUS = 0x100 - elif defined(linux): - const MAP_ANONYMOUS = 0x20 else: var MAP_ANONYMOUS {.importc: "MAP_ANONYMOUS", header: "<sys/mman.h>".}: cint |