emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

scratch/igc 29bc3ac7551 3/3: WIP, pure space


From: Gerd Moellmann
Subject: scratch/igc 29bc3ac7551 3/3: WIP, pure space
Date: Thu, 18 Apr 2024 10:33:11 -0400 (EDT)

branch: scratch/igc
commit 29bc3ac7551c60af62a68f937ac041d93efa6cb0
Author: Gerd Möllmann <gerd@gnu.org>
Commit: Gerd Möllmann <gerd@gnu.org>

    WIP, pure space
---
 src/.lldbinit | 11 +++--------
 src/alloc.c   |  2 +-
 src/igc.c     | 32 +++++++++++++++++++++++++++++++-
 src/lisp.h    |  1 +
 src/pdumper.c |  2 ++
 5 files changed, 38 insertions(+), 10 deletions(-)

diff --git a/src/.lldbinit b/src/.lldbinit
index dd46b63a0cf..3f4f59be531 100644
--- a/src/.lldbinit
+++ b/src/.lldbinit
@@ -65,14 +65,9 @@ b die
 #process handle -p true -s false SIGSEGV
 #process handle -p true -s false SIGBUS
 
-#target create emacs
-#settings set -- target.run-args -batch --no-site-file --no-site-lisp --eval 
'(setq load-prefer-newer t)' -l ox-texinfo --eval '(setq gc-cons-threshold 
50000000)' -f org-texinfo-export-to-texinfo-batch modus-themes.org 
modus-themes.texi
-#command alias go process launch --working-dir ../doc/misc
+target create temacs
+settings set -- target.run-args --batch  -l loadup --temacs=pbootstrap 
--bin-dest  --eln-dest
+command alias go process launch --working-dir .
 
-#target create temacs
-#settings set -- target.run-args --batch  -l loadup --temacs=pbootstrap 
--bin-dest /Users/gerd/emacs/github/igc/nextstep/Emacs.app/Contents/MacOS/ 
--eln-dest /Users/gerd/emacs/github/igc/nextstep/Emacs.app/Contents/Frameworks/
-#command alias go process launch --working-dir .
-
-target create emacs
 
 # end.
diff --git a/src/alloc.c b/src/alloc.c
index 11058ca5b65..6d794d2b5d6 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -405,7 +405,7 @@ static ptrdiff_t pure_bytes_used_before_overflow;
 
 /* Index in pure at which next pure Lisp object will be allocated..  */
 
-static ptrdiff_t pure_bytes_used_lisp;
+ptrdiff_t pure_bytes_used_lisp;
 
 /* Number of bytes allocated for non-Lisp objects in pure storage.  */
 
diff --git a/src/igc.c b/src/igc.c
index a844326fd56..0026fa31cb3 100644
--- a/src/igc.c
+++ b/src/igc.c
@@ -43,6 +43,7 @@ along with GNU Emacs.  If not, see 
<https://www.gnu.org/licenses/>. */
 #include "termhooks.h"
 #include "thread.h"
 #include "treesit.h"
+#include "puresize.h"
 
 #ifndef USE_LSB_TAG
 # error "USE_LSB_TAG required"
@@ -93,11 +94,17 @@ igc_assert_fail (const char *file, unsigned line, const 
char *msg)
 
 static mps_addr_t min_addr, max_addr;
 
+static bool
+is_pure (const mps_addr_t addr)
+{
+  return PURE_P (addr);
+}
+
 static bool
 is_mps (const mps_addr_t addr)
 {
   return addr >= min_addr && addr < max_addr && !pdumper_object_p (addr)
-        && !c_symbol_p (addr);
+    && !c_symbol_p (addr) && !is_pure (addr);
 }
 
 enum
@@ -788,6 +795,20 @@ scan_ambig (mps_ss_t ss, void *start, void *end, void 
*closure)
   return MPS_RES_OK;
 }
 
+static mps_res_t
+scan_pure (mps_ss_t ss, void *start, void *end, void *closure)
+{
+  MPS_SCAN_BEGIN (ss)
+  {
+    igc_assert (start == (void *) pure);
+    end = (char *) pure + pure_bytes_used_lisp;
+    if (end > start)
+      IGC_FIX_CALL (ss, scan_ambig (ss, start, end, NULL));
+  }
+  MPS_SCAN_END (ss);
+  return MPS_RES_OK;
+}
+
 static mps_res_t
 scan_bc (mps_ss_t ss, void *start, void *end, void *closure)
 {
@@ -1652,6 +1673,14 @@ root_create_igc (struct igc *gc)
   root_create (gc, gc, gc + 1, mps_rank_exact (), scan_igc, false);
 }
 
+static void
+root_create_pure (struct igc *gc)
+{
+  void *start = &pure[0];
+  void *end = &pure[PURESIZE];
+  root_create (gc, start, end, mps_rank_ambig (), scan_pure, true);
+}
+
 static void
 root_create_thread (struct igc_thread_list *t)
 {
@@ -2657,6 +2686,7 @@ make_igc (void)
   gc->weak_pool = make_pool_awl (gc, gc->weak_fmt);
 
   root_create_igc (gc);
+  root_create_pure (gc);
   root_create_buffer (gc, &buffer_defaults);
   root_create_buffer (gc, &buffer_local_symbols);
   root_create_staticvec (gc);
diff --git a/src/lisp.h b/src/lisp.h
index c725b89070e..dd558badb4d 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -4976,6 +4976,7 @@ XMODULE_FUNCTION (Lisp_Object o)
 typedef void (*module_funcptr) (void);
 
 /* Defined in alloc.c.  */
+extern ptrdiff_t pure_bytes_used_lisp;
 void set_string_marked (struct Lisp_String *s);
 void mark_interval_tree (INTERVAL i);
 
diff --git a/src/pdumper.c b/src/pdumper.c
index a916d326a43..8b179247db0 100644
--- a/src/pdumper.c
+++ b/src/pdumper.c
@@ -2493,7 +2493,9 @@ dump_symbol (struct dump_context *ctx,
   struct Lisp_Symbol *symbol = XSYMBOL (object);
   struct Lisp_Symbol out;
   dump_object_start (ctx, &out, sizeof (out));
+#ifndef HAVE_MPS
   eassert (symbol->u.s.gcmarkbit == 0);
+#endif
   DUMP_FIELD_COPY (&out, symbol, u.s.redirect);
   DUMP_FIELD_COPY (&out, symbol, u.s.trapped_write);
   DUMP_FIELD_COPY (&out, symbol, u.s.interned);



reply via email to

[Prev in Thread] Current Thread [Next in Thread]