X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fcoreparse.c;h=0ed38c5e716be862a2f2b141f47bd37b87649a63;hb=402958f92506b9d3de852601b8c1ccb99b5ee558;hp=354040bbe1da4e6df710e0c240cf9f32ab7bf49b;hpb=9b458bf995314b7edd1cc050bd11ede83ada4328;p=sbcl.git diff --git a/src/runtime/coreparse.c b/src/runtime/coreparse.c index 354040b..0ed38c5 100644 --- a/src/runtime/coreparse.c +++ b/src/runtime/coreparse.c @@ -35,6 +35,12 @@ #include "validate.h" #include "gc-internal.h" +/* lutex stuff */ +#if defined(LISP_FEATURE_SB_THREAD) && defined(LISP_FEATURE_SB_LUTEX) +#include "genesis/sap.h" +#endif + + unsigned char build_id[] = #include "../../output/build-id.tmp" ; @@ -285,6 +291,41 @@ load_core_file(char *file, os_vm_offset_t file_offset) 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