From: Eli Zaretskii <eliz@gnu.org>
To: "Gerd Möllmann" <gerd.moellmann@gmail.com>
Cc: eller.helmut@gmail.com, emacs-devel@gnu.org
Subject: Re: MPS GC and its implications
Date: Wed, 01 May 2024 19:48:31 +0300 [thread overview]
Message-ID: <86ikzxo4v4.fsf@gnu.org> (raw)
In-Reply-To: <m2frv1zg18.fsf@pro2.fritz.box> (message from Gerd Möllmann on Wed, 01 May 2024 17:51:47 +0200)
> From: Gerd Möllmann <gerd.moellmann@gmail.com>
> Cc: eller.helmut@gmail.com, emacs-devel@gnu.org
> Date: Wed, 01 May 2024 17:51:47 +0200
>
> > First, I don't understand why the above mechanism doesn't work. What
> > exactly are the conditions which ensure that "ambig scanning of
> > registers and the C stack" will work?
>
> The condition is: Some automatic C variable in the stack frames makes it
> so that either the stack itself or a register contains the reference, in
> this case a pointer to the string data (maybe interior pointer).
>
> That's not the case, or not guaranteed, for example, if we store the
> string pointer in some global variable, in our case in a struct member
> of a static array of structs.
How do you see that it's a static array of structs?
The way a coding_system is usually set when starting an
encoding/decoding operation is like this:
Lisp_Object
code_convert_string (Lisp_Object string, Lisp_Object coding_system,
Lisp_Object dst_object, bool encodep, bool nocopy,
bool norecord)
{
struct coding_system coding;
[...]
setup_coding_system (coding_system, &coding);
[...]
if (encodep)
encode_coding_object (&coding, string, 0, 0, chars, bytes, dst_object);
else
decode_coding_object (&coding, string, 0, 0, chars, bytes, dst_object);
So the pointer to a 'struct coding_system' that is thereafter passed
from encode_coding_object/decode_coding_object downwards (and
eventually ends up in coding_set_source etc.), starts as a stack-based
automatic variable at the top-level caller. Isn't that what we need
for MPS to DTRT with any pointers to Lisp objects in 'struct
coding_system'?
> > Anyway: 'struct coding_system' is passed as argument to the functions
> > involved in the en/decoding, and so is on the stack or in a register.
>
> If it's passed by value, we are fine. If its passed as a pointer we're
> not because the char * in question is not an the stack.
See above: it _is_ on the stack, right?
> If it passed by value but was originally copied from a static
> counterpart, we are probably not good, because that would copy the char
> * from something we haven't traced.
I thought we agreed that all the global variables with Lisp objects
need to be staticpro'd, didn't we? If we do that, we are covered for
anything that comes from there, no?
> > Similarly for buffer text: the buffer object is a member of 'struct
> > coding_system', which is on the stack, and the 'char *' points to the
> > text of that buffer.
>
> Same as above for strings: if we're passing the struct around by value
> etc.
Is MPS tracing buffer text? I'm looking at fix_buffer, and I don't
see where we do something with the own_text->beg there. Is that
because the text is allocated not by MPS, and therefore isn't moved by
GC?
> > What if I do something like this:
> >
> > static struct window *my_special_window = NULL;
> > void foo (Lisp_Object window)
> > {
> > my_special_window = XWINDOW (window);
> > ...
> > }
> > void bar (void)
> > {
> > if (my_special_window != NULL)
> > /* do something with my_special_window */
> > }
> >
> > IOW, is storing a pointer like above in a temporary global variable
> > safe?
>
> You need to staticpro.
>
> It's basically like with the old GC. Nothing makes sure that the window
> has survived when bar is called, withput staticpro. The difference to
> the MPS GC is that my_special_window might have survived in the old GC
> because something else keeps it alive and that is all we need (fond
> memories of GCPRO, booooh ;-)).
The old GC didn't move objects. So the window could have been deleted
meanwhile, but its 'struct window' couldn't have moved to a different
address in memory.
> >> I think the only thing you missed is why the automatic ambig scanning of
> >> registers and control stack is not sufficient in Helmut's case (the
> >> struct containing the char * etc.).
> >
> > Why is it not safe? I still don't think I understand that.
>
> It is the missing reference from the stack. DOes the above help somewhat?
Depends on how you answer my questions and observations above.
next prev parent reply other threads:[~2024-05-01 16:48 UTC|newest]
Thread overview: 234+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-27 20:20 MPS: face-cache Gerd Möllmann
2024-04-28 5:06 ` Gerd Möllmann
2024-04-28 5:58 ` Gerd Möllmann
2024-04-28 6:09 ` Eli Zaretskii
2024-04-28 6:28 ` Gerd Möllmann
2024-04-28 6:45 ` Eli Zaretskii
2024-04-28 6:50 ` Gerd Möllmann
2024-04-28 7:37 ` Eli Zaretskii
2024-04-28 7:41 ` Gerd Möllmann
2024-04-28 6:50 ` Helmut Eller
2024-04-28 6:53 ` Gerd Möllmann
2024-04-28 6:58 ` Helmut Eller
2024-04-28 6:59 ` Gerd Möllmann
2024-04-28 7:10 ` Gerd Möllmann
2024-04-28 7:22 ` Gerd Möllmann
2024-04-28 7:29 ` Eli Zaretskii
2024-04-28 7:38 ` Gerd Möllmann
2024-04-28 7:56 ` Eli Zaretskii
2024-04-28 8:05 ` Gerd Möllmann
2024-04-28 8:13 ` Eli Zaretskii
2024-04-28 8:18 ` Gerd Möllmann
2024-04-28 8:23 ` Po Lu
2024-04-28 8:45 ` Eli Zaretskii
2024-04-28 8:22 ` Po Lu
2024-04-28 8:29 ` Gerd Möllmann
2024-04-28 8:35 ` Gerd Möllmann
2024-04-28 8:41 ` Po Lu
2024-04-28 8:43 ` Gerd Möllmann
2024-04-28 8:55 ` Gerd Möllmann
2024-04-28 7:55 ` Gerd Möllmann
2024-04-28 7:58 ` Eli Zaretskii
2024-04-28 8:04 ` Helmut Eller
2024-04-28 8:08 ` Gerd Möllmann
2024-04-28 8:52 ` Helmut Eller
2024-04-28 8:59 ` Gerd Möllmann
2024-04-28 9:04 ` Helmut Eller
2024-04-28 9:14 ` Gerd Möllmann
2024-04-28 9:26 ` Helmut Eller
2024-04-28 9:34 ` Gerd Möllmann
2024-04-28 9:40 ` Helmut Eller
2024-04-28 10:11 ` Gerd Möllmann
2024-04-28 10:17 ` Eli Zaretskii
2024-04-28 10:20 ` Gerd Möllmann
2024-04-28 10:43 ` Eli Zaretskii
2024-04-28 12:23 ` Gerd Möllmann
2024-04-28 12:26 ` Gerd Möllmann
2024-04-28 12:59 ` Helmut Eller
2024-04-28 13:55 ` Eli Zaretskii
2024-04-28 14:06 ` Gerd Möllmann
2024-04-28 14:30 ` Gerd Möllmann
2024-04-29 7:15 ` Helmut Eller
2024-04-29 7:52 ` Gerd Möllmann
2024-04-29 8:03 ` Helmut Eller
2024-04-29 8:21 ` Gerd Möllmann
2024-04-29 8:37 ` Eli Zaretskii
2024-04-29 8:41 ` Gerd Möllmann
2024-04-29 8:54 ` Helmut Eller
2024-04-29 11:05 ` Eli Zaretskii
2024-04-29 11:18 ` Gerd Möllmann
2024-04-29 11:41 ` Eli Zaretskii
2024-04-29 13:07 ` Helmut Eller
2024-04-29 13:22 ` Eli Zaretskii
2024-04-29 13:38 ` Helmut Eller
2024-04-29 13:57 ` Eli Zaretskii
2024-04-29 15:19 ` Helmut Eller
2024-04-29 15:32 ` Eli Zaretskii
2024-04-29 15:37 ` Eli Zaretskii
2024-04-29 8:39 ` Eli Zaretskii
2024-04-29 8:42 ` Gerd Möllmann
2024-04-29 13:13 ` Po Lu
2024-04-29 18:47 ` Gerd Möllmann
2024-04-29 19:15 ` Helmut Eller
2024-04-29 19:36 ` Gerd Möllmann
2024-04-30 5:52 ` Helmut Eller
2024-04-30 6:04 ` Gerd Möllmann
2024-04-30 6:36 ` MPS: staticpro everything Helmut Eller
2024-04-30 6:54 ` Gerd Möllmann
2024-04-30 18:57 ` Helmut Eller
2024-04-30 19:10 ` Gerd Möllmann
2024-04-30 19:22 ` Eli Zaretskii
2024-05-01 6:47 ` Gerd Möllmann
2024-05-01 7:33 ` Helmut Eller
2024-05-01 7:46 ` Gerd Möllmann
2024-05-01 12:15 ` Eli Zaretskii
2024-05-01 6:53 ` Helmut Eller
2024-05-01 13:06 ` Eli Zaretskii
2024-05-01 13:48 ` Gerd Möllmann
2024-05-01 14:02 ` Eli Zaretskii
2024-05-01 14:08 ` Helmut Eller
2024-05-01 14:20 ` Gerd Möllmann
2024-05-01 15:02 ` Eli Zaretskii
2024-05-01 16:06 ` Helmut Eller
2024-05-02 8:01 ` Eli Zaretskii
2024-05-02 9:04 ` Gerd Möllmann
2024-05-02 11:09 ` Eli Zaretskii
2024-05-02 12:01 ` Gerd Möllmann
2024-05-02 12:10 ` Eli Zaretskii
2024-05-02 12:30 ` Gerd Möllmann
2024-05-02 13:25 ` Po Lu
2024-05-02 14:01 ` Gerd Möllmann
2024-05-02 15:02 ` Eli Zaretskii
2024-05-02 15:37 ` Gerd Möllmann
2024-05-02 16:09 ` Eli Zaretskii
2024-05-02 19:08 ` Gerd Möllmann
2024-05-03 7:03 ` Eli Zaretskii
2024-05-03 7:30 ` Gerd Möllmann
2024-05-03 11:18 ` Helmut Eller
2024-05-03 11:29 ` Eli Zaretskii
2024-05-03 11:49 ` Gerd Möllmann
2024-05-03 12:01 ` Eli Zaretskii
2024-05-03 12:21 ` Gerd Möllmann
2024-05-03 13:39 ` Eli Zaretskii
2024-05-03 11:47 ` Gerd Möllmann
2024-05-02 15:12 ` Eli Zaretskii
2024-05-02 15:55 ` Gerd Möllmann
2024-05-02 16:45 ` Eli Zaretskii
2024-05-02 19:10 ` Gerd Möllmann
2024-05-02 15:09 ` Helmut Eller
2024-05-02 15:46 ` Gerd Möllmann
2024-05-02 16:03 ` Helmut Eller
2024-05-02 16:48 ` Eli Zaretskii
2024-05-02 18:30 ` Gerd Möllmann
2024-05-02 18:46 ` Eli Zaretskii
2024-05-02 19:01 ` Eli Zaretskii
2024-05-02 19:19 ` Gerd Möllmann
2024-05-02 19:51 ` Gerd Möllmann
2024-05-03 5:27 ` Eli Zaretskii
2024-05-03 5:44 ` Gerd Möllmann
2024-05-02 19:18 ` Gerd Möllmann
2024-05-02 18:49 ` Eli Zaretskii
2024-05-03 5:32 ` Gerd Möllmann
2024-05-03 6:26 ` MPS: GUI test automation (was: MPS: staticpro everything) Helmut Eller
2024-05-03 7:17 ` Eli Zaretskii
2024-05-03 7:18 ` MPS: GUI test automation Gerd Möllmann
2024-05-02 16:24 ` MPS: staticpro everything Eli Zaretskii
2024-05-01 6:05 ` Gerd Möllmann
2024-05-01 7:32 ` Helmut Eller
2024-05-01 7:46 ` Gerd Möllmann
2024-05-01 8:03 ` Gerd Möllmann
2024-05-01 8:25 ` Helmut Eller
2024-05-01 8:48 ` Gerd Möllmann
2024-05-01 9:42 ` Helmut Eller
2024-05-01 12:24 ` Eli Zaretskii
2024-05-01 16:45 ` Helmut Eller
2024-05-01 17:02 ` Gerd Möllmann
2024-05-01 13:12 ` Eli Zaretskii
2024-05-01 13:54 ` Gerd Möllmann
2024-05-01 12:50 ` MPS GC and its implications (was: staticpro everything) Eli Zaretskii
2024-05-01 13:39 ` MPS GC and its implications Gerd Möllmann
2024-05-01 14:52 ` Eli Zaretskii
2024-05-01 15:51 ` Gerd Möllmann
2024-05-01 16:48 ` Eli Zaretskii [this message]
2024-05-01 17:17 ` Gerd Möllmann
2024-05-01 17:52 ` Eli Zaretskii
2024-05-01 13:43 ` Helmut Eller
2024-05-01 14:05 ` Gerd Möllmann
2024-05-01 14:58 ` Eli Zaretskii
2024-05-01 15:54 ` Gerd Möllmann
2024-05-01 16:49 ` Eli Zaretskii
2024-05-01 17:19 ` Gerd Möllmann
2024-05-01 17:38 ` Helmut Eller
2024-05-01 17:56 ` Eli Zaretskii
2024-05-01 18:01 ` Helmut Eller
2024-05-01 18:07 ` Gerd Möllmann
2024-05-01 18:24 ` Eli Zaretskii
2024-05-01 18:41 ` Helmut Eller
2024-05-01 19:12 ` Gerd Möllmann
2024-05-02 6:03 ` Eli Zaretskii
2024-05-01 18:23 ` Eli Zaretskii
2024-05-01 17:53 ` Eli Zaretskii
2024-05-01 17:59 ` Gerd Möllmann
2024-05-01 18:20 ` Eli Zaretskii
2024-05-01 19:06 ` Gerd Möllmann
2024-05-02 8:30 ` Eli Zaretskii
2024-05-02 9:05 ` Gerd Möllmann
2024-05-02 21:25 ` Andrea Corallo
2024-05-03 5:42 ` Gerd Möllmann
2024-05-03 11:18 ` Eli Zaretskii
2024-05-03 11:32 ` Helmut Eller
2024-05-03 11:54 ` Eli Zaretskii
2024-05-03 11:59 ` Gerd Möllmann
2024-05-03 12:05 ` Eli Zaretskii
2024-05-03 12:27 ` Gerd Möllmann
2024-05-03 13:44 ` Andrea Corallo
2024-05-03 14:22 ` Gerd Möllmann
2024-05-03 12:28 ` Helmut Eller
2024-05-03 13:33 ` Eli Zaretskii
2024-05-03 13:57 ` Helmut Eller
2024-05-03 15:56 ` Eli Zaretskii
2024-05-03 19:18 ` Eli Zaretskii
2024-05-04 4:22 ` Helmut Eller
2024-05-04 7:43 ` Eli Zaretskii
2024-05-04 7:57 ` Gerd Möllmann
2024-05-04 9:01 ` Eli Zaretskii
2024-05-04 9:39 ` Helmut Eller
2024-05-04 9:56 ` Mattias Engdegård
2024-05-04 10:07 ` Helmut Eller
2024-05-04 10:29 ` Mattias Engdegård
2024-05-04 12:34 ` Eli Zaretskii
2024-05-04 16:08 ` Helmut Eller
2024-05-04 18:02 ` Gerd Möllmann
2024-05-03 11:54 ` Gerd Möllmann
2024-05-03 13:40 ` Andrea Corallo
2024-05-03 13:48 ` Gerd Möllmann
2024-05-04 6:25 ` Andrea Corallo
2024-05-04 8:00 ` Eli Zaretskii
2024-04-30 11:35 ` MPS: face-cache Eli Zaretskii
2024-04-30 12:57 ` Gerd Möllmann
2024-04-30 13:17 ` Eli Zaretskii
2024-04-30 13:43 ` Gerd Möllmann
2024-04-30 11:09 ` Eli Zaretskii
2024-04-30 12:41 ` Gerd Möllmann
2024-05-02 9:49 ` Eli Zaretskii
2024-05-02 10:39 ` Gerd Möllmann
2024-05-02 15:10 ` Helmut Eller
2024-05-02 18:28 ` MPS: pdump Gerd Möllmann
2024-05-02 19:13 ` Eli Zaretskii
2024-05-02 19:45 ` Gerd Möllmann
2024-05-03 6:29 ` Eli Zaretskii
2024-05-03 7:15 ` Gerd Möllmann
2024-05-03 11:24 ` Eli Zaretskii
2024-05-03 11:55 ` Gerd Möllmann
2024-05-03 12:03 ` Eli Zaretskii
2024-05-03 12:23 ` Gerd Möllmann
2024-05-03 5:54 ` Helmut Eller
2024-05-03 6:18 ` Gerd Möllmann
2024-05-03 7:28 ` Eli Zaretskii
2024-04-29 19:37 ` MPS: face-cache Helmut Eller
2024-04-29 19:39 ` Gerd Möllmann
2024-04-30 11:11 ` Eli Zaretskii
2024-04-30 12:42 ` Gerd Möllmann
2024-04-28 14:07 ` Eli Zaretskii
2024-04-28 14:31 ` Gerd Möllmann
2024-04-28 7:36 ` Eli Zaretskii
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=86ikzxo4v4.fsf@gnu.org \
--to=eliz@gnu.org \
--cc=eller.helmut@gmail.com \
--cc=emacs-devel@gnu.org \
--cc=gerd.moellmann@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.