#include <unistd.h>
#include "sbcl.h"
+
+#ifndef LISP_FEATURE_WIN32
+#ifdef LISP_FEATURE_LINUX
+/* For madvise */
+# define _BSD_SOURCE
+#endif
+#include <sys/mman.h>
+#endif
+
#include "os.h"
#include "runtime.h"
#include "globals.h"
#include "validate.h"
#include "gc-internal.h"
-/* lutex stuff */
-#if defined(LISP_FEATURE_SB_THREAD) && defined(LISP_FEATURE_SB_LUTEX)
-#include "genesis/sap.h"
-#include "pthread-lutex.h"
-#endif
-
#include <errno.h>
#ifdef LISP_FEATURE_SB_CORE_COMPRESSION
lseek(fd, -end_offset, SEEK_END);
- if (new_runtime_options = read_runtime_options(fd)) {
+ if ((new_runtime_options = read_runtime_options(fd))) {
runtime_options = new_runtime_options;
}
}
# undef ZLIB_BUFFER_SIZE
#endif
+int merge_core_pages = -1;
+
static void
process_directory(int fd, lispobj *ptr, int count, os_vm_offset_t file_offset)
{
}
}
+#ifdef MADV_MERGEABLE
+ if ((merge_core_pages == 1)
+ || ((merge_core_pages == -1) && compressed)) {
+ madvise(addr, len, MADV_MERGEABLE);
+ }
+#endif
+
FSHOW((stderr, "/space id = %ld, free pointer = 0x%lx\n",
id, (unsigned long)free_pointer));
initial_function = (lispobj)*ptr;
break;
-#if defined(LISP_FEATURE_SB_THREAD) && defined(LISP_FEATURE_SB_LUTEX)
- case LUTEX_TABLE_CORE_ENTRY_TYPE_CODE:
- SHOW("LUTEX_TABLE_CORE_ENTRY_TYPE_CODE case");
- {
- size_t n_lutexes = *ptr;
- size_t fdoffset = (*(ptr + 1) + 1) * (os_vm_page_size);
- size_t data_length = n_lutexes * sizeof(struct sap *);
- struct lutex **lutexes_to_resurrect = malloc(data_length);
- long bytes_read;
-
- lseek(fd, fdoffset + file_offset, SEEK_SET);
-
- FSHOW((stderr, "attempting to read %ld lutexes from core\n", n_lutexes));
- bytes_read = read(fd, lutexes_to_resurrect, data_length);
-
- /* XXX */
- if (bytes_read != data_length) {
- lose("Could not read the lutex table");
- }
- else {
- int i;
-
- for (i=0; i<n_lutexes; ++i) {
- struct lutex *lutex = lutexes_to_resurrect[i];
-
- FSHOW((stderr, "re-init'ing lutex @ %p\n", lutex));
- lutex_init((tagged_lutex_t) lutex);
- }
-
- free(lutexes_to_resurrect);
- }
- break;
- }
-#endif
-
#ifdef LISP_FEATURE_GENCGC
case PAGE_TABLE_CORE_ENTRY_TYPE_CODE:
{