emacs-diffs
[Top][All Lists]
Advanced

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

scratch/igc fa229560021 1/3: Remove unused code, including the mirroring


From: Gerd Moellmann
Subject: scratch/igc fa229560021 1/3: Remove unused code, including the mirroring code
Date: Tue, 18 Jun 2024 06:42:48 -0400 (EDT)

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

    Remove unused code, including the mirroring code
---
 src/igc.c | 961 +-------------------------------------------------------------
 1 file changed, 3 insertions(+), 958 deletions(-)

diff --git a/src/igc.c b/src/igc.c
index 33ba5525f5e..6f59a2013e2 100644
--- a/src/igc.c
+++ b/src/igc.c
@@ -3759,898 +3759,6 @@ igc_dump_finish_obj (void *client, enum igc_obj_type 
type,
   return base + nbytes;
 }
 
-
-/***********************************************************************
-                           Copying the dump
- ***********************************************************************/
-
-/* Copy object with base address BASE to MPS.  BASE must be an object in
-   the loaded dump. Ensure that the copy has the same hash as the copied
-   object so that hash tables don't need to be re-hashed.  Value is the
-   base address of the copy. */
-
-static mps_addr_t
-copy_to_mps (mps_addr_t base)
-{
-  igc_assert (pdumper_object_p (base));
-  struct igc_header *h = base;
-  mps_ap_t ap = thread_ap (h->obj_type);
-  size_t nbytes = obj_size (h);
-  igc_assert (nbytes >= sizeof (struct igc_fwd));
-  mps_addr_t copy;
-  do
-    {
-      mps_res_t res = mps_reserve (&copy, ap, nbytes);
-      if (res != MPS_RES_OK)
-       memory_full (0);
-      memcpy (copy, base, nbytes);
-    }
-  while (!mps_commit (ap, copy, nbytes));
-  return copy;
-}
-
-struct igc_mirror
-{
-  Lisp_Object dump_to_mps;
-  struct
-  {
-    size_t n, nbytes;
-  } objs[IGC_OBJ_NUM_TYPES];
-  struct
-  {
-    size_t n, nbytes;
-  } pvec[PVEC_TAG_MAX + 1];
-  struct
-  {
-    const char *msg;
-    double time;
-  } times[10];
-  int ntimes;
-};
-
-static void
-record_time (struct igc_mirror *m, const char *msg)
-{
-  igc_assert (m->ntimes < ARRAYELTS (m->times));
-  m->times[m->ntimes].msg = msg;
-  m->times[m->ntimes].time = float_time (Qnil);
-  m->ntimes += 1;
-}
-
-static struct igc_mirror
-make_igc_mirror (void)
-{
-  Lisp_Object nobj = make_fixnum (1000000);
-  Lisp_Object ht = CALLN (Fmake_hash_table, QCtest, Qeq, QCsize, nobj);
-  return (struct igc_mirror) { .dump_to_mps = ht };
-}
-
-static void
-print_mirror_stats (struct igc_mirror *m)
-{
-  size_t ntotal = 0, nbytes_total = 0;
-  fprintf (stderr, "--------------------------------------------------\n");
-  fprintf (stderr, "%30s %8s %10s\n", "Type", "N", "Bytes");
-  fprintf (stderr, "--------------------------------------------------\n");
-  for (int i = 0; i < ARRAYELTS (m->objs); ++i)
-    {
-      fprintf (stderr, "%30s %8zu %10zu\n", obj_type_name (i), m->objs[i].n,
-              m->objs[i].nbytes);
-      ntotal += m->objs[i].n;
-      nbytes_total += m->objs[i].nbytes;
-    }
-  fprintf (stderr, "--------------------------------------------------\n");
-  fprintf (stderr, "%30s %8s %10s\n", "Type", "N", "Bytes");
-  fprintf (stderr, "--------------------------------------------------\n");
-  for (int i = 0; i < ARRAYELTS (m->pvec); ++i)
-    fprintf (stderr, "%30s %8zu %10zu\n", pvec_type_name (i), m->pvec[i].n,
-            m->pvec[i].nbytes);
-  fprintf (stderr, "--------------------------------------------------\n");
-  fprintf (stderr, "%30s %8zu %10zu\n", "Total", ntotal, nbytes_total);
-  if (m->ntimes > 1)
-    {
-      fprintf (stderr, "--------------------------------------------------\n");
-      for (int i = 1; i < m->ntimes; ++i)
-       fprintf (stderr, "%30s %8.4fs\n", m->times[i].msg,
-                m->times[i].time - m->times[i - 1].time);
-      fprintf (stderr, "%30s %8.4fs\n", "Total time",
-              m->times[m->ntimes - 1].time - m->times[0].time);
-    }
-}
-
-static Lisp_Object
-pointer_to_fixnum (void *p)
-{
-  igc_assert (is_aligned (p));
-  uintptr_t w = (uintptr_t) p;
-  return make_fixnum (w >> GCTYPEBITS);
-}
-
-static void *
-fixnum_to_pointer (Lisp_Object obj)
-{
-  igc_assert (FIXNUMP (obj));
-  uintptr_t w = XFIXNUM (obj);
-  return (void *) (w << GCTYPEBITS);
-}
-
-static void
-record_copy (struct igc_mirror *m, void *dumped, void *copy)
-{
-  Lisp_Object key = pointer_to_fixnum (dumped);
-  igc_assert (fixnum_to_pointer (key) == dumped);
-  Lisp_Object val = pointer_to_fixnum (copy);
-  igc_assert (fixnum_to_pointer (val) == copy);
-  Fputhash (key, val, m->dump_to_mps);
-
-  struct igc_header *h = copy;
-  m->objs[h->obj_type].n += 1;
-  m->objs[h->obj_type].nbytes += obj_size (h);
-
-  if (h->obj_type == IGC_OBJ_VECTOR)
-    {
-      struct Lisp_Vector *v = base_to_client (copy);
-      int i = pseudo_vector_type (v);
-      m->pvec[i].n += 1;
-      m->pvec[i].nbytes += obj_size (h);
-    }
-}
-
-static void *
-lookup_copy (struct igc_mirror *m, void *dumped)
-{
-  Lisp_Object key = pointer_to_fixnum (dumped);
-  Lisp_Object found = Fgethash (key, m->dump_to_mps, Qnil);
-  return NILP (found) ? NULL : fixnum_to_pointer (found);
-}
-
-static void
-copy_dump (struct igc_mirror *m)
-{
-  struct pdumper_object_it it = {0};
-  void *org_base;
-  while ((org_base = pdumper_next_object (&it)) != NULL)
-    {
-      struct igc_header *h = org_base;
-      switch (h->obj_type)
-       {
-       case IGC_OBJ_INVALID:
-       case IGC_OBJ_PAD:
-       case IGC_OBJ_FWD:
-       case IGC_OBJ_CONS:
-       case IGC_OBJ_SYMBOL:
-       case IGC_OBJ_INTERVAL:
-       case IGC_OBJ_STRING:
-       case IGC_OBJ_STRING_DATA:
-       case IGC_OBJ_VECTOR:
-       case IGC_OBJ_VECTOR_WEAK:
-       case IGC_OBJ_ITREE_TREE:
-       case IGC_OBJ_ITREE_NODE:
-       case IGC_OBJ_IMAGE:
-       case IGC_OBJ_IMAGE_CACHE:
-       case IGC_OBJ_FACE:
-       case IGC_OBJ_FACE_CACHE:
-       case IGC_OBJ_FLOAT:
-       case IGC_OBJ_BLV:
-       case IGC_OBJ_PTR_VEC:
-       case IGC_OBJ_OBJ_VEC:
-       case IGC_OBJ_HASH_VEC:
-       case IGC_OBJ_HANDLER:
-       case IGC_OBJ_BYTES:
-       case IGC_OBJ_NUM_TYPES:
-         record_copy (m, org_base, copy_to_mps (org_base));
-         break;
-
-       case IGC_OBJ_BUILTIN_SYMBOL:
-       case IGC_OBJ_BUILTIN_THREAD:
-       case IGC_OBJ_BUILTIN_SUBR:
-         break;
-       case IGC_OBJ_DUMPED_FWD:
-       case IGC_OBJ_DUMPED_CHARSET_TABLE:
-       case IGC_OBJ_DUMPED_CODE_SPACE_MASKS:
-       case IGC_OBJ_DUMPED_BUFFER_TEXT:
-       case IGC_OBJ_DUMPED_BYTES:
-         emacs_abort ();
-       }
-    }
-  record_time (m, "Copy objects to MPS");
-}
-
-static void
-mirror_lisp_obj (struct igc_mirror *m, Lisp_Object *pobj)
-{
-  mps_word_t *p = (mps_word_t *) pobj;
-  mps_word_t word = *p;
-  mps_word_t tag = word & IGC_TAG_MASK;
-
-  if (tag == Lisp_Int0 || tag == Lisp_Int1)
-    return;
-  else if (tag == Lisp_Type_Unused0)
-    emacs_abort ();
-
-  if (tag == Lisp_Symbol)
-    {
-      ptrdiff_t off = word ^ tag;
-      mps_addr_t client = (mps_addr_t) ((char *) lispsym + off);
-      if (pdumper_object_p (client))
-       {
-         mps_addr_t base = client_to_base (client);
-         mps_addr_t mirror = lookup_copy (m, base);
-         igc_assert (mirror != NULL);
-         client = base_to_client (mirror);
-         ptrdiff_t new_off = (char *) client - (char *) lispsym;
-         *p = new_off | tag;
-       }
-    }
-  else
-    {
-      mps_addr_t client = (mps_addr_t) (word ^ tag);
-      if (pdumper_object_p (client))
-       {
-         mps_addr_t base = client_to_base (client);
-         mps_addr_t mirror = lookup_copy (m, base);
-         igc_assert (mirror != NULL);
-         client = base_to_client (mirror);
-         *p = (mps_word_t) client | tag;
-       }
-    }
-}
-
-static void
-mirror_raw (struct igc_mirror *m, mps_addr_t *p)
-{
-  mps_addr_t client = *p;
-  if (pdumper_object_p (client))
-    {
-      mps_addr_t base = client_to_base (client);
-      mps_addr_t mirror = lookup_copy (m, base);
-      igc_assert (mirror != NULL);
-      *p = base_to_client (mirror);
-    }
-}
-
-#define IGC_MIRROR_OBJ(m, obj) mirror_lisp_obj ((m), (obj))
-#define IGC_MIRROR_RAW(m, pp) mirror_raw ((m), (mps_addr_t *) (pp))
-
-static void
-mirror_array (struct igc_mirror *m, Lisp_Object *array, size_t n)
-{
-  for (size_t i = 0; i < n; ++i)
-    IGC_MIRROR_OBJ (m, &array[i]);
-}
-
-#define IGC_MIRROR_NOBJS(m, a, n) mirror_array (m, a, n)
-
-static void
-mirror_fwd (struct igc_mirror *m, lispfwd fwd)
-{
-  switch (XFWDTYPE (fwd))
-    {
-    case Lisp_Fwd_Int:
-    case Lisp_Fwd_Bool:
-    case Lisp_Fwd_Kboard_Obj:
-      break;
-
-    case Lisp_Fwd_Obj:
-      {
-       struct Lisp_Objfwd *o = (void *) fwd.fwdptr;
-       IGC_MIRROR_OBJ (m, o->objvar);
-      }
-      break;
-
-    case Lisp_Fwd_Buffer_Obj:
-      {
-       struct Lisp_Buffer_Objfwd *b = (void *) fwd.fwdptr;
-       IGC_MIRROR_OBJ (m, &b->predicate);
-      }
-      break;
-    }
-}
-
-static void
-mirror_symbol (struct igc_mirror *m, struct Lisp_Symbol *sym)
-{
-  IGC_MIRROR_OBJ (m, &sym->u.s.name);
-  IGC_MIRROR_OBJ (m, &sym->u.s.function);
-  IGC_MIRROR_OBJ (m, &sym->u.s.plist);
-#ifdef IN_MY_FORK
-  IGC_MIRROR_OBJ (m, &sym->u.s.package);
-#else
-  IGC_MIRROR_RAW (m, &sym->u.s.next);
-#endif
-  switch (sym->u.s.redirect)
-    {
-    case SYMBOL_PLAINVAL:
-      IGC_MIRROR_OBJ (m, &sym->u.s.val.value);
-      break;
-
-    case SYMBOL_VARALIAS:
-      IGC_MIRROR_RAW (m, &sym->u.s.val.alias);
-      break;
-
-    case SYMBOL_LOCALIZED:
-      IGC_MIRROR_RAW (m, &sym->u.s.val.blv);
-      break;
-
-    case SYMBOL_FORWARDED:
-      mirror_fwd (m, sym->u.s.val.fwd);
-      break;
-    }
-}
-
-static void
-mirror_string (struct igc_mirror *m, struct Lisp_String *s)
-{
-  IGC_MIRROR_RAW (m, &s->u.s.data);
-  IGC_MIRROR_RAW (m, &s->u.s.intervals);
-}
-
-static void
-mirror_interval (struct igc_mirror *m, struct interval *i)
-{
-  IGC_MIRROR_RAW (m, &i->left);
-  IGC_MIRROR_RAW (m, &i->right);
-  if (i->up_obj)
-    IGC_MIRROR_OBJ (m, &i->up.obj);
-  else if (i->up.interval)
-    IGC_MIRROR_RAW (m, &i->up.interval);
-  IGC_MIRROR_OBJ (m, &i->plist);
-}
-
-static void
-mirror_itree_tree (struct igc_mirror *m, struct itree_tree *t)
-{
-  IGC_NOT_IMPLEMENTED ();
-}
-
-static void
-mirror_itree_node (struct igc_mirror *m, struct itree_node *n)
-{
-  if (n->parent)
-    IGC_MIRROR_RAW (m, &n->parent);
-  if (n->left)
-    IGC_MIRROR_RAW (m, &n->left);
-  if (n->right)
-    IGC_MIRROR_RAW (m, &n->right);
-  IGC_MIRROR_OBJ (m, &n->data);
-}
-
-static void
-mirror_image (struct igc_mirror *m, struct image *i)
-{
-  IGC_NOT_IMPLEMENTED ();
-}
-
-static void
-mirror_image_cache (struct igc_mirror *m, struct image_cache *c)
-{
-  IGC_NOT_IMPLEMENTED ();
-}
-
-static void
-mirror_face (struct igc_mirror *m, struct face *f)
-{
-  IGC_NOT_IMPLEMENTED ();
-}
-
-static void
-mirror_face_cache (struct igc_mirror *m, struct face_cache *c)
-{
-  IGC_NOT_IMPLEMENTED ();
-}
-
-static void
-mirror_ptr_vec (struct igc_mirror *m, void *p)
-{
-  IGC_NOT_IMPLEMENTED ();
-}
-
-static void
-mirror_obj_vec (struct igc_mirror *m, Lisp_Object *v)
-{
-  size_t n = object_nelems (v, sizeof *v);
-  for (size_t i = 0; i < n; ++i)
-    IGC_MIRROR_OBJ (m, &v[i]);
-}
-
-static void
-mirror_handler (struct igc_mirror *m, struct handler *h)
-{
-  IGC_NOT_IMPLEMENTED ();
-}
-
-static void
-mirror_cons (struct igc_mirror *m, struct Lisp_Cons *c)
-{
-  IGC_MIRROR_OBJ (m, &c->u.s.car);
-  IGC_MIRROR_OBJ (m, &c->u.s.u.cdr);
-}
-
-static void
-mirror_blv (struct igc_mirror *m, struct Lisp_Buffer_Local_Value *blv)
-{
-  IGC_MIRROR_OBJ (m, &blv->where);
-  IGC_MIRROR_OBJ (m, &blv->defcell);
-  IGC_MIRROR_OBJ (m, &blv->valcell);
-}
-
-static void
-mirror_vectorlike_ (struct igc_mirror *m, struct Lisp_Vector *v)
-{
-  ptrdiff_t size = vector_size (v);
-  IGC_MIRROR_NOBJS (m, v->contents, size);
-}
-
-#define IGC_MIRROR_VECTORLIKE(m, v) \
-  mirror_vectorlike_ ((m), (struct Lisp_Vector *) (v))
-
-#ifndef IN_MY_FORK
-static void
-mirror_obarray (struct igc_mirror *m, struct Lisp_Obarray *o)
-{
-  IGC_MIRROR_RAW (m, &o->buckets);
-}
-#endif
-
-static void
-mirror_font (struct igc_mirror *m, struct Lisp_Vector *v)
-{
-  IGC_MIRROR_VECTORLIKE (m, v);
-  switch (vector_size (v))
-    {
-    case FONT_SPEC_MAX:
-    case FONT_ENTITY_MAX:
-      break;
-
-    case FONT_OBJECT_MAX:
-      {
-       struct font *f = (struct font *) v;
-       Lisp_Object const *type = &f->driver->type;
-       IGC_MIRROR_OBJ (m, igc_const_cast (Lisp_Object *, type));
-      }
-      break;
-
-    default:
-      emacs_abort ();
-    }
-}
-
-static void
-mirror_mutex (struct igc_mirror *m, struct Lisp_Mutex *x)
-{
-  IGC_NOT_IMPLEMENTED ();
-}
-
-static void
-mirror_buffer (struct igc_mirror *m, struct buffer *b)
-{
-  IGC_MIRROR_VECTORLIKE (m, b);
-  IGC_MIRROR_RAW (m, &b->own_text.intervals);
-  IGC_MIRROR_OBJ (m, &b->own_text.markers);
-  IGC_MIRROR_RAW (m, &b->overlays);
-
-  IGC_MIRROR_RAW (m, &b->base_buffer);
-  if (b->base_buffer)
-    b->text = &b->base_buffer->own_text;
-  else
-    b->text = &b->own_text;
-
-  IGC_MIRROR_OBJ (m, &b->undo_list_);
-}
-
-static void
-mirror_frame (struct igc_mirror *m, struct frame *f)
-{
-  IGC_MIRROR_VECTORLIKE (m, f);
-  IGC_MIRROR_RAW (m, &f->face_cache);
-  if (f->terminal)
-    IGC_MIRROR_RAW (m, &f->terminal);
-#ifdef HAVE_WINDOW_SYSTEM
-  igc_assert (!FRAME_WINDOW_P (f));
-#endif
-}
-
-static void
-mirror_window (struct igc_mirror *m, struct window *w)
-{
-  IGC_MIRROR_VECTORLIKE (m, w);
-  igc_assert (w->current_matrix == NULL);
-  igc_assert (w->desired_matrix == NULL);
-  IGC_MIRROR_OBJ (m, &w->prev_buffers);
-  IGC_MIRROR_OBJ (m, &w->next_buffers);
-}
-
-static void
-mirror_hash_table (struct igc_mirror *m, struct Lisp_Hash_Table *h)
-{
-  IGC_MIRROR_RAW (m, &h->key);
-  IGC_MIRROR_RAW (m, &h->value);
-  IGC_MIRROR_RAW (m, &h->hash);
-  IGC_MIRROR_RAW (m, &h->next);
-  IGC_MIRROR_RAW (m, &h->index);
-  igc_assert (!pdumper_object_p (h->key));
-  igc_assert (!pdumper_object_p (h->value));
-}
-
-static void
-mirror_char_table (struct igc_mirror *m, struct Lisp_Vector *v)
-{
-  for (size_t i = vector_start (v), n = vector_size (v); i < n; ++i)
-    IGC_MIRROR_OBJ (m, &v->contents[i]);
-}
-
-static void
-mirror_overlay (struct igc_mirror *m, struct Lisp_Overlay *o)
-{
-  IGC_MIRROR_RAW (m, &o->buffer);
-  IGC_MIRROR_OBJ (m, &o->plist);
-  IGC_MIRROR_RAW (m, &o->interval);
-}
-
-static void
-mirror_subr (struct igc_mirror *m, struct Lisp_Subr *s)
-{
-  IGC_MIRROR_OBJ (m, &s->command_modes);
-#ifdef HAVE_NATIVE_COMP
-  IGC_MIRROR_OBJ (m, &s->intspec.native);
-  IGC_MIRROR_OBJ (m, &s->command_modes);
-  IGC_MIRROR_OBJ (m, &s->native_comp_u);
-  IGC_MIRROR_OBJ (m, &s->lambda_list);
-  IGC_MIRROR_OBJ (m, &s->type);
-#endif
-}
-
-static void
-mirror_misc_ptr (struct igc_mirror *m, struct Lisp_Misc_Ptr *p)
-{
-  IGC_NOT_IMPLEMENTED ();
-}
-
-static void
-mirror_user_ptr (struct igc_mirror *m, struct Lisp_User_Ptr *p)
-{
-  IGC_NOT_IMPLEMENTED ();
-}
-
-static void
-mirror_thread (struct igc_mirror *m, struct thread_state *s)
-{
-  IGC_MIRROR_VECTORLIKE (m, s);
-  IGC_MIRROR_RAW (m, &s->m_current_buffer);
-  IGC_MIRROR_RAW (m, &s->next_thread);
-  IGC_MIRROR_RAW (m, &s->m_handlerlist);
-}
-
-static void
-mirror_terminal (struct igc_mirror *m, struct terminal *t)
-{
-  IGC_NOT_IMPLEMENTED ();
-}
-
-static void
-mirror_marker (struct igc_mirror *m, struct Lisp_Marker *ma)
-{
-  IGC_MIRROR_RAW (m, &ma->buffer);
-}
-
-static void
-mirror_finalizer (struct igc_mirror *m, struct Lisp_Finalizer *f)
-{
-  IGC_NOT_IMPLEMENTED ();
-}
-
-static void
-mirror_comp_unit (struct igc_mirror *m, struct Lisp_Native_Comp_Unit *u)
-{
-  IGC_MIRROR_VECTORLIKE (m, u);
-}
-
-#ifdef HAVE_XWIDGETS
-static void
-mirror_xwidget (struct igc_mirror *m, struct xwidget *w)
-{
-  IGC_NOT_IMPLEMENTED ();
-}
-
-static void
-mirror_xwidget_view (struct igc_mirror *m, struct xwidget_view *v)
-{
-  IGC_NOT_IMPLEMENTED ();
-}
-#endif
-
-#ifdef HAVE_MODULES
-static void
-mirror_global_ref (struct igc_mirror *m, struct module_global_reference *r)
-{
-  IGC_NOT_IMPLEMENTED ();
-}
-#endif
-
-static void
-mirror_vector (struct igc_mirror *m, void *client)
-{
-  switch (pseudo_vector_type (client))
-    {
-#ifndef IN_MY_FORK
-    case PVEC_OBARRAY:
-      mirror_obarray (m, client);
-      break;
-#endif
-
-    case PVEC_BUFFER:
-      mirror_buffer (m, client);
-      break;
-
-    case PVEC_FRAME:
-      mirror_frame (m, client);
-      break;
-
-    case PVEC_WINDOW:
-      mirror_window (m, client);
-      break;
-
-    case PVEC_HASH_TABLE:
-      mirror_hash_table (m, client);
-      break;
-
-    case PVEC_CHAR_TABLE:
-    case PVEC_SUB_CHAR_TABLE:
-      mirror_char_table (m, client);
-      break;
-
-    case PVEC_BOOL_VECTOR:
-      break;
-
-    case PVEC_OVERLAY:
-      mirror_overlay (m, client);
-      break;
-
-    case PVEC_SUBR:
-      mirror_subr (m, client);
-      break;
-
-    case PVEC_FREE:
-      emacs_abort ();
-
-    case PVEC_FINALIZER:
-      mirror_finalizer (m, client);
-      break;
-
-    case PVEC_MISC_PTR:
-      mirror_misc_ptr (m, client);
-      break;
-
-    case PVEC_USER_PTR:
-      mirror_user_ptr (m, client);
-      break;
-
-#ifdef HAVE_XWIDGETS
-    case PVEC_XWIDGET:
-      mirror_xwidget (c, client);
-      break;
-
-    case PVEC_XWIDGET_VIEW:
-      mirror_widget_view (c, client);
-      break;
-#endif
-
-    case PVEC_THREAD:
-      mirror_thread (m, client);
-      break;
-
-    case PVEC_MUTEX:
-      mirror_mutex (m, client);
-      break;
-
-    case PVEC_TERMINAL:
-      mirror_terminal (m, client);
-      break;
-
-    case PVEC_MARKER:
-      mirror_marker (m, client);
-      break;
-
-    case PVEC_BIGNUM:
-      break;
-
-    case PVEC_NATIVE_COMP_UNIT:
-      mirror_comp_unit (m, client);
-      break;
-
-    case PVEC_MODULE_GLOBAL_REFERENCE:
-#ifdef HAVE_MODULES
-      mirror_global_ref (m, client);
-#endif
-      break;
-
-    case PVEC_FONT:
-      mirror_font (m, client);
-      break;
-
-    case PVEC_NORMAL_VECTOR:
-    case PVEC_SYMBOL_WITH_POS:
-    case PVEC_PROCESS:
-    case PVEC_WINDOW_CONFIGURATION:
-    case PVEC_XWIDGET:
-    case PVEC_XWIDGET_VIEW:
-    case PVEC_MODULE_FUNCTION:
-    case PVEC_CONDVAR:
-    case PVEC_TS_COMPILED_QUERY:
-    case PVEC_TS_NODE:
-    case PVEC_TS_PARSER:
-    case PVEC_SQLITE:
-    case PVEC_CLOSURE:
-    case PVEC_RECORD:
-    case PVEC_OTHER:
-#ifdef IN_MY_FORK
-    case PVEC_PACKAGE:
-#endif
-      IGC_MIRROR_VECTORLIKE (m, client);
-      break;
-    }
-}
-
-static void
-mirror (struct igc_mirror *m, void *org_base, void *copy_base)
-{
-  void *client = base_to_client (copy_base);
-  struct igc_header *h = copy_base;
-  switch (h->obj_type)
-    {
-    case IGC_OBJ_BUILTIN_SYMBOL:
-    case IGC_OBJ_BUILTIN_THREAD:
-    case IGC_OBJ_BUILTIN_SUBR:
-      break;
-
-    case IGC_OBJ_PAD:
-    case IGC_OBJ_FWD:
-    case IGC_OBJ_INVALID:
-    case IGC_OBJ_DUMPED_FWD:
-    case IGC_OBJ_DUMPED_CHARSET_TABLE:
-    case IGC_OBJ_DUMPED_CODE_SPACE_MASKS:
-    case IGC_OBJ_DUMPED_BUFFER_TEXT:
-    case IGC_OBJ_DUMPED_BYTES:
-    case IGC_OBJ_NUM_TYPES:
-      emacs_abort ();
-
-    case IGC_OBJ_OBJ_VEC:
-    case IGC_OBJ_HASH_VEC:
-      mirror_obj_vec (m, client);
-      break;
-
-    case IGC_OBJ_HANDLER:
-      mirror_handler (m, client);
-      break;
-
-    case IGC_OBJ_PTR_VEC:
-      mirror_ptr_vec (m, client);
-      break;
-
-    case IGC_OBJ_CONS:
-      mirror_cons (m, client);
-      break;
-
-    case IGC_OBJ_STRING_DATA:
-    case IGC_OBJ_FLOAT:
-    case IGC_OBJ_BYTES:
-      break;
-
-    case IGC_OBJ_SYMBOL:
-      mirror_symbol (m, client);
-      break;
-
-    case IGC_OBJ_INTERVAL:
-      mirror_interval (m, client);
-      break;
-
-    case IGC_OBJ_STRING:
-      mirror_string (m, client);
-      break;
-
-    case IGC_OBJ_VECTOR:
-    case IGC_OBJ_VECTOR_WEAK:
-      mirror_vector (m, client);
-      break;
-
-    case IGC_OBJ_ITREE_TREE:
-      mirror_itree_tree (m, client);
-      break;
-
-    case IGC_OBJ_ITREE_NODE:
-      mirror_itree_node (m, client);
-      break;
-
-    case IGC_OBJ_IMAGE:
-      mirror_image (m, client);
-      break;
-
-    case IGC_OBJ_IMAGE_CACHE:
-      mirror_image_cache (m, client);
-      break;
-
-    case IGC_OBJ_FACE:
-      mirror_face (m, client);
-      break;
-
-    case IGC_OBJ_FACE_CACHE:
-      mirror_face_cache (m, client);
-      break;
-
-    case IGC_OBJ_BLV:
-      mirror_blv (m, client);
-      break;
-    }
-}
-
-static void
-mirror_references (struct igc_mirror *m)
-{
-  DOHASH (XHASH_TABLE (m->dump_to_mps), org_base, copy_base)
-    mirror (m, fixnum_to_pointer (org_base), fixnum_to_pointer (copy_base));
-  record_time (m, "Mirror references");
-}
-
-static void
-redirect_charset_table (struct igc_mirror *m)
-{
-  /* charset_table points to a vector of struct charset, which contain a
-     Lisp_Object. When dumping, charset_table contents are written to
-     the dump.  When loading a dump, charset_table is made to point to
-     these charsets in the dump. When charset_table is enlarged,
-     igc_xpalloc is used to make it a root, but until then, it is
-     not. See also the comment in charset.c:1145. */
-  igc_assert (pdumper_object_p (charset_table));
-  const size_t nbytes = charset_table_size * sizeof *charset_table;
-  struct charset *new_table = igc_xzalloc_ambig (nbytes);
-  const size_t used_nbytes = charset_table_used * sizeof *charset_table;
-  memcpy (new_table, charset_table, used_nbytes);
-  charset_table = new_table;
-
-  for (int i = 0; i < charset_table_used; ++i)
-    IGC_MIRROR_OBJ (m, &charset_table[i].attributes);
-}
-
-/* Redirect all roots to point to MPS copies. */
-
-static void
-redirect_roots (struct igc_mirror *m)
-{
-  for (int i = 0; i < staticidx; ++i)
-    IGC_MIRROR_OBJ (m, igc_const_cast (Lisp_Object *, staticvec[i]));
-
-  for (int i = 0; i < ARRAYELTS (lispsym); ++i)
-    mirror_symbol (m, lispsym + i);
-
-  mirror_buffer (m, &buffer_defaults);
-  mirror_buffer (m, &buffer_local_symbols);
-  mirror_thread (m, &main_thread.s);
-  IGC_MIRROR_RAW (m, &terminal_list);
-  redirect_charset_table (m);
-
-  record_time (m, "Redirect roots");
-}
-
-/* Copy the dump [START, END) to MPS, and discard it. */
-
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wunused-function"
-static void
-mirror_dump (void *start, void *end)
-{
-  IGC_WITH_PARKED (global_igc)
-    {
-      struct igc_mirror m = make_igc_mirror ();
-      record_time (&m, "Start");
-      copy_dump (&m);
-      mirror_references (&m);
-      redirect_roots (&m);
-
-      if (getenv ("IGC_MIRROR_STATS"))
-        print_mirror_stats (&m);
-    }
-}
-
 static mps_addr_t pinned_objects_in_dump[3];
 
 /* Called from pdumper_load. [START, END) is the hot section of the
@@ -4661,7 +3769,6 @@ igc_on_pdump_loaded (void *dump_base, void *hot_start, 
void *hot_end,
                     void *cold_start, void *cold_end,
                     void *cold_user_data_start, void *heap_end)
 {
-  // mirror_dump (start, end);
   igc_assert (global_igc->park_count > 0);
   eassert (base_to_client (hot_start) == charset_table);
   eassert (((struct igc_header *)cold_start)->obj_type
@@ -4671,14 +3778,16 @@ igc_on_pdump_loaded (void *dump_base, void *hot_start, 
void *hot_end,
   eassert (((struct igc_header *)heap_end)->obj_type == IGC_OBJ_DUMPED_BYTES);
 
   size_t discardable_size = (uint8_t *)cold_start - (uint8_t *)hot_end;
-  size_t dump_size = (uint8_t *)cold_end - (uint8_t *)dump_base;
   // size_t cold_size = (uint8_t *)cold_end - (uint8_t *)cold_start;
   size_t dump_header_size = (uint8_t *)hot_start - (uint8_t *)dump_base;
   size_t relocs_size = (uint8_t *)cold_end - (uint8_t *)heap_end;
   struct igc_header *h = client_to_base (dump_base);
   igc_assert (h->obj_type == IGC_OBJ_INVALID);
   igc_assert (obj_size (h) == sizeof *h + dump_size);
+#ifdef IGC_DEBUG
+  size_t dump_size = (uint8_t *)cold_end - (uint8_t *)dump_base;
   igc_assert (discardable_size > 2 * sizeof *h);
+#endif
   /* Ignore dump_header */
   set_header (h, IGC_OBJ_PAD, sizeof *h + dump_header_size, 0);
   /* Ignore discardable section */
