]> gitweb.factorcode.org Git - factor.git/commitdiff
Merge pull request #2591 from nomennescio/feature-vm-prepare-image-reserved-fields
authornomennescio <nomennescio@users.noreply.github.com>
Tue, 22 Aug 2023 21:19:53 +0000 (23:19 +0200)
committerGitHub <noreply@github.com>
Tue, 22 Aug 2023 21:19:53 +0000 (23:19 +0200)
VM prepare image reserved fields usage

vm/image.cpp
vm/image.hpp

index 571cfa0d27e03e61cd62014454431df60bf6f4d9..1eb6448d67119a8e333a4cbc5b7d33659a35bd70 100644 (file)
@@ -255,6 +255,8 @@ void factor_vm::load_image(vm_parameters* p) {
   if (h.version != image_version)
     fatal_error("Bad image: version number check failed", h.version);
 
+  if (!h.version4_escape) h.data_size=h.escaped_data_size, h.escaped_data_size=0;
+
   load_data_heap(file, &h, p);
   load_code_heap(file, &h, p);
 
index 8e5d94a68addcf85e1caf6c55ce4322d31332ad0..67b1b3c8bb3b16df595e953a4f2013a1c765ad71 100644 (file)
@@ -15,17 +15,17 @@ struct image_header {
   cell version;
   // base address of data heap when image was saved
   cell data_relocation_base;
-  // size of heap
-  cell data_size;
+  // <>0 : size of data heap, ==0 : version4_escape
+  union { cell data_size; cell version4_escape; };
   // base address of code heap when image was saved
   cell code_relocation_base;
   // size of code heap
   cell code_size;
 
-  cell reserved_1;
-  cell reserved_2;
-  cell reserved_3;
-  cell reserved_4;
+  union { cell reserved_1; cell escaped_data_size; }; // undefined if data_size <>0, stores size of data heap otherwise
+  cell reserved_2; // undefined if data_size <>0, 0 otherwise
+  cell reserved_3; // undefined if data_size <>0, 0 otherwise
+  cell reserved_4; // undefined if data_size <>0, 0 otherwise
 
   // Initial user environment
   cell special_objects[special_object_count];