From: Philipp Stephani <p.stephani2@gmail.com>
To: Eli Zaretskii <eliz@gnu.org>
Cc: "Basil L. Contovounesios" <contovob@tcd.ie>,
34655@debbugs.gnu.org, Stefan Monnier <monnier@iro.umontreal.ca>
Subject: bug#34655: 26.1.92; Segfault in module with --module-assertions
Date: Thu, 21 Mar 2019 21:01:43 +0100 [thread overview]
Message-ID: <CAArVCkQ_x+QNrObdmv5uwd+W6605qzAGz=80tVjm+=ADOuiPAw@mail.gmail.com> (raw)
In-Reply-To: <83lg18t3ar.fsf@gnu.org>
Am Do., 21. März 2019 um 20:50 Uhr schrieb Eli Zaretskii <eliz@gnu.org>:
>
> > From: Philipp Stephani <p.stephani2@gmail.com>
> > Date: Thu, 21 Mar 2019 20:37:24 +0100
> > Cc: Stefan Monnier <monnier@iro.umontreal.ca>, "Basil L. Contovounesios" <contovob@tcd.ie>, 34655@debbugs.gnu.org
> >
> > Let's go back to the known good state first, and then discuss how to
> > go from there.
>
> I don't see why that is better than discuss first and then go to where
> we decide to go. It's not like Emacs 27 will be released any time
> soon, so there's no rush.
For one, it becomes harder and harder to revert commits the older they
get. Also such discussions tend to turn into endless debates about the
"perfect" solution until one side gives up, without improving
anything. I strongly prefer fixing actual bugs that affect users in
practice and then discussing (or not discussing) the gold-plating
steps later.
>
> > We can't get stack marking to work, even theoretically.
> >
> > A module is free to do
> >
> > emacs_value x = ...;
> > uintptr_t y = ((uintrptr_t) x) ^ 0x123456u;
> > (garbage-collect)
> > emacs_value z = (emacs_value) (y ^ 0x123456u);
> > ... use z ...
> >
> > During the garbage collection, x isn't on the stack anywhere
>
> Why do you think x isn't on the stack in this case?
Because the compiler reused the stack slot for something else?
Because the module is written in a language that doesn't use the stack
in a way that the garbage collector expects? There's no reason to
assume modules have any form of C-compatible stack layout.
>
> Moreover, emacs_value is actually a pointer to a Lisp object, so this
> object is also somewhere on the stack, right?
>
> > emacs_value x = ...;
> > emacs_value *y = malloc (sizeof emacs_value);
> > *y = x;
> > ... stop using x...
> > (garbage-collect)
> > ...use *y ...
> >
> > Again, during garbage collection x is no longer on the stack.
>
> Why do you think it isn't on the stack?
Same as above.
>
> > We can only use stack scanning in Emacs because we control the Emacs
> > source code
>
> Actually, we do nothing special about stack-based values in our
> sources, except avoiding undefined behavior.
(Stack scanning is undefined behavior, but that's not the point.)
We do something very specific with the stack: we make sure that
Lisp_Objects are never manipulated in a way similar to the above, and
we use the C language.
>
> > > OK, but I think Stefan's opinion is not less important.
> >
> > I value his opinion, but again: let's make the thing work first, and
> > then discuss options.
>
> Fixing one bug doesn't necessarily mean things now "work"; there's
> always one more bug.
That might be theoretically true, but shouldn't impact decisions until
that bug is actually found. All regression tests still pass after
reverting the commit.
next prev parent reply other threads:[~2019-03-21 20:01 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-02-25 21:00 bug#34655: 26.1.92; Segfault in module with --module-assertions Basil L. Contovounesios
2019-02-26 2:59 ` Richard Stallman
2019-02-26 11:16 ` Basil L. Contovounesios
2019-02-26 15:27 ` Eli Zaretskii
2019-02-26 18:42 ` Basil L. Contovounesios
2019-02-27 4:10 ` Richard Stallman
2019-02-26 15:45 ` Eli Zaretskii
2019-03-17 16:38 ` Basil L. Contovounesios
2019-03-17 17:08 ` Eli Zaretskii
2019-03-17 23:52 ` Basil L. Contovounesios
2019-03-18 16:21 ` Eli Zaretskii
2019-03-18 16:58 ` Basil L. Contovounesios
2019-03-18 17:53 ` Eli Zaretskii
2019-03-21 16:11 ` Philipp Stephani
2019-03-21 17:00 ` Eli Zaretskii
2019-03-21 18:28 ` Philipp Stephani
2019-03-21 19:23 ` Philipp Stephani
2019-03-21 19:34 ` Eli Zaretskii
2019-03-21 21:29 ` Basil L. Contovounesios
2019-03-22 7:11 ` Eli Zaretskii
2019-03-21 19:27 ` Eli Zaretskii
2019-03-21 19:37 ` Philipp Stephani
2019-03-21 19:50 ` Eli Zaretskii
2019-03-21 20:01 ` Philipp Stephani [this message]
2019-03-21 20:14 ` Eli Zaretskii
2019-03-21 20:26 ` Philipp Stephani
2019-03-21 20:44 ` Eli Zaretskii
2019-03-21 20:48 ` Daniel Colascione
2019-03-22 8:17 ` Eli Zaretskii
2019-03-21 21:31 ` Basil L. Contovounesios
2019-03-22 0:56 ` Stefan Monnier
2019-03-22 8:16 ` 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
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CAArVCkQ_x+QNrObdmv5uwd+W6605qzAGz=80tVjm+=ADOuiPAw@mail.gmail.com' \
--to=p.stephani2@gmail.com \
--cc=34655@debbugs.gnu.org \
--cc=contovob@tcd.ie \
--cc=eliz@gnu.org \
--cc=monnier@iro.umontreal.ca \
/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 public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).