@@ -4725,70 +3834,6 @@ igc_alloc_dump (size_t nbytes)
   return base_to_client (block);
 }
 
-struct gap_it
-{
-  void *last_end;
-  struct pdumper_object_it it;
-};
-
-static void *
-gap_it_next (void **gap_end, struct gap_it *it)
-{
-  if (!it->last_end)
-    {
-      it->last_end = (void *)dump_public.start;
-      return gap_it_next (gap_end, it);
-    }
-  else
-    {
-      for (;;)
-       {
-         struct igc_header *h = pdumper_next_object (&it->it);
-         if (!h)
-           {
-             if (it->last_end == (void *)dump_public.end)
-               return NULL;
-             else
-               {
-                 void *gap_start = it->last_end;
-                 it->last_end = *gap_end = (void *)dump_public.end;
-                 return gap_start;
-               }
-           }
-         void *end = dflt_skip (h);
-         if (it->last_end == h)
-           {
-             it->last_end = end;
-             continue;
-           }
-         void *gap_start = it->last_end;
-         *gap_end = h;
-         it->last_end = end;
-         return gap_start;
-       }
-    }
-}
-
-#if 0
-void
-print_gaps (size_t start, size_t len)
-{
-  struct gap_it it = { 0 };
-  for (size_t i = start; i < start + len; i++)
-    {
-      void *gap_end;
-      void *gap_start = gap_it_next (&gap_end, &it);
-      if (!gap_start)
-       return;
-      size_t offset = (size_t)gap_start - dump_public.start;
-      size_t len = (size_t)gap_end - (size_t)gap_start;
-      fprintf (stderr, "%p: %p %p %zu\n", (void *)offset, gap_start, gap_end,
-              len);
-    }
-}
-#endif
-
-
 /***********************************************************************
                                  Init
  ***********************************************************************/



reply via email to

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