From: Daniel Colascione <dancol@dancol.org>
To: rms@gnu.org
Cc: emacs-devel@gnu.org
Subject: GC bug investigation
Date: Sat, 22 Mar 2014 18:58:17 -0700 [thread overview]
Message-ID: <532E3FB9.6040501@dancol.org> (raw)
In-Reply-To: <E1WRVnE-0008BB-De@fencepost.gnu.org>
[-- Attachment #1: Type: text/plain, Size: 2748 bytes --]
On 03/22/2014 04:57 PM, Richard Stallman wrote:
> [[[ To any NSA and FBI agents reading my email: please consider ]]]
> [[[ whether defending the US Constitution against all enemies, ]]]
> [[[ foreign or domestic, requires you to follow Snowden's example. ]]]
>
> Richard, it would be very helpful if you could provide either a recipe
> for reproducing your crash
>
> I agree, it would be very helpful if I could. But I can't.
>
> or an actual crash dump (not your
> paraphrasing of the stack trace).
>
> If someone tells me a GDB command to make one, maybe I can do so.
As Eli mentioned, you can use the "gcore" gdb command.
> hesitate to show it to anyone. And I don't think it would be useful.
I understand; I'd also be hesitant to share a dump. But being able to
instruct you to examine the dump in various ways would be very useful,
especially if we add debug instrumentation.
> I don't think any more information can be extracted at the time
> it crashes.
Details of the objects on the path might be useful. In prior messages
about this bug, you focus on stack slots. I don't think that's useful,
as a conservative GC ought to operate properly using arbitrary inputs as
temporary roots. I want to know exactly where we crash and in what
manner, as I explained on another thread.
For clarity: you mention "[the crash was in] mark_object called from
mark_vectorlike called from mark_object called from mark_object (marking
that symbol)." I interpret this text as meaning "some instruction in
mark_object faulted", with the top of the execution stack looking like this:
mark_object(A)
mark_vectorlike(B)
mark_object(B)
mark_object(clear-transient-map)
B here is clear-transient-map's function cell, right? You're saying you
saw that it's a pseudovector that safe_debug_print reports as
INVALID_LISP_OBJECT, probably because live_vector_p returns 0. That
we're reaching B at all indicates that it shouldn't be dead.
clear-transient-map isn't dead either, although double-checking would be
nice. That's why the symbol_free_list->function = Vdead code did nothing.
B must have been made dead *before* being assigned to
clear-transient-map's function cell. Looking at the bytecode in
set-transient-map, though, I don't see how that's possible.
Can you try running with -DGC_CHECK_MARKED_OBJECTS=1 in your CFLAGS?
I don't think that writing code that aborts or breaks when a particular
vector is freed will be very helpful; we'll hit that code in normal
operation too. Instead, it'll probably be more useful to print a
backtrace (using emacs_backtrace) each time we see that vectorlike
freed, then look at the last backtrace before the GC crash.
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 901 bytes --]
next prev parent reply other threads:[~2014-03-23 1:58 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-03-22 1:47 Changes that should go into version 24.4 Richard Stallman
2014-03-22 1:57 ` Daniel Colascione
2014-03-22 8:44 ` Eli Zaretskii
2014-03-22 8:50 ` Daniel Colascione
2014-03-22 9:24 ` Eli Zaretskii
2014-03-22 9:08 ` Eli Zaretskii
2014-03-22 9:15 ` Daniel Colascione
2014-03-22 23:57 ` Richard Stallman
2014-03-23 1:58 ` Daniel Colascione [this message]
2014-03-23 2:13 ` GC bug investigation Daniel Colascione
2014-03-23 14:56 ` Richard Stallman
2014-03-23 14:57 ` Richard Stallman
2014-03-23 15:15 ` David Kastrup
2014-03-24 15:01 ` Richard Stallman
2014-03-23 15:22 ` Daniel Colascione
2014-03-23 16:14 ` Andreas Schwab
2014-03-24 15:01 ` Richard Stallman
2014-03-23 16:20 ` Eli Zaretskii
2014-03-23 3:57 ` Changes that should go into version 24.4 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=532E3FB9.6040501@dancol.org \
--to=dancol@dancol.org \
--cc=emacs-devel@gnu.org \
--cc=rms@gnu.org \
/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).