GNU bug report logs - #76091
31.0.50; festure/igc: buffer.h:829: Emacs fatal error: assertion failed: BUFFERP (a)

Previous Next

Package: emacs;

Reported by: Gregor Zattler <telegraph <at> gmx.net>

Date: Thu, 6 Feb 2025 12:51:01 UTC

Severity: normal

Found in version 31.0.50

Done: Pip Cet <pipcet <at> protonmail.com>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 76091 in the body.
You can then email your comments to 76091 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-gnu-emacs <at> gnu.org:
bug#76091; Package emacs. (Thu, 06 Feb 2025 12:51:01 GMT) Full text and rfc822 format available.

Acknowledgement sent to Gregor Zattler <telegraph <at> gmx.net>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Thu, 06 Feb 2025 12:51:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Gregor Zattler <telegraph <at> gmx.net>
To: bug-gnu-emacs <at> gnu.org
Subject: 31.0.50; festure/igc: buffer.h:829: Emacs fatal error: assertion
 failed: BUFFERP (a)
Date: Thu, 06 Feb 2025 13:49:30 +0100
Dear Emacs developers, I don't know if
this failed assertion is due to using
MPS as GC.

I played along with pdf-tools and
org-noter when it happened.

This time I built with a current
checkout of feature/igc.

GDB output even further below.

The crashed session is still in GDB.

HTH, Gregor

In GNU Emacs 31.0.50 (build 3,
 x86_64-pc-linux-gnu, cairo version
 1.16.0) of 2025-02-06 built on no
Repository revision: aa915b0c87e42444ee5426744df18c3b15ac0cf5
Repository branch: feature/igc
Windowing system distributor 'The X.Org Foundation', version 11.0.12101007
System Description: Debian GNU/Linux 12 (bookworm)

Configured using:
 'configure
 --infodir=/usr/share/info/emacs
 --with-json
 --with-file-notification=yes
 --with-libsystemd --with-cairo
 --with-x=yes --with-x-toolkit=no
 --without-toolkit-scroll-bars
 --without-gsettings
 --enable-check-lisp-object-type
 --enable-checking=yes,glyphs
 --with-native-compilation=yes
 --with-mps=yes 'CFLAGS=-ggdb3 -O3
 -ffile-prefix-map=/home/grfz/src/emacs-igc=. -fstack-protector-strong
 -Wformat -Werror=format-security
 -fno-omit-frame-pointer'
 'CPPFLAGS=-I/home/grfz/mps-artifacts
 -Wdate-time -D_FORTIFY_SOURCE=2'
 'LDFLAGS=-L/home/grfz/mps-artifacts
 -Wl,-z,relro''

Configured features:
ACL CAIRO DBUS FREETYPE GIF GLIB GMP
GNUTLS GPM HARFBUZZ JPEG LCMS2 LIBOTF
LIBSELINUX LIBSYSTEMD LIBXML2 M17N_FLT
MODULES MPS NATIVE_COMP NOTIFY INOTIFY
OLDXMENU PDUMPER PNG RSVG SECCOMP SOUND
SQLITE3 THREADS TIFF WEBP X11 XDBE XIM
XINPUT2 XPM ZLIB

Important settings:
  value of $LC_ALL:
  value of $LC_COLLATE: de_DE.utf8
  value of $LC_CTYPE: de_DE.utf8
  value of $LC_MESSAGES: POSIX
  value of $LC_MONETARY: de_DE.utf8
  value of $LC_NUMERIC: de_DE.utf8
  value of $LC_TIME: de_DE.utf8
  value of $LANG: de_DE.utf8
  locale-coding-system: utf-8-unix

Major mode: Lisp Interaction

Minor modes in effect:
  rainbow-delimiters-mode: t
  winner-mode: t
  which-key-mode: t
  savehist-mode: t
  ws-butler-global-mode: t
  ws-butler-mode: t
  delete-selection-mode: t
  minibuffer-depth-indicate-mode: t
  which-function-mode: t
  windmove-mode: t
  xterm-mouse-mode: t
  key-chord-mode: t
  mail-abbrevs-mode: t
  find-function-mode: t
  override-global-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  minibuffer-regexp-mode: t
  size-indication-mode: t
  column-number-mode: t
  line-number-mode: t
  transient-mark-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t

Load-path shadows:
~/src/notmuch/emacs/notmuch-address hides /home/grfz/.config/emacs/elisp/notmuch-address
/home/grfz/src/ol-notmuch/ol-notmuch hides /home/grfz/.config/emacs/elisp/ol-notmuch
/home/grfz/.config/emacs/elpa-31.0/magit-4.2.0/magit-autorevert hides /home/grfz/.config/emacs/elpa-31.0/magit-section-4.2.0/magit-autorevert
~/src/notmuch/emacs/notmuch-lib hides /usr/local/share/emacs/site-lisp/notmuch-lib
~/src/notmuch/emacs/coolj hides /usr/local/share/emacs/site-lisp/coolj
~/src/notmuch/emacs/notmuch-address hides /usr/local/share/emacs/site-lisp/notmuch-address
~/src/notmuch/emacs/notmuch-hello hides /usr/local/share/emacs/site-lisp/notmuch-hello
~/src/notmuch/emacs/notmuch-parser hides /usr/local/share/emacs/site-lisp/notmuch-parser
~/src/notmuch/emacs/notmuch-show hides /usr/local/share/emacs/site-lisp/notmuch-show
~/src/notmuch/emacs/notmuch-wash hides /usr/local/share/emacs/site-lisp/notmuch-wash
~/src/notmuch/emacs/notmuch-draft hides /usr/local/share/emacs/site-lisp/notmuch-draft
~/src/notmuch/emacs/notmuch-tree hides /usr/local/share/emacs/site-lisp/notmuch-tree
~/src/notmuch/emacs/notmuch-version hides /usr/local/share/emacs/site-lisp/notmuch-version
~/src/notmuch/emacs/notmuch-jump hides /usr/local/share/emacs/site-lisp/notmuch-jump
~/src/notmuch/emacs/notmuch-company hides /usr/local/share/emacs/site-lisp/notmuch-company
~/src/notmuch/emacs/notmuch hides /usr/local/share/emacs/site-lisp/notmuch
~/src/notmuch/emacs/notmuch-crypto hides /usr/local/share/emacs/site-lisp/notmuch-crypto
~/src/notmuch/emacs/notmuch-compat hides /usr/local/share/emacs/site-lisp/notmuch-compat
~/src/notmuch/emacs/notmuch-maildir-fcc hides /usr/local/share/emacs/site-lisp/notmuch-maildir-fcc
~/src/notmuch/emacs/notmuch-tag hides /usr/local/share/emacs/site-lisp/notmuch-tag
~/src/notmuch/emacs/notmuch-message hides /usr/local/share/emacs/site-lisp/notmuch-message
~/src/notmuch/emacs/notmuch-print hides /usr/local/share/emacs/site-lisp/notmuch-print
~/src/notmuch/emacs/notmuch-mua hides /usr/local/share/emacs/site-lisp/notmuch-mua
~/src/notmuch/emacs/notmuch-query hides /usr/local/share/emacs/site-lisp/notmuch-query
/home/grfz/.config/emacs/elpa-31.0/transient-0.8.4/transient hides /home/grfz/src/emacs-igc/lisp/transient
/home/grfz/.config/emacs/elpa-31.0/idlwave-6.5.1/idlw-shell hides /home/grfz/src/emacs-igc/lisp/obsolete/idlw-shell
/home/grfz/.config/emacs/elpa-31.0/idlwave-6.5.1/idlwave hides /home/grfz/src/emacs-igc/lisp/obsolete/idlwave
/home/grfz/.config/emacs/elpa-31.0/idlwave-6.5.1/idlw-toolbar hides /home/grfz/src/emacs-igc/lisp/obsolete/idlw-toolbar
/home/grfz/.config/emacs/elpa-31.0/idlwave-6.5.1/idlw-help hides /home/grfz/src/emacs-igc/lisp/obsolete/idlw-help
/home/grfz/.config/emacs/elpa-31.0/idlwave-6.5.1/idlw-complete-structtag hides /home/grfz/src/emacs-igc/lisp/obsolete/idlw-complete-structtag

Features:
(shadow sort orgalist ecomplete
mail-extr tramp trampver
tramp-integration files-x tramp-message
tramp-compat shell tramp-loaddefs
emacsbug add-log rainbow-delimiters
winner which-key ol-notmuch notmuch
notmuch-tree notmuch-jump notmuch-hello
notmuch-show notmuch-print
notmuch-crypto notmuch-mua
notmuch-message notmuch-draft
notmuch-maildir-fcc notmuch-address
notmuch-company notmuch-parser
notmuch-wash diff-mode track-changes
coolj goto-addr icalendar diary-lib
diary-loaddefs notmuch-tag crm
notmuch-lib notmuch-version
notmuch-compat hl-line compat
org-contrib org-crypt org-protocol
org-clock ob-plantuml gnus-alias advice
savehist auth-source-pass holidays
holiday-loaddefs ws-butler delsel
modus-operandi-theme modus-themes
mb-depth which-func imenu windmove
xt-mouse edmacro kmacro key-chord comp
comp-cstr warnings comp-run comp-common
wcheck-mode oc-basic cl-extra help-mode
org-element org-persist org-id
org-refile org-element-ast inline
avl-tree generator ol-eww eww vtable
mule-util url-queue mm-url ol-rmail
ol-mhe ol-irc ol-info ol-gnus nnselect
gnus-art mm-uu mml2015 mm-view mml-smime
smime gnutls dig gnus-sum shr pixel-fill
kinsoku url-file svg dom gnus-group
gnus-undo gnus-start gnus-dbus dbus xml
gnus-cloud nnimap nnmail mail-source
utf7 nnoo parse-time gnus-spec gnus-int
gnus-range message sendmail yank-media
puny rfc822 mml mml-sec epa derived epg
rfc6068 epg-config mm-decode mm-bodies
mm-encode mail-parse rfc2231 rfc2047
rfc2045 ietf-drums mailabbrev gmm-utils
mailheader gnus-win gnus nnheader
gnus-util text-property-search
mail-utils range mm-util mail-prsvr
ol-docview doc-view filenotify jka-compr
image-mode exif dired dired-loaddefs
ol-bibtex bibtex iso8601 ol-bbdb ol-w3m
ol-doi org-link-doi org ob ob-ref ob-lob
ob-table ob-exp org-macro org-pcomplete
pcomplete org-list org-footnote
org-faces org-entities time-date
noutline outline ob-emacs-lisp org-table
org-loaddefs thingatpt find-func
cal-menu calendar cal-loaddefs ob-tangle
ol org-src sh-script rx smie treesit
executable org-keys oc ob-comint comint
ansi-osc ansi-color ring ob-core
org-cycle org-fold org-fold-core
org-compat ob-eval org-version org-macs
format-spec use-package
use-package-ensure use-package-delight
use-package-diminish
use-package-bind-key bind-key easy-mmode
use-package-core async-autoloads
csv-mode-autoloads debbugs-autoloads
dired-git-info-autoloads
git-timemachine-autoloads
hyperbole-autoloads kotl-autoloads hact
set hhist idlwave-autoloads
key-chord-autoloads magit-autoloads
pcase magit-section-autoloads
dash-autoloads minibuffer-line-autoloads
org-contrib-autoloads
org-noter-autoloads org-autoloads
orgalist-autoloads paredit-autoloads
pdf-tools-autoloads finder-inf
rainbow-delimiters-autoloads
tablist-autoloads transient-autoloads
wcheck-mode-autoloads info
with-editor-autoloads
ws-butler-autoloads package browse-url
xdg url url-proxy url-privacy url-expand
url-methods url-history url-cookie
generate-lisp-file url-domsuf url-util
mailcap url-handlers url-parse
auth-source cl-seq eieio eieio-core
cl-macs password-cache json subr-x map
byte-opt gv bytecomp byte-compile
url-vars cus-edit pp cus-load icons
wid-edit cl-loaddefs cl-lib rmc
iso-transl tooltip cconv eldoc paren
electric uniquify ediff-hook vc-hooks
lisp-float-type elisp-mode mwheel
term/x-win x-win term/common-win x-dnd
touch-screen tool-bar dnd fontset image
regexp-opt fringe tabulated-list replace
newcomment text-mode lisp-mode prog-mode
register page tab-bar menu-bar
rfn-eshadow isearch easymenu timer
select scroll-bar mouse jit-lock
font-lock syntax font-core
term/tty-colors frame minibuffer nadvice
seq simple cl-generic indonesian
philippine cham georgian utf-8-lang
misc-lang vietnamese tibetan thai
tai-viet lao korean japanese eucjp-ms
cp51932 hebrew greek romanian slovak
czech european ethiopic indian cyrillic
chinese composite emoji-zwj charscript
charprop case-table epa-hook
jka-cmpr-hook help abbrev obarray
oclosure cl-preloaded button loaddefs
theme-loaddefs faces cus-face macroexp
files window text-properties overlay
sha1 md5 base64 format env code-pages
mule custom widget keymap
hashtable-print-readable backquote
threads dbusbind inotify lcms2
dynamic-setting font-render-setting
cairo xinput2 x multi-tty move-toolbar
make-network-process tty-child-frames
native-compile mps emacs)

Memory information:
((conses 24 0 0) (symbols 56 0 0) (strings 40 0 0) (string-bytes 1 0)
 (vectors 24 0) (vector-slots 8 0 0) (floats 24 0 0) (intervals 64 0 0)
 (buffers 992 0))





+run --debug-init -xrm --init-directory="${USER_EMACS_DIRECTORY}" --fg-daemon="${EMACS_SERVER_NAME}"
Starting program: /home/grfz/src/emacs-igc/src/emacs --debug-init -xrm --init-directory="${USER_EMACS_DIRECTORY}" --fg-daemon="${EMACS_SERVER_NAME}"
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[Detaching after vfork from child process 1490619]
[Detaching after vfork from child process 1490620]
[Detaching after vfork from child process 1490621]
[Detaching after vfork from child process 1490622]
[Detaching after vfork from child process 1490625]
[Detaching after vfork from child process 1490626]
[Detaching after vfork from child process 1490692]
[Detaching after vfork from child process 1490694]
[Detaching after vfork from child process 1490695]

Program received signal SIGSEGV, Segmentation fault.
[... 155 such lines deleted ...]
Program received signal SIGSEGV, Segmentation fault.
[Detaching after vfork from child process 1490698]
[Detaching after vfork from child process 1491454]
[Detaching after vfork from child process 1491455]
[Detaching after vfork from child process 1491584]
[Detaching after vfork from child process 1491838]

Program received signal SIGSEGV, Segmentation fault.
[... plenty such deleted ...]
Program received signal SIGSEGV, Segmentation fault.
[Detaching after vfork from child process 1491900]
[Detaching after vfork from child process 1491901]
[Detaching after vfork from child process 1491903]
[Detaching after vfork from child process 1491904]
[Detaching after vfork from child process 1491915]
[Detaching after vfork from child process 1491916]
[Detaching after vfork from child process 1491917]

Program received signal SIGSEGV, Segmentation fault.
[... 40 such lines deleted ...]
Program received signal SIGSEGV, Segmentation fault.
[Detaching after vfork from child process 1491919]
[Detaching after vfork from child process 1492526]
[Detaching after vfork from child process 1492561]
[Detaching after vfork from child process 1492564]
[Detaching after vfork from child process 1492565]
[Detaching after vfork from child process 1492566]

Program received signal SIGSEGV, Segmentation fault.
[... 190 such lines deleted ...]
Program received signal SIGSEGV, Segmentation fault.
[Detaching after vfork from child process 1492570]
[Detaching after vfork from child process 1492572]
[Detaching after vfork from child process 1493673]

Program received signal SIGSEGV, Segmentation fault.

Program received signal SIGSEGV, Segmentation fault.

Program received signal SIGSEGV, Segmentation fault.

Program received signal SIGSEGV, Segmentation fault.

Program received signal SIGSEGV, Segmentation fault.

Program received signal SIGSEGV, Segmentation fault.

Program received signal SIGSEGV, Segmentation fault.

Program received signal SIGSEGV, Segmentation fault.

Program received signal SIGSEGV, Segmentation fault.

Program received signal SIGSEGV, Segmentation fault.

Program received signal SIGSEGV, Segmentation fault.

Program received signal SIGSEGV, Segmentation fault.

Program received signal SIGSEGV, Segmentation fault.

Program received signal SIGSEGV, Segmentation fault.

Program received signal SIGSEGV, Segmentation fault.

Program received signal SIGSEGV, Segmentation fault.

Program received signal SIGSEGV, Segmentation fault.

Program received signal SIGSEGV, Segmentation fault.

Program received signal SIGSEGV, Segmentation fault.

Program received signal SIGSEGV, Segmentation fault.

Program received signal SIGSEGV, Segmentation fault.
[Detaching after vfork from child process 1496065]
[Detaching after vfork from child process 1496066]
[Detaching after vfork from child process 1497149]

Program received signal SIGSEGV, Segmentation fault.
[... 158 such lines deleted ...]
Program received signal SIGSEGV, Segmentation fault.

Breakpoint 1, terminate_due_to_signal (sig=sig <at> entry=6, backtrace_limit=backtrace_limit <at> entry=2147483647) at ./src/emacs.c:425
425	{
+bt
#0  terminate_due_to_signal (sig=sig <at> entry=6, backtrace_limit=backtrace_limit <at> entry=2147483647) at ./src/emacs.c:425
#1  0x00005555555b8f5b in die (msg=msg <at> entry=0x5555559b40d0 "BUFFERP (a)", file=file <at> entry=0x5555559b40c7 "buffer.h", line=line <at> entry=829) at ./src/alloc.c:7683
#2  0x00005555555a0bda in XBUFFER (a=Python Exception <class 'gdb.error'>: value has been optimized out
) at ./src/buffer.h:829
#3  0x00005555555a4370 in XBUFFER (a=Python Exception <class 'gdb.error'>: value has been optimized out
) at ./src/xdisp.c:17024
#4  prepare_menu_bars () at ./src/xdisp.c:14041
#5  redisplay_internal () at ./src/xdisp.c:17103
#6  0x000055555564ec75 in redisplay () at ./src/xdisp.c:16675
#7  0x000055555577b9a5 in read_char (commandflag=1, map=Python Exception <class 'gdb.error'>: value has been optimized out
, map <at> entry=XIL(0x7fffc31bd02b), prev_event=Python Exception <class 'gdb.error'>: value has been optimized out
, used_mouse_menu=used_mouse_menu <at> entry=0x7fffffffc9bb, end_time=end_time <at> entry=0x0) at ./src/keyboard.c:2683
#8  0x000055555577e03b in read_key_sequence (keybuf=keybuf <at> entry=0x7fffffffcb20, prompt=Python Exception <class 'gdb.error'>: value has been optimized out
, prompt <at> entry=XIL(0), dont_downcase_last=dont_downcase_last <at> entry=false, can_return_switch_frame=can_return_switch_frame <at> entry=true, fix_current_buffer=fix_current_buffer <at> entry=true, prevent_redisplay=prevent_redisplay <at> entry=false, disable_text_conversion_p=<optimized out>) at ./src/keyboard.c:10790
#9  0x000055555577fd67 in command_loop_1 () at ./src/lisp.h:1184
#10 0x000055555581e7a6 in internal_condition_case (bfun=bfun <at> entry=0x55555577fb10 <command_loop_1>, handlers=handlers <at> entry=XIL(0xa8), hfun=hfun <at> entry=0x555555763cd0 <cmd_error>) at ./src/eval.c:1623
#11 0x000055555576290e in command_loop_2 (handlers=handlers <at> entry=XIL(0xa8)) at ./src/keyboard.c:1174
#12 0x000055555581e52f in internal_catch (tag=tag <at> entry=XIL(0x15498), func=func <at> entry=0x5555557628e0 <command_loop_2>, arg=Python Exception <class 'gdb.error'>: value has been optimized out
, arg <at> entry=XIL(0xa8)) at ./src/eval.c:1302
#13 0x00005555557628a9 in command_loop () at ./src/lisp.h:1184
#14 0x000055555576f3e5 in recursive_edit_1 () at ./src/keyboard.c:760
#15 0x000055555576f795 in Frecursive_edit () at ./src/keyboard.c:843
#16 0x00005555555d1f77 in main (argc=5, argv=<optimized out>) at ./src/emacs.c:2580
++set $bt = backtrace_top ()
++if backtrace_p ($bt)
+++echo \n

+++echo Lisp Backtrace:\n
Lisp Backtrace:
+++xbacktrace
++++set $bt = backtrace_top ()
++++while backtrace_p ($bt)
+++++set $fun = backtrace_function ($bt)
+++++xgettype $fun
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $fun.i
++++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++++if $type == Lisp_Symbol
++++++xprintsym $fun
+++++++xsymname $fun
++++++++xgetsym $fun
+++++++++xgetptr $fun
++++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++++set $bugfix = $fun.i
++++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++++set $symname = $ptr->u.s.name
+++++++xgetptr $symname
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $symname.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++if $ptr != 0
++++++++set $sym_name = (struct Lisp_String *) $ptr
++++++++xprintstr $sym_name
+++++++++if (! $arg0)
++++++++++set $data = (char *) $sym_name->u.s.data
++++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++++if $strsize == 0
+++++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"redisplay_internal (C function)"++++++printf " (0x%x)\n", backtrace_args ($bt)
 (0x0)
+++++set $bt = backtrace_next ($bt)
+xbacktrace
++set $bt = backtrace_top ()
++while backtrace_p ($bt)
+++set $fun = backtrace_function ($bt)
+++xgettype $fun
++++if (CHECK_LISP_OBJECT_TYPE)
+++++set $bugfix = $fun.i
++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++if $type == Lisp_Symbol
++++xprintsym $fun
+++++xsymname $fun
++++++xgetsym $fun
+++++++xgetptr $fun
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $fun.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++set $symname = $ptr->u.s.name
+++++xgetptr $symname
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $symname.i
++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++if $ptr != 0
++++++set $sym_name = (struct Lisp_String *) $ptr
++++++xprintstr $sym_name
+++++++if (! $arg0)
++++++++set $data = (char *) $sym_name->u.s.data
++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++if $strsize == 0
+++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"redisplay_internal (C function)"++++printf " (0x%x)\n", backtrace_args ($bt)
 (0x0)
+++set $bt = backtrace_next ($bt)
+bt full
#0  terminate_due_to_signal (sig=sig <at> entry=6, backtrace_limit=backtrace_limit <at> entry=2147483647) at ./src/emacs.c:425
#1  0x00005555555b8f5b in die (msg=msg <at> entry=0x5555559b40d0 "BUFFERP (a)", file=file <at> entry=0x5555559b40c7 "buffer.h", line=line <at> entry=829) at ./src/alloc.c:7683
#2  0x00005555555a0bda in XBUFFER (a=Python Exception <class 'gdb.error'>: value has been optimized out
) at ./src/buffer.h:829
#3  0x00005555555a4370 in XBUFFER (a=Python Exception <class 'gdb.error'>: value has been optimized out
) at ./src/xdisp.c:17024
        f = <optimized out>
        tail = Python Exception <class 'gdb.error'>: value has been optimized out

        frame = Python Exception <class 'gdb.error'>: value has been optimized out

        all_windows = <optimized out>
        some_windows = <optimized out>
        w = <optimized out>
        sw = <optimized out>
        must_finish = <optimized out>
        match_p = <optimized out>
        tlbufpos = {
          charpos = <optimized out>,
          bytepos = <optimized out>
        }
        tlendpos = {
          charpos = <optimized out>,
          bytepos = <optimized out>
        }
        number_of_visible_frames = <optimized out>
        sf = <optimized out>
        polling_stopped_here = <optimized out>
        tail = Python Exception <class 'gdb.error'>: value has been optimized out

        frame = Python Exception <class 'gdb.error'>: value has been optimized out

        hscroll_retries = <optimized out>
        garbaged_frame_retries = <optimized out>
        consider_all_windows_p = <optimized out>
        update_miniwindow_p = <optimized out>
        previous_frame = <optimized out>
        current_matrices_cleared = <optimized out>
        new_count = <optimized out>
#4  prepare_menu_bars () at ./src/xdisp.c:14041
        f = <optimized out>
        tail = Python Exception <class 'gdb.error'>: value has been optimized out

        frame = Python Exception <class 'gdb.error'>: value has been optimized out

        all_windows = <optimized out>
        some_windows = <optimized out>
        w = <optimized out>
        sw = <optimized out>
        must_finish = <optimized out>
        match_p = <optimized out>
        tlbufpos = {
          charpos = <optimized out>,
          bytepos = <optimized out>
        }
        tlendpos = {
          charpos = <optimized out>,
          bytepos = <optimized out>
        }
        number_of_visible_frames = <optimized out>
        sf = <optimized out>
        polling_stopped_here = <optimized out>
        tail = Python Exception <class 'gdb.error'>: value has been optimized out

        frame = Python Exception <class 'gdb.error'>: value has been optimized out

        hscroll_retries = <optimized out>
        garbaged_frame_retries = <optimized out>
        consider_all_windows_p = <optimized out>
        update_miniwindow_p = <optimized out>
        previous_frame = <optimized out>
        current_matrices_cleared = <optimized out>
        new_count = <optimized out>
#5  redisplay_internal () at ./src/xdisp.c:17103
        w = <optimized out>
        sw = <optimized out>
        must_finish = <optimized out>
        match_p = <optimized out>
        tlbufpos = {
          charpos = <optimized out>,
          bytepos = <optimized out>
        }
        tlendpos = {
          charpos = <optimized out>,
          bytepos = <optimized out>
        }
        number_of_visible_frames = <optimized out>
        sf = <optimized out>
        polling_stopped_here = <optimized out>
        tail = Python Exception <class 'gdb.error'>: value has been optimized out

        frame = Python Exception <class 'gdb.error'>: value has been optimized out

        hscroll_retries = <optimized out>
        garbaged_frame_retries = <optimized out>
        consider_all_windows_p = <optimized out>
        update_miniwindow_p = <optimized out>
        previous_frame = <optimized out>
        current_matrices_cleared = <optimized out>
        new_count = <optimized out>
#6  0x000055555564ec75 in redisplay () at ./src/xdisp.c:16675
#7  0x000055555577b9a5 in read_char (commandflag=1, map=Python Exception <class 'gdb.error'>: value has been optimized out
, map <at> entry=XIL(0x7fffc31bd02b), prev_event=Python Exception <class 'gdb.error'>: value has been optimized out
, used_mouse_menu=used_mouse_menu <at> entry=0x7fffffffc9bb, end_time=end_time <at> entry=0x0) at ./src/keyboard.c:2683
        echo_current = false
        c = XIL(0xc20b1d08)
        local_getcjmp = {{
            __jmpbuf = {0, 1, 140737488340544, 93824995805383, 140736458492269, 0, 140736562946003, 56448},
            __mask_was_saved = -14784,
            __saved_mask = {
              __val = {0, 56448, 0, 140736465790707, 140736652710968, 140737488340640, 93824995805383, 56448, 8589919984, 140737488340640, 0, 56448, 140737488340720, 140736448845896, 140736448845901, 140737488340912}
            }
          }}
        save_jump = {{
            __jmpbuf = {140736448845901, 93824995842824, 140736448845896, 140737488340768, 140736448845896, 0, 0, 93824995066752},
            __mask_was_saved = 0,
            __saved_mask = {
              __val = {93824995065784, 444559, 7269376900467383552, 0, 128, 0, 0, 93824996979680, 140736448845901, 140736405658160, 140736633644704, 140737488340848, 93824995062785, 6, 140736633643803, 140737488341024}
            }
          }}
        tem = Python Exception <class 'gdb.error'>: value has been optimized out

        save = Python Exception <class 'gdb.error'>: value has been optimized out

        previous_echo_area_message = XIL(0)
        also_record = XIL(0)
        reread = false
        recorded = false
        polling_stopped_here = false
        orig_kboard = 0x555556039310
        c_volatile = XIL(0)
#8  0x000055555577e03b in read_key_sequence (keybuf=keybuf <at> entry=0x7fffffffcb20, prompt=Python Exception <class 'gdb.error'>: value has been optimized out
, prompt <at> entry=XIL(0), dont_downcase_last=dont_downcase_last <at> entry=false, can_return_switch_frame=can_return_switch_frame <at> entry=true, fix_current_buffer=fix_current_buffer <at> entry=true, prevent_redisplay=prevent_redisplay <at> entry=false, disable_text_conversion_p=<optimized out>) at ./src/keyboard.c:10790
        interrupted_kboard = 0x555556039310
        interrupted_frame = 0x7fffc20b1d08
        key = Python Exception <class 'gdb.error'>: value has been optimized out

        used_mouse_menu = false
        echo_local_start = 0
        last_real_key_start = 0
        keys_local_start = 0
        new_binding = Python Exception <class 'gdb.error'>: value has been optimized out

        t = 0
        echo_start = 0
        keys_start = 0
        current_binding = XIL(0x7fffc31bd02b)
        first_unbound = 31
        mock_input = 0
        used_mouse_menu_history = {false <repeats 30 times>}
        fkey = {
          parent = XIL(0x7fffe60e78cb),
          map = XIL(0x7fffe60e78cb),
          start = 0,
          end = 0
        }
        keytran = {
          parent = XIL(0x7fffebe4ca73),
          map = XIL(0x7fffebe4ca73),
          start = 0,
          end = 0
        }
        indec = {
          parent = XIL(0x7fffe60e78b3),
          map = XIL(0x7fffe60e78b3),
          start = 0,
          end = 0
        }
        shift_translated = false
        delayed_switch_frame = XIL(0)
        original_uppercase = XIL(0)
        original_uppercase_position = -1
        disabled_conversion = false
        fake_prefixed_keys = XIL(0)
        first_event = XIL(0)
#9  0x000055555577fd67 in command_loop_1 () at ./src/lisp.h:1184
        cmd = Python Exception <class 'gdb.error'>: value has been optimized out

        keybuf = {XIL(0x7fffc31abc73), make_fixnum(53), make_fixnum(48), XIL(0), XIL(0x5555559db3e0), XIL(0x7fffc20a584d), XIL(0x7fffffffcbc0), XIL(0x5555558205a3), XIL(0x7fffffffcdec), XIL(0x3), XIL(0xc), XIL(0x140b0), XIL(0x38), XIL(0x7fffc20a584d), XIL(0x7fffffffcbc0), XIL(0x7fffffffcc00), XIL(0x60), XIL(0x555555763cd0), XIL(0x7fffffffcdec), XIL(0x7fffffffd4ef), XIL(0x7fffffffcc50), XIL(0x555555763ec7), XIL(0), XIL(0), XIL(0x2aaa78cd6780), XIL(0x7fffc28051bb), XIL(0x7fffda689a9c), XIL(0x2aaa730f4468), XIL(0x7fffffffcc00), XIL(0x5555558205a3)}
        i = <optimized out>
        last_pt = <optimized out>
        prev_modiff = 6292
        prev_buffer = 0x7fffc20a5848
#10 0x000055555581e7a6 in internal_condition_case (bfun=bfun <at> entry=0x55555577fb10 <command_loop_1>, handlers=handlers <at> entry=XIL(0xa8), hfun=hfun <at> entry=0x555555763cd0 <cmd_error>) at ./src/eval.c:1623
        val = make_fixnum(16)
        c = 0x7fffe1d92450
#11 0x000055555576290e in command_loop_2 (handlers=handlers <at> entry=XIL(0xa8)) at ./src/keyboard.c:1174
#12 0x000055555581e52f in internal_catch (tag=tag <at> entry=XIL(0x15498), func=func <at> entry=0x5555557628e0 <command_loop_2>, arg=Python Exception <class 'gdb.error'>: value has been optimized out
, arg <at> entry=XIL(0xa8)) at ./src/eval.c:1302
        val = make_fixnum(16)
        c = 0x7fffe1d6cd10
#13 0x00005555557628a9 in command_loop () at ./src/lisp.h:1184
#14 0x000055555576f3e5 in recursive_edit_1 () at ./src/keyboard.c:760
        val = Python Exception <class 'gdb.error'>: value has been optimized out

#15 0x000055555576f795 in Frecursive_edit () at ./src/keyboard.c:843
#16 0x00005555555d1f77 in main (argc=5, argv=<optimized out>) at ./src/emacs.c:2580
        stack_bottom_variable = 0x7ffff3e92c60
        old_argc = <optimized out>
        no_loadup = <optimized out>
        junk = 0x0
        dname_arg = 0x7fffffffd551 "EMACS-MPS=yes"
        ch_to_dir = 0x0
        original_pwd = <optimized out>
        dump_mode = <optimized out>
        skip_args = 1
        temacs = 0x0
        attempt_load_pdump = <optimized out>
        only_version = <optimized out>
        rlim = {
          rlim_cur = 10022912,
          rlim_max = 18446744073709551615
        }
        lc_all = <optimized out>
        sockfd = <optimized out>
        module_assertions = <optimized out>
++set $bt = backtrace_top ()
++if backtrace_p ($bt)
+++echo \n

+++echo Lisp Backtrace:\n
Lisp Backtrace:
+++xbacktrace
++++set $bt = backtrace_top ()
++++while backtrace_p ($bt)
+++++set $fun = backtrace_function ($bt)
+++++xgettype $fun
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $fun.i
++++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++++if $type == Lisp_Symbol
++++++xprintsym $fun
+++++++xsymname $fun
++++++++xgetsym $fun
+++++++++xgetptr $fun
++++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++++set $bugfix = $fun.i
++++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++++set $symname = $ptr->u.s.name
+++++++xgetptr $symname
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $symname.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++if $ptr != 0
++++++++set $sym_name = (struct Lisp_String *) $ptr
++++++++xprintstr $sym_name
+++++++++if (! $arg0)
++++++++++set $data = (char *) $sym_name->u.s.data
++++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++++if $strsize == 0
+++++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"redisplay_internal (C function)"++++++printf " (0x%x)\n", backtrace_args ($bt)
 (0x0)
+++++set $bt = backtrace_next ($bt)
+i reg
rax            0x42                66
rbx            0x5555556069a0      93824992962976
rcx            0x0                 0
rdx            0x0                 0
rsi            0x7fffffff          2147483647
rdi            0x6                 6
rbp            0x7fffffffae30      0x7fffffffae30
rsp            0x7fffffffae28      0x7fffffffae28
r8             0x0                 0
r9             0x73                115
r10            0x0                 0
r11            0x202               514
r12            0x5555556716d0      93824993400528
r13            0x7fffc20a5848      140736448845896
r14            0x0                 0
r15            0x6e633             452147
rip            0x5555555b1385      0x5555555b1385 <terminate_due_to_signal>
eflags         0x206               [ PF IF ]
cs             0x33                51
ss             0x2b                43
ds             0x0                 0
es             0x0                 0
fs             0x0                 0
gs             0x0                 0




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#76091; Package emacs. (Thu, 06 Feb 2025 15:44:02 GMT) Full text and rfc822 format available.

Message #8 received at 76091 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Gregor Zattler <telegraph <at> gmx.net>, Pip Cet <pipcet <at> protonmail.com>,
 Gerd Möllmann <gerd.moellmann <at> gmail.com>
Cc: 76091 <at> debbugs.gnu.org
Subject: Re: bug#76091: 31.0.50;
 festure/igc: buffer.h:829: Emacs fatal error: assertion failed:
 BUFFERP (a)
Date: Thu, 06 Feb 2025 17:43:20 +0200
> Date: Thu, 06 Feb 2025 13:49:30 +0100
> From:  Gregor Zattler via "Bug reports for GNU Emacs,
>  the Swiss army knife of text editors" <bug-gnu-emacs <at> gnu.org>
> 
> Dear Emacs developers, I don't know if
> this failed assertion is due to using
> MPS as GC.
> 
> I played along with pdf-tools and
> org-noter when it happened.
> 
> This time I built with a current
> checkout of feature/igc.
> 
> GDB output even further below.
> 
> The crashed session is still in GDB.
> [...]
> Breakpoint 1, terminate_due_to_signal (sig=sig <at> entry=6, backtrace_limit=backtrace_limit <at> entry=2147483647) at ./src/emacs.c:425
> 425	{
> +bt
> #0  terminate_due_to_signal (sig=sig <at> entry=6, backtrace_limit=backtrace_limit <at> entry=2147483647) at ./src/emacs.c:425
> #1  0x00005555555b8f5b in die (msg=msg <at> entry=0x5555559b40d0 "BUFFERP (a)", file=file <at> entry=0x5555559b40c7 "buffer.h", line=line <at> entry=829) at ./src/alloc.c:7683
> #2  0x00005555555a0bda in XBUFFER (a=Python Exception <class 'gdb.error'>: value has been optimized out
> ) at ./src/buffer.h:829
> #3  0x00005555555a4370 in XBUFFER (a=Python Exception <class 'gdb.error'>: value has been optimized out
> ) at ./src/xdisp.c:17024
> #4  prepare_menu_bars () at ./src/xdisp.c:14041

This is here:

      FOR_EACH_FRAME (tail, frame)
	{
	  struct frame *f = XFRAME (frame);
	  struct window *w = XWINDOW (FRAME_SELECTED_WINDOW (f));
	  if (some_windows
	      && !f->redisplay
	      && !w->redisplay
	      && !XBUFFER (w->contents)->text->redisplay)
	    continue;

And I don't understand how w->contents of a frame's selected window
could fail the BUFFERP test.  Can you tell what the below commands
produce?

  (gdb) frame 3
  (gdb) print a
  (gdb) xtype

Other than that, with all the locals "optimized out", there really is
not much else to do, except analyze the machine instructions and the
corresponding registers.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#76091; Package emacs. (Thu, 06 Feb 2025 15:50:01 GMT) Full text and rfc822 format available.

Message #11 received at 76091 <at> debbugs.gnu.org (full text, mbox):

From: Gregor Zattler <telegraph <at> gmx.net>
To: Eli Zaretskii <eliz <at> gnu.org>, Pip Cet <pipcet <at> protonmail.com>, Gerd
 Möllmann <gerd.moellmann <at> gmail.com>
Cc: 76091 <at> debbugs.gnu.org
Subject: Re: bug#76091: 31.0.50; festure/igc: buffer.h:829: Emacs fatal
 error: assertion failed: BUFFERP (a)
Date: Thu, 06 Feb 2025 16:48:56 +0100
Hi Eli,
* Eli Zaretskii <eliz <at> gnu.org> [2025-02-06; 17:43 +02]:
>> Date: Thu, 06 Feb 2025 13:49:30 +0100
>> From:  Gregor Zattler via "Bug reports for GNU Emacs,
>>  the Swiss army knife of text editors" <bug-gnu-emacs <at> gnu.org>
>>
>> Dear Emacs developers, I don't know if
>> this failed assertion is due to using
>> MPS as GC.
>>
>> I played along with pdf-tools and
>> org-noter when it happened.
>>
>> This time I built with a current
>> checkout of feature/igc.
>>
>> GDB output even further below.
>>
>> The crashed session is still in GDB.
>> [...]
>> Breakpoint 1, terminate_due_to_signal (sig=sig <at> entry=6, backtrace_limit=backtrace_limit <at> entry=2147483647) at ./src/emacs.c:425
>> 425	{
>> +bt
>> #0  terminate_due_to_signal (sig=sig <at> entry=6, backtrace_limit=backtrace_limit <at> entry=2147483647) at ./src/emacs.c:425
>> #1  0x00005555555b8f5b in die (msg=msg <at> entry=0x5555559b40d0 "BUFFERP (a)", file=file <at> entry=0x5555559b40c7 "buffer.h", line=line <at> entry=829) at ./src/alloc.c:7683
>> #2  0x00005555555a0bda in XBUFFER (a=Python Exception <class 'gdb.error'>: value has been optimized out
>> ) at ./src/buffer.h:829
>> #3  0x00005555555a4370 in XBUFFER (a=Python Exception <class 'gdb.error'>: value has been optimized out
>> ) at ./src/xdisp.c:17024
>> #4  prepare_menu_bars () at ./src/xdisp.c:14041
>
> This is here:
>
>       FOR_EACH_FRAME (tail, frame)
> 	{
> 	  struct frame *f = XFRAME (frame);
> 	  struct window *w = XWINDOW (FRAME_SELECTED_WINDOW (f));
> 	  if (some_windows
> 	      && !f->redisplay
> 	      && !w->redisplay
> 	      && !XBUFFER (w->contents)->text->redisplay)
> 	    continue;
>
> And I don't understand how w->contents of a frame's selected window
> could fail the BUFFERP test.  Can you tell what the below commands
> produce?
>
>   (gdb) frame 3
>   (gdb) print a
>   (gdb) xtype


+frame 3
#3  0x00005555555a4370 in XBUFFER (a=...) at ./src/xdisp.c:17024
17024	    XFRAME (frame)->already_hscrolled_p = false;
+print a
$1 = <optimized out>
+xtype
++xgettype $
+++if (CHECK_LISP_OBJECT_TYPE)
++++set $bugfix = $.i
+++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
value has been optimized out


I'll try to use an un-optimized build
but I'm afraid it's too slow for
everyday usage.

HTH, Gregor




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#76091; Package emacs. (Thu, 06 Feb 2025 23:17:02 GMT) Full text and rfc822 format available.

Message #14 received at 76091 <at> debbugs.gnu.org (full text, mbox):

From: Gregor Zattler <telegraph <at> gmx.net>
To: Eli Zaretskii <eliz <at> gnu.org>, Pip Cet <pipcet <at> protonmail.com>, Gerd
 Möllmann <gerd.moellmann <at> gmail.com>
Cc: 76091 <at> debbugs.gnu.org
Subject: Re: bug#76091: 31.0.50; festure/igc: buffer.h:829: Emacs fatal
 error: assertion failed: BUFFERP (a)
Date: Fri, 07 Feb 2025 00:15:25 +0100
Hi Eli,
* Gregor Zattler <telegraph <at> gmx.net> [2025-02-06; 16:48 +01]:
> I'll try to use an un-optimized build
> but I'm afraid it's too slow for
> everyday usage.

So I did, it's really slow, but just
usable, and I got a hit at the same
breakpoint.  I again played around with
org-noter.  When I finally hit C-x k (a
convenience function which kills current
buffer) the graphical frame vanished.
It might even be that this is expected
behaviour of org-noter but the daemon
now hangs which it surely should not.

As always first infos for this
build, then GDB output

In GNU Emacs 31.0.50 (build 1,
 x86_64-pc-linux-gnu, cairo version
 1.16.0) of 2025-02-06 built on no
Repository revision: aa915b0c87e42444ee5426744df18c3b15ac0cf5
Repository branch: HEAD
Windowing system distributor 'The X.Org Foundation', version 11.0.12101007
System Description: Debian GNU/Linux 12 (bookworm)

Configured using:
 'configure
 --infodir=/usr/share/info/emacs
 --with-json
 --with-file-notification=yes
 --with-libsystemd --with-cairo
 --with-x=yes --with-x-toolkit=no
 --without-toolkit-scroll-bars
 --without-gsettings
 --enable-check-lisp-object-type
 --enable-checking=yes,glyphs,igc_debug
 --with-native-compilation=no
 --with-mps=debug 'CFLAGS=-ggdb3 -Og
 -ffile-prefix-map=/home/grfz/src/emacs-igc2=. -fstack-protector-strong
 -Wformat -Werror=format-security
 -fno-omit-frame-pointer'
 'CPPFLAGS=-I/home/grfz/mps-artifacts
 -Wdate-time -D_FORTIFY_SOURCE=2'
 'LDFLAGS=-L/home/grfz/mps-artifacts
 -Wl,-z,relro''

Configured features:
ACL CAIRO DBUS FREETYPE GIF GLIB GMP
GNUTLS GPM HARFBUZZ JPEG LCMS2 LIBOTF
LIBSELINUX LIBSYSTEMD LIBXML2 M17N_FLT
MODULES MPS NOTIFY INOTIFY OLDXMENU
PDUMPER PNG RSVG SECCOMP SOUND SQLITE3
THREADS TIFF WEBP X11 XDBE XIM XINPUT2
XPM ZLIB

Important settings:
  value of $EMACSLOADPATH: :/usr/share/emacs/site-lisp:/usr/share/emacs/site-lisp/autoconf:/usr/share/emacs/site-lisp/dictionaries-common:/usr/share/emacs/site-lisp/elpa-src:/usr/share/emacs/site-lisp/elpa-src/pdf-tools-1.0.0:/usr/share/emacs/site-lisp/elpa-src/tablist-1.0:/usr/share/emacs/site-lisp/elpa-src/let-alist-1.0.6:/usr/share/emacs/site-lisp/llvm-14:/usr/share/emacs/site-lisp/elpa:/usr/share/emacs/site-lisp/elpa/pdf-tools-1.0.0:/usr/share/emacs/site-lisp/elpa/tablist-1.0:/usr/share/emacs/site-lisp/elpa/dh-elpa-2.0.16:/usr/share/emacs/site-lisp/elpa/let-alist-1.0.6:/usr/share/emacs/28.2/site-lisp
  value of $LC_ALL: 
  value of $LC_COLLATE: de_DE.utf8
  value of $LC_CTYPE: de_DE.utf8
  value of $LC_MESSAGES: POSIX
  value of $LC_MONETARY: de_DE.utf8
  value of $LC_NUMERIC: de_DE.utf8
  value of $LC_TIME: de_DE.utf8
  value of $LANG: de_DE.utf8
  locale-coding-system: utf-8-unix

Major mode: Message[Notmuch]

Minor modes in effect:
  orgalist-mode: t
  wcheck-mode: t
  rainbow-delimiters-mode: t
  winner-mode: t
  which-key-mode: t
  savehist-mode: t
  ws-butler-global-mode: t
  ws-butler-mode: t
  delete-selection-mode: t
  minibuffer-depth-indicate-mode: t
  which-function-mode: t
  windmove-mode: t
  xterm-mouse-mode: t
  key-chord-mode: t
  find-function-mode: t
  mml-mode: t
  mail-abbrevs-mode: t
  override-global-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  minibuffer-regexp-mode: t
  size-indication-mode: t
  column-number-mode: t
  line-number-mode: t
  auto-fill-function: #[128 \304\300\301#\207 [orgalist--auto-fill message-do-auto-fill :around nil apply] 5 advice]
  transient-mark-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  abbrev-mode: t

Load-path shadows:
~/src/notmuch/emacs/notmuch-address hides /home/grfz/.config/emacs/elisp/notmuch-address
/home/grfz/src/ol-notmuch/ol-notmuch hides /home/grfz/.config/emacs/elisp/ol-notmuch
/home/grfz/.config/emacs/elpa-31.0/magit-4.2.0/magit-autorevert hides /home/grfz/.config/emacs/elpa-31.0/magit-section-4.2.0/magit-autorevert
~/src/notmuch/emacs/notmuch-lib hides /usr/local/share/emacs/site-lisp/notmuch-lib
~/src/notmuch/emacs/coolj hides /usr/local/share/emacs/site-lisp/coolj
~/src/notmuch/emacs/notmuch-address hides /usr/local/share/emacs/site-lisp/notmuch-address
~/src/notmuch/emacs/notmuch-hello hides /usr/local/share/emacs/site-lisp/notmuch-hello
~/src/notmuch/emacs/notmuch-parser hides /usr/local/share/emacs/site-lisp/notmuch-parser
~/src/notmuch/emacs/notmuch-show hides /usr/local/share/emacs/site-lisp/notmuch-show
~/src/notmuch/emacs/notmuch-wash hides /usr/local/share/emacs/site-lisp/notmuch-wash
~/src/notmuch/emacs/notmuch-draft hides /usr/local/share/emacs/site-lisp/notmuch-draft
~/src/notmuch/emacs/notmuch-tree hides /usr/local/share/emacs/site-lisp/notmuch-tree
~/src/notmuch/emacs/notmuch-version hides /usr/local/share/emacs/site-lisp/notmuch-version
~/src/notmuch/emacs/notmuch-jump hides /usr/local/share/emacs/site-lisp/notmuch-jump
~/src/notmuch/emacs/notmuch-company hides /usr/local/share/emacs/site-lisp/notmuch-company
~/src/notmuch/emacs/notmuch hides /usr/local/share/emacs/site-lisp/notmuch
~/src/notmuch/emacs/notmuch-crypto hides /usr/local/share/emacs/site-lisp/notmuch-crypto
~/src/notmuch/emacs/notmuch-compat hides /usr/local/share/emacs/site-lisp/notmuch-compat
~/src/notmuch/emacs/notmuch-maildir-fcc hides /usr/local/share/emacs/site-lisp/notmuch-maildir-fcc
~/src/notmuch/emacs/notmuch-tag hides /usr/local/share/emacs/site-lisp/notmuch-tag
~/src/notmuch/emacs/notmuch-message hides /usr/local/share/emacs/site-lisp/notmuch-message
~/src/notmuch/emacs/notmuch-print hides /usr/local/share/emacs/site-lisp/notmuch-print
~/src/notmuch/emacs/notmuch-mua hides /usr/local/share/emacs/site-lisp/notmuch-mua
~/src/notmuch/emacs/notmuch-query hides /usr/local/share/emacs/site-lisp/notmuch-query
/home/grfz/.config/emacs/elpa-31.0/transient-0.8.4/transient hides /home/grfz/src/emacs-igc2/lisp/transient
/home/grfz/.config/emacs/elpa-31.0/idlwave-6.5.1/idlw-shell hides /home/grfz/src/emacs-igc2/lisp/obsolete/idlw-shell
/home/grfz/.config/emacs/elpa-31.0/idlwave-6.5.1/idlwave hides /home/grfz/src/emacs-igc2/lisp/obsolete/idlwave
/home/grfz/.config/emacs/elpa-31.0/idlwave-6.5.1/idlw-toolbar hides /home/grfz/src/emacs-igc2/lisp/obsolete/idlw-toolbar
/home/grfz/.config/emacs/elpa-31.0/idlwave-6.5.1/idlw-help hides /home/grfz/src/emacs-igc2/lisp/obsolete/idlw-help
/home/grfz/.config/emacs/elpa-31.0/idlwave-6.5.1/idlw-complete-structtag hides /home/grfz/src/emacs-igc2/lisp/obsolete/idlw-complete-structtag
/home/grfz/src/emacs-igc2/lisp/emacs-lisp/let-alist hides /usr/share/emacs/site-lisp/elpa/let-alist-1.0.6/let-alist
/usr/share/emacs/site-lisp/elpa/let-alist-1.0.6/let-alist-autoloads hides /usr/share/emacs/site-lisp/elpa-src/let-alist-1.0.6/let-alist-autoloads
/usr/share/emacs/site-lisp/elpa/let-alist-1.0.6/let-alist-pkg hides /usr/share/emacs/site-lisp/elpa-src/let-alist-1.0.6/let-alist-pkg
/home/grfz/src/emacs-igc2/lisp/emacs-lisp/let-alist hides /usr/share/emacs/site-lisp/elpa-src/let-alist-1.0.6/let-alist
/usr/share/emacs/site-lisp/elpa/pdf-tools-1.0.0/pdf-isearch hides /usr/share/emacs/site-lisp/elpa-src/pdf-tools-1.0.0/pdf-isearch
/usr/share/emacs/site-lisp/elpa/pdf-tools-1.0.0/pdf-util hides /usr/share/emacs/site-lisp/elpa-src/pdf-tools-1.0.0/pdf-util
/usr/share/emacs/site-lisp/elpa/pdf-tools-1.0.0/pdf-sync hides /usr/share/emacs/site-lisp/elpa-src/pdf-tools-1.0.0/pdf-sync
/usr/share/emacs/site-lisp/elpa/pdf-tools-1.0.0/pdf-links hides /usr/share/emacs/site-lisp/elpa-src/pdf-tools-1.0.0/pdf-links
/usr/share/emacs/site-lisp/elpa/pdf-tools-1.0.0/pdf-dev hides /usr/share/emacs/site-lisp/elpa-src/pdf-tools-1.0.0/pdf-dev
/usr/share/emacs/site-lisp/elpa/pdf-tools-1.0.0/pdf-cache hides /usr/share/emacs/site-lisp/elpa-src/pdf-tools-1.0.0/pdf-cache
/usr/share/emacs/site-lisp/elpa/pdf-tools-1.0.0/pdf-loader hides /usr/share/emacs/site-lisp/elpa-src/pdf-tools-1.0.0/pdf-loader
/usr/share/emacs/site-lisp/elpa/pdf-tools-1.0.0/pdf-misc hides /usr/share/emacs/site-lisp/elpa-src/pdf-tools-1.0.0/pdf-misc
/usr/share/emacs/site-lisp/elpa/pdf-tools-1.0.0/pdf-macs hides /usr/share/emacs/site-lisp/elpa-src/pdf-tools-1.0.0/pdf-macs
/usr/share/emacs/site-lisp/elpa/pdf-tools-1.0.0/pdf-annot hides /usr/share/emacs/site-lisp/elpa-src/pdf-tools-1.0.0/pdf-annot
/usr/share/emacs/site-lisp/elpa/pdf-tools-1.0.0/pdf-tools-autoloads hides /usr/share/emacs/site-lisp/elpa-src/pdf-tools-1.0.0/pdf-tools-autoloads
/usr/share/emacs/site-lisp/elpa/pdf-tools-1.0.0/pdf-tools-pkg hides /usr/share/emacs/site-lisp/elpa-src/pdf-tools-1.0.0/pdf-tools-pkg
/usr/share/emacs/site-lisp/elpa/pdf-tools-1.0.0/pdf-virtual hides /usr/share/emacs/site-lisp/elpa-src/pdf-tools-1.0.0/pdf-virtual
/usr/share/emacs/site-lisp/elpa/pdf-tools-1.0.0/pdf-tools hides /usr/share/emacs/site-lisp/elpa-src/pdf-tools-1.0.0/pdf-tools
/usr/share/emacs/site-lisp/elpa/pdf-tools-1.0.0/pdf-outline hides /usr/share/emacs/site-lisp/elpa-src/pdf-tools-1.0.0/pdf-outline
/usr/share/emacs/site-lisp/elpa/pdf-tools-1.0.0/pdf-view hides /usr/share/emacs/site-lisp/elpa-src/pdf-tools-1.0.0/pdf-view
/usr/share/emacs/site-lisp/elpa/pdf-tools-1.0.0/pdf-history hides /usr/share/emacs/site-lisp/elpa-src/pdf-tools-1.0.0/pdf-history
/usr/share/emacs/site-lisp/elpa/pdf-tools-1.0.0/pdf-occur hides /usr/share/emacs/site-lisp/elpa-src/pdf-tools-1.0.0/pdf-occur
/usr/share/emacs/site-lisp/elpa/pdf-tools-1.0.0/pdf-info hides /usr/share/emacs/site-lisp/elpa-src/pdf-tools-1.0.0/pdf-info
/usr/share/emacs/site-lisp/elpa/tablist-1.0/tablist-pkg hides /usr/share/emacs/site-lisp/elpa-src/tablist-1.0/tablist-pkg
/usr/share/emacs/site-lisp/elpa/tablist-1.0/tablist hides /usr/share/emacs/site-lisp/elpa-src/tablist-1.0/tablist
/usr/share/emacs/site-lisp/elpa/tablist-1.0/tablist-filter hides /usr/share/emacs/site-lisp/elpa-src/tablist-1.0/tablist-filter
/usr/share/emacs/site-lisp/elpa/tablist-1.0/tablist-autoloads hides /usr/share/emacs/site-lisp/elpa-src/tablist-1.0/tablist-autoloads

Features:
(shadow emacsbug sort orgalist
wcheck-mode ecomplete mail-extr vc-hg
vc-bzr vc-dir ewoc vc-src vc-sccs vc-svn
vc-cvs vc-rcs log-view log-edit
pcvs-util vc vc-dispatcher bug-reference
mule-util tramp tramp-cache time-stamp
trampver tramp-integration tramp-message
tramp-compat shell tramp-loaddefs
add-log rainbow-delimiters winner
which-key ol-notmuch notmuch
notmuch-tree notmuch-jump notmuch-hello
notmuch-show notmuch-print
notmuch-crypto notmuch-mua
notmuch-message notmuch-draft
notmuch-maildir-fcc notmuch-address
notmuch-company notmuch-parser
notmuch-wash diff-mode track-changes
coolj goto-addr icalendar diary-lib
diary-loaddefs notmuch-tag crm
notmuch-lib notmuch-version
notmuch-compat hl-line compat
org-contrib org-crypt org-protocol
org-clock ob-plantuml gnus-alias advice
finder-inf savehist auth-source-pass
holidays holiday-loaddefs ws-butler
delsel modus-operandi-theme modus-themes
mb-depth which-func windmove xt-mouse
edmacro kmacro key-chord org ob ob-ref
ob-lob ob-table ob-exp org-macro
org-pcomplete pcomplete org-list
org-footnote org-faces org-entities
noutline outline so-long ob-emacs-lisp
org-table org-loaddefs find-func
cal-menu calendar cal-loaddefs gnus-sum
shr pixel-fill kinsoku url-file svg dom
gnus-group mm-url gnus-undo gnus-start
gnus-dbus dbus xml gnus-cloud nnimap
nnmail mail-source imap rfc2104 utf7
nnoo parse-time iso8601 gnus-spec
gnus-int gnus-range gnus-win gnus
message yank-media dired desktop
frameset dired-loaddefs autorevert
filenotify rfc822 mml mailabbrev
sendmail gmm-utils mailheader nnheader
mail-utils range ob-tangle ol org-src
sh-script flymake project warnings
thingatpt smie treesit shortdoc
executable skeleton org-keys oc
ob-comint ob-core org-cycle org-fold
org-fold-core org-compat org-element-ast
ob-eval org-version org-macs format-spec
use-package use-package-ensure
use-package-delight use-package-diminish
use-package-bind-key bind-key
use-package-core async-autoloads
csv-mode-autoloads debbugs-autoloads
dired-git-info-autoloads
git-timemachine-autoloads
hyperbole-autoloads kotl-autoloads hact
set hhist idlwave-autoloads
key-chord-autoloads magit-autoloads
magit-section-autoloads dash-autoloads
minibuffer-line-autoloads
org-contrib-autoloads
org-noter-autoloads org-autoloads
orgalist-autoloads paredit-autoloads
rainbow-delimiters-autoloads
transient-autoloads
wcheck-mode-autoloads info speedbar
imenu ezimage dframe
with-editor-autoloads
ws-butler-autoloads package let-alist
browse-url xdg url url-proxy url-privacy
url-expand url-methods url-history
url-cookie generate-lisp-file url-domsuf
url-util mm-view mml-smime mml-sec epa
gnus-util time-date smime gnutls puny
dig mailcap url-handlers mm-decode
mm-bodies mm-encode mail-parse rfc2231
rfc2047 rfc2045 mm-util ietf-drums
mail-prsvr url-parse auth-source eieio
eieio-core password-cache json map
byte-opt bytecomp byte-compile compile
rx text-property-search comint
easy-mmode files-x ansi-osc ansi-color
ring url-vars epg cl-extra help-mode
derived cl-seq rfc6068 epg-config subr-x
cl-macs inline gv pcase cus-edit pp
cus-load icons wid-edit cl-loaddefs
cl-lib rmc iso-transl tooltip cconv
eldoc paren electric uniquify ediff-hook
vc-hooks lisp-float-type elisp-mode
mwheel term/x-win x-win term/common-win
x-dnd touch-screen tool-bar dnd fontset
image regexp-opt fringe tabulated-list
replace newcomment text-mode lisp-mode
prog-mode register page tab-bar menu-bar
rfn-eshadow isearch easymenu timer
select scroll-bar mouse jit-lock
font-lock syntax font-core
term/tty-colors frame minibuffer nadvice
seq simple cl-generic indonesian
philippine cham georgian utf-8-lang
misc-lang vietnamese tibetan thai
tai-viet lao korean japanese eucjp-ms
cp51932 hebrew greek romanian slovak
czech european ethiopic indian cyrillic
chinese composite emoji-zwj charscript
charprop case-table epa-hook
jka-cmpr-hook help abbrev obarray
oclosure cl-preloaded button loaddefs
theme-loaddefs faces cus-face macroexp
files window text-properties overlay
sha1 md5 base64 format env code-pages
mule custom widget keymap
hashtable-print-readable backquote
threads dbusbind inotify lcms2
dynamic-setting font-render-setting
cairo xinput2 x multi-tty move-toolbar
make-network-process tty-child-frames
mps emacs)

Memory information:
((conses 24 0 0) (symbols 56 0 0) (strings 40 0 0) (string-bytes 1 0)
 (vectors 24 0) (vector-slots 8 0 0) (floats 24 0 0) (intervals 64 0 0)
 (buffers 992 0))


+run --debug-init -xrm --init-directory="${USER_EMACS_DIRECTORY}" --fg-daemon="${EMACS_SERVER_NAME}"
Starting program: /home/grfz/src/emacs-igc2/src/emacs --debug-init -xrm --init-directory="${USER_EMACS_DIRECTORY}" --fg-daemon="${EMACS_SERVER_NAME}"
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[Detaching after vfork from child process 1750477]
Program received signal SIGSEGV, Segmentation fault.

[... 8528 lines ...]

Program received signal SIGSEGV, Segmentation fault.
[Detaching after vfork from child process 1751646]
[Detaching after vfork from child process 1751647]

Program received signal SIGSEGV, Segmentation fault.

[... 1082 Zeilen gelöscht ...]

Program received signal SIGSEGV, Segmentation fault.
[Detaching after vfork from child process 1751723]
[Detaching after vfork from child process 1751724]

Program received signal SIGSEGV, Segmentation fault.

[... 1426 Zeilen gelöscht ...]

Program received signal SIGSEGV, Segmentation fault.
[Detaching after vfork from child process 1752941]
[Detaching after vfork from child process 1752942]
[Detaching after vfork from child process 1752950]
[Detaching after vfork from child process 1752951]

Program received signal SIGSEGV, Segmentation fault.

[... 894 Zeilen gelöscht ...]

Program received signal SIGSEGV, Segmentation fault.
[Detaching after vfork from child process 1752985]

Program received signal SIGSEGV, Segmentation fault.

[... 2926 Zeilen gelöscht ...]

Program received signal SIGSEGV, Segmentation fault.
[Detaching after vfork from child process 1755223]
[Detaching after vfork from child process 1755224]
[Detaching after vfork from child process 1755985]
[Detaching after vfork from child process 1755986]

Program received signal SIGSEGV, Segmentation fault.

[... 9262 Zeilen gelöscht ...]

Program received signal SIGSEGV, Segmentation fault.
[Detaching after vfork from child process 1771940]
[Detaching after vfork from child process 1771944]

Program received signal SIGSEGV, Segmentation fault.
[Detaching after vfork from child process 1772038]
[Detaching after vfork from child process 1772101]

Program received signal SIGSEGV, Segmentation fault.

[... 10770 Zeilen gelöscht ...]

Program received signal SIGSEGV, Segmentation fault.
[Detaching after vfork from child process 1772677]

Program received signal SIGSEGV, Segmentation fault.

[... 2962 Zeilen gelöscht ...]

Program received signal SIGSEGV, Segmentation fault.

Breakpoint 1, terminate_due_to_signal (sig=sig <at> entry=6, backtrace_limit=backtrace_limit <at> entry=2147483647) at ./src/emacs.c:425
425	{
+t
[Current thread is 1 (Thread 0x7ffff4f48000 (LWP 1750449))]
+bt
#0  terminate_due_to_signal (sig=sig <at> entry=6, backtrace_limit=backtrace_limit <at> entry=2147483647) at ./src/emacs.c:425
#1  0x00005555557d9a62 in set_state (state=state <at> entry=IGC_STATE_DEAD) at ./src/igc.c:1017
#2  0x00005555557d9a96 in igc_assert_fail (file=file <at> entry=0x555555903e97 "igc.c", line=line <at> entry=3020, msg=msg <at> entry=0x5555558f2277 "r == NULL") at ./src/igc.c:306
#3  0x00005555557da4e4 in igc_check_freeable (start=start <at> entry=0x555555b2b8f0) at ./src/igc.c:3020
#4  0x0000555555736d12 in xfree (block=block <at> entry=0x555555b2b8f0) at ./src/alloc.c:760
#5  0x00005555556889f0 in x_delete_display (dpyinfo=dpyinfo <at> entry=0x555555b2b8f0) at ./src/xterm.c:31925
#6  0x000055555569385e in x_delete_terminal (terminal=0x7fffd549a0c0) at ./src/xterm.c:32154
#7  0x000055555567099a in Fdelete_terminal (terminal=terminal <at> entry=XIL(0x7fffd549a0c5), force=XIL(0x38)) at ./src/terminal.c:428
#8  0x00005555555b492a in delete_frame (frame=frame <at> entry=XIL(0x7fffd5771d1d), force=XIL(0)) at ./src/frame.c:2670
#9  0x00005555555b4e00 in Fdelete_frame (frame=XIL(0x7fffd5771d1d), force=Python Exception <class 'gdb.error'>: value has been optimized out
) at ./src/frame.c:2839
#10 0x000055555576022a in eval_sub (form=Python Exception <class 'gdb.error'>: value has been optimized out
) at ./src/eval.c:2612
#11 0x0000555555760bc3 in Fif (args=XIL(0x7fffbb79b6ab)) at ./src/eval.c:407
#12 0x000055555575ffef in eval_sub (form=Python Exception <class 'gdb.error'>: value has been optimized out
, form <at> entry=XIL(0x7fffbb79996b)) at ./src/eval.c:2560
#13 0x00005555557605e2 in Fprogn (body=Python Exception <class 'gdb.error'>: value has been optimized out
) at ./src/eval.c:452
#14 0x000055555575ffef in eval_sub (form=Python Exception <class 'gdb.error'>: value has been optimized out
) at ./src/eval.c:2560
#15 0x0000555555760bc3 in Fif (args=XIL(0x7fffbb7901f3)) at ./src/eval.c:407
#16 0x000055555575ffef in eval_sub (form=Python Exception <class 'gdb.error'>: value has been optimized out
, form <at> entry=XIL(0x7fffbb77c5bb)) at ./src/eval.c:2560
#17 0x00005555557605e2 in Fprogn (body=Python Exception <class 'gdb.error'>: value has been optimized out
) at ./src/eval.c:452
#18 0x00005555557617f5 in FletX (args=XIL(0x7fffbb767a1b)) at ./src/eval.c:1051
#19 0x000055555575ffef in eval_sub (form=Python Exception <class 'gdb.error'>: value has been optimized out
, form <at> entry=XIL(0x7fffbb7662fb)) at ./src/eval.c:2560
#20 0x00005555557605e2 in Fprogn (body=Python Exception <class 'gdb.error'>: value has been optimized out
) at ./src/eval.c:452
#21 0x000055555575ffef in eval_sub (form=Python Exception <class 'gdb.error'>: value has been optimized out
) at ./src/eval.c:2560
#22 0x0000555555760bc3 in Fif (args=XIL(0x7fffbb75e76b)) at ./src/eval.c:407
#23 0x000055555575ffef in eval_sub (form=Python Exception <class 'gdb.error'>: value has been optimized out
, form <at> entry=XIL(0x7fffbb75d12b)) at ./src/eval.c:2560
#24 0x00005555557605e2 in Fprogn (body=Python Exception <class 'gdb.error'>: value has been optimized out
) at ./src/eval.c:452
#25 0x0000555555760914 in funcall_lambda (fun=fun <at> entry=XIL(0x7fffbb756a7d), nargs=nargs <at> entry=1, arg_vector=arg_vector <at> entry=0x7fffffffb5e0) at ./src/eval.c:3361
#26 0x0000555555761136 in apply_lambda (fun=Python Exception <class 'gdb.error'>: value has been optimized out
, fun <at> entry=XIL(0x7fffbb756a7d), args=Python Exception <class 'gdb.error'>: value has been optimized out
, count=count <at> entry=...) at ./src/eval.c:3226
#27 0x000055555576034e in eval_sub (form=Python Exception <class 'gdb.error'>: value has been optimized out
, form <at> entry=XIL(0x7fffbb781583)) at ./src/eval.c:2656
#28 0x00005555557605e2 in Fprogn (body=Python Exception <class 'gdb.error'>: value has been optimized out
) at ./src/eval.c:452
#29 0x000055555575ffef in eval_sub (form=Python Exception <class 'gdb.error'>: value has been optimized out
) at ./src/eval.c:2560
#30 0x0000555555760bc3 in Fif (args=XIL(0x7fffbb77fe6b)) at ./src/eval.c:407
#31 0x000055555575ffef in eval_sub (form=Python Exception <class 'gdb.error'>: value has been optimized out
, form <at> entry=XIL(0x7fffbb77f943)) at ./src/eval.c:2560
#32 0x00005555557605e2 in Fprogn (body=Python Exception <class 'gdb.error'>: value has been optimized out
) at ./src/eval.c:452
#33 0x0000555555761542 in Flet (args=Python Exception <class 'gdb.error'>: value has been optimized out
) at ./src/eval.c:1118
#34 0x000055555575ffef in eval_sub (form=Python Exception <class 'gdb.error'>: value has been optimized out
, form <at> entry=XIL(0x7fffbb77e803)) at ./src/eval.c:2560
#35 0x00005555557605e2 in Fprogn (body=Python Exception <class 'gdb.error'>: value has been optimized out
) at ./src/eval.c:452
#36 0x000055555575ffef in eval_sub (form=Python Exception <class 'gdb.error'>: value has been optimized out
, form <at> entry=XIL(0x7fffbb77bf2b)) at ./src/eval.c:2560
#37 0x00005555557605e2 in Fprogn (body=Python Exception <class 'gdb.error'>: value has been optimized out
) at ./src/eval.c:452
#38 0x000055555575ffef in eval_sub (form=Python Exception <class 'gdb.error'>: value has been optimized out
) at ./src/eval.c:2560
#39 0x0000555555760bc3 in Fif (args=XIL(0x7fffbb771c4b)) at ./src/eval.c:407
#40 0x000055555575ffef in eval_sub (form=Python Exception <class 'gdb.error'>: value has been optimized out
, form <at> entry=XIL(0x7fffbb76ff53)) at ./src/eval.c:2560
#41 0x00005555557605e2 in Fprogn (body=Python Exception <class 'gdb.error'>: value has been optimized out
) at ./src/eval.c:452
#42 0x0000555555761542 in Flet (args=Python Exception <class 'gdb.error'>: value has been optimized out
) at ./src/eval.c:1118
#43 0x000055555575ffef in eval_sub (form=Python Exception <class 'gdb.error'>: value has been optimized out
, form <at> entry=XIL(0x7fffbb76aea3)) at ./src/eval.c:2560
#44 0x00005555557605e2 in Fprogn (body=Python Exception <class 'gdb.error'>: value has been optimized out
) at ./src/eval.c:452
#45 0x0000555555760914 in funcall_lambda (fun=fun <at> entry=XIL(0x7fffbb765de5), nargs=nargs <at> entry=0, arg_vector=arg_vector <at> entry=0x7fffffffbfd0) at ./src/eval.c:3361
#46 0x0000555555760b07 in funcall_general (fun=XIL(0x7fffbb765de5), numargs=numargs <at> entry=0, args=args <at> entry=0x7fffffffbfd0) at ./src/eval.c:3055
#47 0x000055555575db3b in Ffuncall (nargs=1, args=0x7fffffffbfc8) at ./src/eval.c:3104
#48 0x000055555575df87 in funcall_nil (nargs=<optimized out>, args=<optimized out>) at ./src/eval.c:2787
#49 0x000055555575cffc in run_hook_with_args (nargs=nargs <at> entry=1, args=args <at> entry=0x7fffffffbfc8, funcall=funcall <at> entry=0x55555575df7e <funcall_nil>) at ./src/eval.c:2964
#50 0x000055555575d08a in Frun_hook_with_args (nargs=nargs <at> entry=1, args=args <at> entry=0x7fffffffbfc8) at ./src/eval.c:2829
#51 0x000055555575d0a6 in run_hook (hook=XIL(0x2aaa65d2ec98)) at ./src/eval.c:2977
#52 0x00005555556fb765 in Fkill_buffer (buffer_or_name=Python Exception <class 'gdb.error'>: value has been optimized out
) at ./src/lisp.h:1184
#53 0x000055555575ef53 in funcall_subr (subr=0x5555559b0320 <Skill_buffer>, numargs=numargs <at> entry=1, args=args <at> entry=0x7fffe2200100) at ./src/eval.c:3172
#54 0x00005555557a0de0 in exec_byte_code (fun=Python Exception <class 'gdb.error'>: value has been optimized out
, fun <at> entry=XIL(0x7fffedb24d1d), args_template=<optimized out>, nargs=<optimized out>, nargs <at> entry=0, args=<optimized out>, args <at> entry=0x7fffffffc2e0) at ./src/bytecode.c:827
#55 0x000055555576070e in funcall_lambda (fun=fun <at> entry=XIL(0x7fffedb24d1d), nargs=nargs <at> entry=0, arg_vector=arg_vector <at> entry=0x7fffffffc2e0) at ./src/eval.c:3263
#56 0x0000555555761136 in apply_lambda (fun=Python Exception <class 'gdb.error'>: value has been optimized out
, fun <at> entry=XIL(0x7fffedb24d1d), args=Python Exception <class 'gdb.error'>: value has been optimized out
, count=count <at> entry=...) at ./src/eval.c:3226
#57 0x000055555576034e in eval_sub (form=Python Exception <class 'gdb.error'>: value has been optimized out
, form <at> entry=XIL(0x7fffdca6007b)) at ./src/eval.c:2656
#58 0x00005555557605e2 in Fprogn (body=Python Exception <class 'gdb.error'>: value has been optimized out
) at ./src/eval.c:452
#59 0x0000555555760ba4 in Fif (args=XIL(0x7fffdca5ca03)) at ./src/eval.c:408
#60 0x000055555575ffef in eval_sub (form=Python Exception <class 'gdb.error'>: value has been optimized out
, form <at> entry=XIL(0x7fffdca5c303)) at ./src/eval.c:2560
#61 0x00005555557605e2 in Fprogn (body=Python Exception <class 'gdb.error'>: value has been optimized out
) at ./src/eval.c:452
#62 0x0000555555760914 in funcall_lambda (fun=fun <at> entry=XIL(0x7fffdc9de3f5), nargs=nargs <at> entry=1, arg_vector=arg_vector <at> entry=0x7fffffffc770) at ./src/eval.c:3361
#63 0x0000555555760b07 in funcall_general (fun=XIL(0x7fffdc9de3f5), numargs=numargs <at> entry=1, args=args <at> entry=0x7fffffffc770) at ./src/eval.c:3055
#64 0x000055555575db3b in Ffuncall (nargs=nargs <at> entry=2, args=args <at> entry=0x7fffffffc768) at ./src/eval.c:3104
#65 0x000055555575850c in Ffuncall_interactively (nargs=2, args=0x7fffffffc768) at ./src/callint.c:250
#66 0x000055555575f0c6 in funcall_subr (subr=0x5555559b67e0 <Sfuncall_interactively>, numargs=numargs <at> entry=2, args=args <at> entry=0x7fffffffc768) at ./src/eval.c:3195
#67 0x0000555555760af7 in funcall_general (fun=XIL(0x5555559b67e5), numargs=numargs <at> entry=2, args=args <at> entry=0x7fffffffc768) at ./src/eval.c:3051
#68 0x000055555575db3b in Ffuncall (nargs=nargs <at> entry=3, args=args <at> entry=0x7fffffffc760) at ./src/eval.c:3104
#69 0x000055555575a466 in Fcall_interactively (function=Python Exception <class 'gdb.error'>: value has been optimized out
, record_flag=Python Exception <class 'gdb.error'>: value has been optimized out
, keys=Python Exception <class 'gdb.error'>: value has been optimized out
) at ./src/callint.c:789
#70 0x000055555575ef7f in funcall_subr (subr=0x5555559b67a0 <Scall_interactively>, numargs=numargs <at> entry=3, args=args <at> entry=0x7fffe2200070) at ./src/eval.c:3176
#71 0x00005555557a0de0 in exec_byte_code (fun=Python Exception <class 'gdb.error'>: value has been optimized out
, fun <at> entry=XIL(0x7fffed66283d), args_template=<optimized out>, nargs=<optimized out>, nargs <at> entry=1, args=<optimized out>, args <at> entry=0x7fffffffcc08) at ./src/bytecode.c:827
#72 0x000055555576070e in funcall_lambda (fun=fun <at> entry=XIL(0x7fffed66283d), nargs=nargs <at> entry=1, arg_vector=arg_vector <at> entry=0x7fffffffcc08) at ./src/eval.c:3263
#73 0x0000555555760b07 in funcall_general (fun=XIL(0x7fffed66283d), numargs=numargs <at> entry=1, args=args <at> entry=0x7fffffffcc08) at ./src/eval.c:3055
#74 0x000055555575db3b in Ffuncall (nargs=nargs <at> entry=2, args=args <at> entry=0x7fffffffcc00) at ./src/eval.c:3104
#75 0x00005555556e3cac in command_loop_1 () at ./src/lisp.h:1184
#76 0x000055555575c6d8 in internal_condition_case (bfun=bfun <at> entry=0x5555556e382c <command_loop_1>, handlers=Python Exception <class 'gdb.error'>: value has been optimized out
, handlers <at> entry=XIL(0xa8), hfun=hfun <at> entry=0x5555556d6847 <cmd_error>) at ./src/eval.c:1623
#77 0x00005555556cdb82 in command_loop_2 (handlers=handlers <at> entry=XIL(0xa8)) at ./src/keyboard.c:1174
#78 0x000055555575c5ed in internal_catch (tag=Python Exception <class 'gdb.error'>: value has been optimized out
, tag <at> entry=XIL(0x15498), func=func <at> entry=0x5555556cdb60 <command_loop_2>, arg=Python Exception <class 'gdb.error'>: value has been optimized out
, arg <at> entry=XIL(0xa8)) at ./src/eval.c:1302
#79 0x00005555556cdb3d in command_loop () at ./src/lisp.h:1184
#80 0x00005555556d635e in recursive_edit_1 () at ./src/keyboard.c:760
#81 0x00005555556d66ff in Frecursive_edit () at ./src/keyboard.c:843
#82 0x00005555556cd517 in main (argc=5, argv=0x7fffffffcff8) at ./src/emacs.c:2580
++set $bt = backtrace_top ()
++if backtrace_p ($bt)
+++echo \n

+++echo Lisp Backtrace:\n
Lisp Backtrace:
+++xbacktrace
++++set $bt = backtrace_top ()
++++while backtrace_p ($bt)
+++++set $fun = backtrace_function ($bt)
+++++xgettype $fun
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $fun.i
++++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++++if $type == Lisp_Symbol
++++++xprintsym $fun
+++++++xsymname $fun
++++++++xgetsym $fun
+++++++++xgetptr $fun
++++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++++set $bugfix = $fun.i
++++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++++set $symname = $ptr->u.s.name
+++++++xgetptr $symname
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $symname.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++if $ptr != 0
++++++++set $sym_name = (struct Lisp_String *) $ptr
++++++++xprintstr $sym_name
+++++++++if (! $arg0)
++++++++++set $data = (char *) $sym_name->u.s.data
++++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++++if $strsize == 0
+++++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"delete-frame"++++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffaf10)
+++++set $bt = backtrace_next ($bt)
+++++set $fun = backtrace_function ($bt)
+++++xgettype $fun
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $fun.i
++++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++++if $type == Lisp_Symbol
++++++xprintsym $fun
+++++++xsymname $fun
++++++++xgetsym $fun
+++++++++xgetptr $fun
++++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++++set $bugfix = $fun.i
++++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++++set $symname = $ptr->u.s.name
+++++++xgetptr $symname
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $symname.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++if $ptr != 0
++++++++set $sym_name = (struct Lisp_String *) $ptr
++++++++xprintstr $sym_name
+++++++++if (! $arg0)
++++++++++set $data = (char *) $sym_name->u.s.data
++++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++++if $strsize == 0
+++++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"if"++++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffafe8)
+++++set $bt = backtrace_next ($bt)
+++++set $fun = backtrace_function ($bt)
+++++xgettype $fun
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $fun.i
++++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++++if $type == Lisp_Symbol
++++++xprintsym $fun
+++++++xsymname $fun
++++++++xgetsym $fun
+++++++++xgetptr $fun
++++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++++set $bugfix = $fun.i
++++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++++set $symname = $ptr->u.s.name
+++++++xgetptr $symname
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $symname.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++if $ptr != 0
++++++++set $sym_name = (struct Lisp_String *) $ptr
++++++++xprintstr $sym_name
+++++++++if (! $arg0)
++++++++++set $data = (char *) $sym_name->u.s.data
++++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++++if $strsize == 0
+++++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"progn"++++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffb0c8)
+++++set $bt = backtrace_next ($bt)
+++++set $fun = backtrace_function ($bt)
+++++xgettype $fun
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $fun.i
++++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++++if $type == Lisp_Symbol
++++++xprintsym $fun
+++++++xsymname $fun
++++++++xgetsym $fun
+++++++++xgetptr $fun
++++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++++set $bugfix = $fun.i
++++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++++set $symname = $ptr->u.s.name
+++++++xgetptr $symname
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $symname.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++if $ptr != 0
++++++++set $sym_name = (struct Lisp_String *) $ptr
++++++++xprintstr $sym_name
+++++++++if (! $arg0)
++++++++++set $data = (char *) $sym_name->u.s.data
++++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++++if $strsize == 0
+++++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"if"++++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffb1a8)
+++++set $bt = backtrace_next ($bt)
+++++set $fun = backtrace_function ($bt)
+++++xgettype $fun
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $fun.i
++++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++++if $type == Lisp_Symbol
++++++xprintsym $fun
+++++++xsymname $fun
++++++++xgetsym $fun
+++++++++xgetptr $fun
++++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++++set $bugfix = $fun.i
++++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++++set $symname = $ptr->u.s.name
+++++++xgetptr $symname
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $symname.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++if $ptr != 0
++++++++set $sym_name = (struct Lisp_String *) $ptr
++++++++xprintstr $sym_name
+++++++++if (! $arg0)
++++++++++set $data = (char *) $sym_name->u.s.data
++++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++++if $strsize == 0
+++++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"let*"++++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffb2f8)
+++++set $bt = backtrace_next ($bt)
+++++set $fun = backtrace_function ($bt)
+++++xgettype $fun
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $fun.i
++++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++++if $type == Lisp_Symbol
++++++xprintsym $fun
+++++++xsymname $fun
++++++++xgetsym $fun
+++++++++xgetptr $fun
++++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++++set $bugfix = $fun.i
++++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++++set $symname = $ptr->u.s.name
+++++++xgetptr $symname
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $symname.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++if $ptr != 0
++++++++set $sym_name = (struct Lisp_String *) $ptr
++++++++xprintstr $sym_name
+++++++++if (! $arg0)
++++++++++set $data = (char *) $sym_name->u.s.data
++++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++++if $strsize == 0
+++++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"progn"++++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffb3d8)
+++++set $bt = backtrace_next ($bt)
+++++set $fun = backtrace_function ($bt)
+++++xgettype $fun
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $fun.i
++++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++++if $type == Lisp_Symbol
++++++xprintsym $fun
+++++++xsymname $fun
++++++++xgetsym $fun
+++++++++xgetptr $fun
++++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++++set $bugfix = $fun.i
++++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++++set $symname = $ptr->u.s.name
+++++++xgetptr $symname
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $symname.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++if $ptr != 0
++++++++set $sym_name = (struct Lisp_String *) $ptr
++++++++xprintstr $sym_name
+++++++++if (! $arg0)
++++++++++set $data = (char *) $sym_name->u.s.data
++++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++++if $strsize == 0
+++++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"if"++++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffb4b8)
+++++set $bt = backtrace_next ($bt)
+++++set $fun = backtrace_function ($bt)
+++++xgettype $fun
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $fun.i
++++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++++if $type == Lisp_Symbol
++++++xprintsym $fun
+++++++xsymname $fun
++++++++xgetsym $fun
+++++++++xgetptr $fun
++++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++++set $bugfix = $fun.i
++++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++++set $symname = $ptr->u.s.name
+++++++xgetptr $symname
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $symname.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++if $ptr != 0
++++++++set $sym_name = (struct Lisp_String *) $ptr
++++++++xprintstr $sym_name
+++++++++if (! $arg0)
++++++++++set $data = (char *) $sym_name->u.s.data
++++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++++if $strsize == 0
+++++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"org-noter-kill-session"++++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffb5e0)
+++++set $bt = backtrace_next ($bt)
+++++set $fun = backtrace_function ($bt)
+++++xgettype $fun
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $fun.i
++++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++++if $type == Lisp_Symbol
++++++xprintsym $fun
+++++++xsymname $fun
++++++++xgetsym $fun
+++++++++xgetptr $fun
++++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++++set $bugfix = $fun.i
++++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++++set $symname = $ptr->u.s.name
+++++++xgetptr $symname
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $symname.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++if $ptr != 0
++++++++set $sym_name = (struct Lisp_String *) $ptr
++++++++xprintstr $sym_name
+++++++++if (! $arg0)
++++++++++set $data = (char *) $sym_name->u.s.data
++++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++++if $strsize == 0
+++++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"progn"++++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffb768)
+++++set $bt = backtrace_next ($bt)
+++++set $fun = backtrace_function ($bt)
+++++xgettype $fun
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $fun.i
++++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++++if $type == Lisp_Symbol
++++++xprintsym $fun
+++++++xsymname $fun
++++++++xgetsym $fun
+++++++++xgetptr $fun
++++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++++set $bugfix = $fun.i
++++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++++set $symname = $ptr->u.s.name
+++++++xgetptr $symname
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $symname.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++if $ptr != 0
++++++++set $sym_name = (struct Lisp_String *) $ptr
++++++++xprintstr $sym_name
+++++++++if (! $arg0)
++++++++++set $data = (char *) $sym_name->u.s.data
++++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++++if $strsize == 0
+++++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"if"++++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffb848)
+++++set $bt = backtrace_next ($bt)
+++++set $fun = backtrace_function ($bt)
+++++xgettype $fun
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $fun.i
++++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++++if $type == Lisp_Symbol
++++++xprintsym $fun
+++++++xsymname $fun
++++++++xgetsym $fun
+++++++++xgetptr $fun
++++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++++set $bugfix = $fun.i
++++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++++set $symname = $ptr->u.s.name
+++++++xgetptr $symname
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $symname.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++if $ptr != 0
++++++++set $sym_name = (struct Lisp_String *) $ptr
++++++++xprintstr $sym_name
+++++++++if (! $arg0)
++++++++++set $data = (char *) $sym_name->u.s.data
++++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++++if $strsize == 0
+++++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"let"++++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffb9b8)
+++++set $bt = backtrace_next ($bt)
+++++set $fun = backtrace_function ($bt)
+++++xgettype $fun
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $fun.i
++++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++++if $type == Lisp_Symbol
++++++xprintsym $fun
+++++++xsymname $fun
++++++++xgetsym $fun
+++++++++xgetptr $fun
++++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++++set $bugfix = $fun.i
++++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++++set $symname = $ptr->u.s.name
+++++++xgetptr $symname
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $symname.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++if $ptr != 0
++++++++set $sym_name = (struct Lisp_String *) $ptr
++++++++xprintstr $sym_name
+++++++++if (! $arg0)
++++++++++set $data = (char *) $sym_name->u.s.data
++++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++++if $strsize == 0
+++++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"progn"++++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffba98)
+++++set $bt = backtrace_next ($bt)
+++++set $fun = backtrace_function ($bt)
+++++xgettype $fun
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $fun.i
++++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++++if $type == Lisp_Symbol
++++++xprintsym $fun
+++++++xsymname $fun
++++++++xgetsym $fun
+++++++++xgetptr $fun
++++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++++set $bugfix = $fun.i
++++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++++set $symname = $ptr->u.s.name
+++++++xgetptr $symname
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $symname.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++if $ptr != 0
++++++++set $sym_name = (struct Lisp_String *) $ptr
++++++++xprintstr $sym_name
+++++++++if (! $arg0)
++++++++++set $data = (char *) $sym_name->u.s.data
++++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++++if $strsize == 0
+++++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"progn"++++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffbb78)
+++++set $bt = backtrace_next ($bt)
+++++set $fun = backtrace_function ($bt)
+++++xgettype $fun
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $fun.i
++++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++++if $type == Lisp_Symbol
++++++xprintsym $fun
+++++++xsymname $fun
++++++++xgetsym $fun
+++++++++xgetptr $fun
++++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++++set $bugfix = $fun.i
++++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++++set $symname = $ptr->u.s.name
+++++++xgetptr $symname
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $symname.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++if $ptr != 0
++++++++set $sym_name = (struct Lisp_String *) $ptr
++++++++xprintstr $sym_name
+++++++++if (! $arg0)
++++++++++set $data = (char *) $sym_name->u.s.data
++++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++++if $strsize == 0
+++++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"if"++++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffbc58)
+++++set $bt = backtrace_next ($bt)
+++++set $fun = backtrace_function ($bt)
+++++xgettype $fun
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $fun.i
++++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++++if $type == Lisp_Symbol
++++++xprintsym $fun
+++++++xsymname $fun
++++++++xgetsym $fun
+++++++++xgetptr $fun
++++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++++set $bugfix = $fun.i
++++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++++set $symname = $ptr->u.s.name
+++++++xgetptr $symname
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $symname.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++if $ptr != 0
++++++++set $sym_name = (struct Lisp_String *) $ptr
++++++++xprintstr $sym_name
+++++++++if (! $arg0)
++++++++++set $data = (char *) $sym_name->u.s.data
++++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++++if $strsize == 0
+++++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"let"++++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffbdb8)
+++++set $bt = backtrace_next ($bt)
+++++set $fun = backtrace_function ($bt)
+++++xgettype $fun
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $fun.i
++++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++++if $type == Lisp_Symbol
++++++xprintsym $fun
+++++++xsymname $fun
++++++++xgetsym $fun
+++++++++xgetptr $fun
++++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++++set $bugfix = $fun.i
++++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++++set $symname = $ptr->u.s.name
+++++++xgetptr $symname
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $symname.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++if $ptr != 0
++++++++set $sym_name = (struct Lisp_String *) $ptr
++++++++xprintstr $sym_name
+++++++++if (! $arg0)
++++++++++set $data = (char *) $sym_name->u.s.data
++++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++++if $strsize == 0
+++++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"org-noter--handle-kill-buffer"++++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffbfd0)
+++++set $bt = backtrace_next ($bt)
+++++set $fun = backtrace_function ($bt)
+++++xgettype $fun
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $fun.i
++++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++++if $type == Lisp_Symbol
++++++xprintsym $fun
+++++++xsymname $fun
++++++++xgetsym $fun
+++++++++xgetptr $fun
++++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++++set $bugfix = $fun.i
++++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++++set $symname = $ptr->u.s.name
+++++++xgetptr $symname
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $symname.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++if $ptr != 0
++++++++set $sym_name = (struct Lisp_String *) $ptr
++++++++xprintstr $sym_name
+++++++++if (! $arg0)
++++++++++set $data = (char *) $sym_name->u.s.data
++++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++++if $strsize == 0
+++++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"kill-buffer"++++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xe2200100)
+++++set $bt = backtrace_next ($bt)
+++++set $fun = backtrace_function ($bt)
+++++xgettype $fun
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $fun.i
++++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++++if $type == Lisp_Symbol
++++++xprintsym $fun
+++++++xsymname $fun
++++++++xgetsym $fun
+++++++++xgetptr $fun
++++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++++set $bugfix = $fun.i
++++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++++set $symname = $ptr->u.s.name
+++++++xgetptr $symname
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $symname.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++if $ptr != 0
++++++++set $sym_name = (struct Lisp_String *) $ptr
++++++++xprintstr $sym_name
+++++++++if (! $arg0)
++++++++++set $data = (char *) $sym_name->u.s.data
++++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++++if $strsize == 0
+++++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"kill-this-buffer"++++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffc2e0)
+++++set $bt = backtrace_next ($bt)
+++++set $fun = backtrace_function ($bt)
+++++xgettype $fun
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $fun.i
++++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++++if $type == Lisp_Symbol
++++++xprintsym $fun
+++++++xsymname $fun
++++++++xgetsym $fun
+++++++++xgetptr $fun
++++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++++set $bugfix = $fun.i
++++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++++set $symname = $ptr->u.s.name
+++++++xgetptr $symname
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $symname.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++if $ptr != 0
++++++++set $sym_name = (struct Lisp_String *) $ptr
++++++++xprintstr $sym_name
+++++++++if (! $arg0)
++++++++++set $data = (char *) $sym_name->u.s.data
++++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++++if $strsize == 0
+++++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"if"++++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffc488)
+++++set $bt = backtrace_next ($bt)
+++++set $fun = backtrace_function ($bt)
+++++xgettype $fun
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $fun.i
++++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++++if $type == Lisp_Symbol
++++++xprintsym $fun
+++++++xsymname $fun
++++++++xgetsym $fun
+++++++++xgetptr $fun
++++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++++set $bugfix = $fun.i
++++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++++set $symname = $ptr->u.s.name
+++++++xgetptr $symname
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $symname.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++if $ptr != 0
++++++++set $sym_name = (struct Lisp_String *) $ptr
++++++++xprintstr $sym_name
+++++++++if (! $arg0)
++++++++++set $data = (char *) $sym_name->u.s.data
++++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++++if $strsize == 0
+++++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"grfz-kill-a-buffer"++++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffc770)
+++++set $bt = backtrace_next ($bt)
+++++set $fun = backtrace_function ($bt)
+++++xgettype $fun
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $fun.i
++++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++++if $type == Lisp_Symbol
++++++xprintsym $fun
+++++++xsymname $fun
++++++++xgetsym $fun
+++++++++xgetptr $fun
++++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++++set $bugfix = $fun.i
++++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++++set $symname = $ptr->u.s.name
+++++++xgetptr $symname
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $symname.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++if $ptr != 0
++++++++set $sym_name = (struct Lisp_String *) $ptr
++++++++xprintstr $sym_name
+++++++++if (! $arg0)
++++++++++set $data = (char *) $sym_name->u.s.data
++++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++++if $strsize == 0
+++++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"funcall-interactively"++++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffc768)
+++++set $bt = backtrace_next ($bt)
+++++set $fun = backtrace_function ($bt)
+++++xgettype $fun
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $fun.i
++++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++++if $type == Lisp_Symbol
++++++xprintsym $fun
+++++++xsymname $fun
++++++++xgetsym $fun
+++++++++xgetptr $fun
++++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++++set $bugfix = $fun.i
++++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++++set $symname = $ptr->u.s.name
+++++++xgetptr $symname
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $symname.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++if $ptr != 0
++++++++set $sym_name = (struct Lisp_String *) $ptr
++++++++xprintstr $sym_name
+++++++++if (! $arg0)
++++++++++set $data = (char *) $sym_name->u.s.data
++++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++++if $strsize == 0
+++++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"call-interactively"++++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xe2200070)
+++++set $bt = backtrace_next ($bt)
+++++set $fun = backtrace_function ($bt)
+++++xgettype $fun
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $fun.i
++++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++++if $type == Lisp_Symbol
++++++xprintsym $fun
+++++++xsymname $fun
++++++++xgetsym $fun
+++++++++xgetptr $fun
++++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++++set $bugfix = $fun.i
++++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++++set $symname = $ptr->u.s.name
+++++++xgetptr $symname
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $symname.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++if $ptr != 0
++++++++set $sym_name = (struct Lisp_String *) $ptr
++++++++xprintstr $sym_name
+++++++++if (! $arg0)
++++++++++set $data = (char *) $sym_name->u.s.data
++++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++++if $strsize == 0
+++++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"command-execute"++++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffcc08)
+++++set $bt = backtrace_next ($bt)
+xbacktrace 
++set $bt = backtrace_top ()
++while backtrace_p ($bt)
+++set $fun = backtrace_function ($bt)
+++xgettype $fun
++++if (CHECK_LISP_OBJECT_TYPE)
+++++set $bugfix = $fun.i
++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++if $type == Lisp_Symbol
++++xprintsym $fun
+++++xsymname $fun
++++++xgetsym $fun
+++++++xgetptr $fun
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $fun.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++set $symname = $ptr->u.s.name
+++++xgetptr $symname
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $symname.i
++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++if $ptr != 0
++++++set $sym_name = (struct Lisp_String *) $ptr
++++++xprintstr $sym_name
+++++++if (! $arg0)
++++++++set $data = (char *) $sym_name->u.s.data
++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++if $strsize == 0
+++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"delete-frame"++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffaf10)
+++set $bt = backtrace_next ($bt)
+++set $fun = backtrace_function ($bt)
+++xgettype $fun
++++if (CHECK_LISP_OBJECT_TYPE)
+++++set $bugfix = $fun.i
++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++if $type == Lisp_Symbol
++++xprintsym $fun
+++++xsymname $fun
++++++xgetsym $fun
+++++++xgetptr $fun
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $fun.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++set $symname = $ptr->u.s.name
+++++xgetptr $symname
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $symname.i
++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++if $ptr != 0
++++++set $sym_name = (struct Lisp_String *) $ptr
++++++xprintstr $sym_name
+++++++if (! $arg0)
++++++++set $data = (char *) $sym_name->u.s.data
++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++if $strsize == 0
+++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"if"++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffafe8)
+++set $bt = backtrace_next ($bt)
+++set $fun = backtrace_function ($bt)
+++xgettype $fun
++++if (CHECK_LISP_OBJECT_TYPE)
+++++set $bugfix = $fun.i
++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++if $type == Lisp_Symbol
++++xprintsym $fun
+++++xsymname $fun
++++++xgetsym $fun
+++++++xgetptr $fun
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $fun.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++set $symname = $ptr->u.s.name
+++++xgetptr $symname
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $symname.i
++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++if $ptr != 0
++++++set $sym_name = (struct Lisp_String *) $ptr
++++++xprintstr $sym_name
+++++++if (! $arg0)
++++++++set $data = (char *) $sym_name->u.s.data
++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++if $strsize == 0
+++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"progn"++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffb0c8)
+++set $bt = backtrace_next ($bt)
+++set $fun = backtrace_function ($bt)
+++xgettype $fun
++++if (CHECK_LISP_OBJECT_TYPE)
+++++set $bugfix = $fun.i
++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++if $type == Lisp_Symbol
++++xprintsym $fun
+++++xsymname $fun
++++++xgetsym $fun
+++++++xgetptr $fun
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $fun.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++set $symname = $ptr->u.s.name
+++++xgetptr $symname
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $symname.i
++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++if $ptr != 0
++++++set $sym_name = (struct Lisp_String *) $ptr
++++++xprintstr $sym_name
+++++++if (! $arg0)
++++++++set $data = (char *) $sym_name->u.s.data
++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++if $strsize == 0
+++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"if"++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffb1a8)
+++set $bt = backtrace_next ($bt)
+++set $fun = backtrace_function ($bt)
+++xgettype $fun
++++if (CHECK_LISP_OBJECT_TYPE)
+++++set $bugfix = $fun.i
++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++if $type == Lisp_Symbol
++++xprintsym $fun
+++++xsymname $fun
++++++xgetsym $fun
+++++++xgetptr $fun
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $fun.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++set $symname = $ptr->u.s.name
+++++xgetptr $symname
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $symname.i
++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++if $ptr != 0
++++++set $sym_name = (struct Lisp_String *) $ptr
++++++xprintstr $sym_name
+++++++if (! $arg0)
++++++++set $data = (char *) $sym_name->u.s.data
++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++if $strsize == 0
+++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"let*"++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffb2f8)
+++set $bt = backtrace_next ($bt)
+++set $fun = backtrace_function ($bt)
+++xgettype $fun
++++if (CHECK_LISP_OBJECT_TYPE)
+++++set $bugfix = $fun.i
++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++if $type == Lisp_Symbol
++++xprintsym $fun
+++++xsymname $fun
++++++xgetsym $fun
+++++++xgetptr $fun
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $fun.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++set $symname = $ptr->u.s.name
+++++xgetptr $symname
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $symname.i
++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++if $ptr != 0
++++++set $sym_name = (struct Lisp_String *) $ptr
++++++xprintstr $sym_name
+++++++if (! $arg0)
++++++++set $data = (char *) $sym_name->u.s.data
++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++if $strsize == 0
+++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"progn"++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffb3d8)
+++set $bt = backtrace_next ($bt)
+++set $fun = backtrace_function ($bt)
+++xgettype $fun
++++if (CHECK_LISP_OBJECT_TYPE)
+++++set $bugfix = $fun.i
++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++if $type == Lisp_Symbol
++++xprintsym $fun
+++++xsymname $fun
++++++xgetsym $fun
+++++++xgetptr $fun
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $fun.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++set $symname = $ptr->u.s.name
+++++xgetptr $symname
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $symname.i
++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++if $ptr != 0
++++++set $sym_name = (struct Lisp_String *) $ptr
++++++xprintstr $sym_name
+++++++if (! $arg0)
++++++++set $data = (char *) $sym_name->u.s.data
++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++if $strsize == 0
+++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"if"++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffb4b8)
+++set $bt = backtrace_next ($bt)
+++set $fun = backtrace_function ($bt)
+++xgettype $fun
++++if (CHECK_LISP_OBJECT_TYPE)
+++++set $bugfix = $fun.i
++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++if $type == Lisp_Symbol
++++xprintsym $fun
+++++xsymname $fun
++++++xgetsym $fun
+++++++xgetptr $fun
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $fun.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++set $symname = $ptr->u.s.name
+++++xgetptr $symname
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $symname.i
++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++if $ptr != 0
++++++set $sym_name = (struct Lisp_String *) $ptr
++++++xprintstr $sym_name
+++++++if (! $arg0)
++++++++set $data = (char *) $sym_name->u.s.data
++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++if $strsize == 0
+++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"org-noter-kill-session"++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffb5e0)
+++set $bt = backtrace_next ($bt)
+++set $fun = backtrace_function ($bt)
+++xgettype $fun
++++if (CHECK_LISP_OBJECT_TYPE)
+++++set $bugfix = $fun.i
++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++if $type == Lisp_Symbol
++++xprintsym $fun
+++++xsymname $fun
++++++xgetsym $fun
+++++++xgetptr $fun
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $fun.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++set $symname = $ptr->u.s.name
+++++xgetptr $symname
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $symname.i
++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++if $ptr != 0
++++++set $sym_name = (struct Lisp_String *) $ptr
++++++xprintstr $sym_name
+++++++if (! $arg0)
++++++++set $data = (char *) $sym_name->u.s.data
++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++if $strsize == 0
+++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"progn"++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffb768)
+++set $bt = backtrace_next ($bt)
+++set $fun = backtrace_function ($bt)
+++xgettype $fun
++++if (CHECK_LISP_OBJECT_TYPE)
+++++set $bugfix = $fun.i
++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++if $type == Lisp_Symbol
++++xprintsym $fun
+++++xsymname $fun
++++++xgetsym $fun
+++++++xgetptr $fun
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $fun.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++set $symname = $ptr->u.s.name
+++++xgetptr $symname
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $symname.i
++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++if $ptr != 0
++++++set $sym_name = (struct Lisp_String *) $ptr
++++++xprintstr $sym_name
+++++++if (! $arg0)
++++++++set $data = (char *) $sym_name->u.s.data
++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++if $strsize == 0
+++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"if"++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffb848)
+++set $bt = backtrace_next ($bt)
+++set $fun = backtrace_function ($bt)
+++xgettype $fun
++++if (CHECK_LISP_OBJECT_TYPE)
+++++set $bugfix = $fun.i
++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++if $type == Lisp_Symbol
++++xprintsym $fun
+++++xsymname $fun
++++++xgetsym $fun
+++++++xgetptr $fun
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $fun.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++set $symname = $ptr->u.s.name
+++++xgetptr $symname
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $symname.i
++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++if $ptr != 0
++++++set $sym_name = (struct Lisp_String *) $ptr
++++++xprintstr $sym_name
+++++++if (! $arg0)
++++++++set $data = (char *) $sym_name->u.s.data
++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++if $strsize == 0
+++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"let"++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffb9b8)
+++set $bt = backtrace_next ($bt)
+++set $fun = backtrace_function ($bt)
+++xgettype $fun
++++if (CHECK_LISP_OBJECT_TYPE)
+++++set $bugfix = $fun.i
++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++if $type == Lisp_Symbol
++++xprintsym $fun
+++++xsymname $fun
++++++xgetsym $fun
+++++++xgetptr $fun
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $fun.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++set $symname = $ptr->u.s.name
+++++xgetptr $symname
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $symname.i
++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++if $ptr != 0
++++++set $sym_name = (struct Lisp_String *) $ptr
++++++xprintstr $sym_name
+++++++if (! $arg0)
++++++++set $data = (char *) $sym_name->u.s.data
++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++if $strsize == 0
+++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"progn"++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffba98)
+++set $bt = backtrace_next ($bt)
+++set $fun = backtrace_function ($bt)
+++xgettype $fun
++++if (CHECK_LISP_OBJECT_TYPE)
+++++set $bugfix = $fun.i
++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++if $type == Lisp_Symbol
++++xprintsym $fun
+++++xsymname $fun
++++++xgetsym $fun
+++++++xgetptr $fun
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $fun.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++set $symname = $ptr->u.s.name
+++++xgetptr $symname
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $symname.i
++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++if $ptr != 0
++++++set $sym_name = (struct Lisp_String *) $ptr
++++++xprintstr $sym_name
+++++++if (! $arg0)
++++++++set $data = (char *) $sym_name->u.s.data
++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++if $strsize == 0
+++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"progn"++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffbb78)
+++set $bt = backtrace_next ($bt)
+++set $fun = backtrace_function ($bt)
+++xgettype $fun
++++if (CHECK_LISP_OBJECT_TYPE)
+++++set $bugfix = $fun.i
++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++if $type == Lisp_Symbol
++++xprintsym $fun
+++++xsymname $fun
++++++xgetsym $fun
+++++++xgetptr $fun
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $fun.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++set $symname = $ptr->u.s.name
+++++xgetptr $symname
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $symname.i
++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++if $ptr != 0
++++++set $sym_name = (struct Lisp_String *) $ptr
++++++xprintstr $sym_name
+++++++if (! $arg0)
++++++++set $data = (char *) $sym_name->u.s.data
++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++if $strsize == 0
+++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"if"++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffbc58)
+++set $bt = backtrace_next ($bt)
+++set $fun = backtrace_function ($bt)
+++xgettype $fun
++++if (CHECK_LISP_OBJECT_TYPE)
+++++set $bugfix = $fun.i
++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++if $type == Lisp_Symbol
++++xprintsym $fun
+++++xsymname $fun
++++++xgetsym $fun
+++++++xgetptr $fun
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $fun.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++set $symname = $ptr->u.s.name
+++++xgetptr $symname
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $symname.i
++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++if $ptr != 0
++++++set $sym_name = (struct Lisp_String *) $ptr
++++++xprintstr $sym_name
+++++++if (! $arg0)
++++++++set $data = (char *) $sym_name->u.s.data
++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++if $strsize == 0
+++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"let"++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffbdb8)
+++set $bt = backtrace_next ($bt)
+++set $fun = backtrace_function ($bt)
+++xgettype $fun
++++if (CHECK_LISP_OBJECT_TYPE)
+++++set $bugfix = $fun.i
++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++if $type == Lisp_Symbol
++++xprintsym $fun
+++++xsymname $fun
++++++xgetsym $fun
+++++++xgetptr $fun
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $fun.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++set $symname = $ptr->u.s.name
+++++xgetptr $symname
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $symname.i
++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++if $ptr != 0
++++++set $sym_name = (struct Lisp_String *) $ptr
++++++xprintstr $sym_name
+++++++if (! $arg0)
++++++++set $data = (char *) $sym_name->u.s.data
++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++if $strsize == 0
+++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"org-noter--handle-kill-buffer"++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffbfd0)
+++set $bt = backtrace_next ($bt)
+++set $fun = backtrace_function ($bt)
+++xgettype $fun
++++if (CHECK_LISP_OBJECT_TYPE)
+++++set $bugfix = $fun.i
++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++if $type == Lisp_Symbol
++++xprintsym $fun
+++++xsymname $fun
++++++xgetsym $fun
+++++++xgetptr $fun
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $fun.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++set $symname = $ptr->u.s.name
+++++xgetptr $symname
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $symname.i
++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++if $ptr != 0
++++++set $sym_name = (struct Lisp_String *) $ptr
++++++xprintstr $sym_name
+++++++if (! $arg0)
++++++++set $data = (char *) $sym_name->u.s.data
++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++if $strsize == 0
+++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"kill-buffer"++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xe2200100)
+++set $bt = backtrace_next ($bt)
+++set $fun = backtrace_function ($bt)
+++xgettype $fun
++++if (CHECK_LISP_OBJECT_TYPE)
+++++set $bugfix = $fun.i
++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++if $type == Lisp_Symbol
++++xprintsym $fun
+++++xsymname $fun
++++++xgetsym $fun
+++++++xgetptr $fun
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $fun.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++set $symname = $ptr->u.s.name
+++++xgetptr $symname
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $symname.i
++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++if $ptr != 0
++++++set $sym_name = (struct Lisp_String *) $ptr
++++++xprintstr $sym_name
+++++++if (! $arg0)
++++++++set $data = (char *) $sym_name->u.s.data
++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++if $strsize == 0
+++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"kill-this-buffer"++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffc2e0)
+++set $bt = backtrace_next ($bt)
+++set $fun = backtrace_function ($bt)
+++xgettype $fun
++++if (CHECK_LISP_OBJECT_TYPE)
+++++set $bugfix = $fun.i
++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++if $type == Lisp_Symbol
++++xprintsym $fun
+++++xsymname $fun
++++++xgetsym $fun
+++++++xgetptr $fun
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $fun.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++set $symname = $ptr->u.s.name
+++++xgetptr $symname
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $symname.i
++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++if $ptr != 0
++++++set $sym_name = (struct Lisp_String *) $ptr
++++++xprintstr $sym_name
+++++++if (! $arg0)
++++++++set $data = (char *) $sym_name->u.s.data
++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++if $strsize == 0
+++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"if"++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffc488)
+++set $bt = backtrace_next ($bt)
+++set $fun = backtrace_function ($bt)
+++xgettype $fun
++++if (CHECK_LISP_OBJECT_TYPE)
+++++set $bugfix = $fun.i
++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++if $type == Lisp_Symbol
++++xprintsym $fun
+++++xsymname $fun
++++++xgetsym $fun
+++++++xgetptr $fun
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $fun.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++set $symname = $ptr->u.s.name
+++++xgetptr $symname
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $symname.i
++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++if $ptr != 0
++++++set $sym_name = (struct Lisp_String *) $ptr
++++++xprintstr $sym_name
+++++++if (! $arg0)
++++++++set $data = (char *) $sym_name->u.s.data
++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++if $strsize == 0
+++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"grfz-kill-a-buffer"++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffc770)
+++set $bt = backtrace_next ($bt)
+++set $fun = backtrace_function ($bt)
+++xgettype $fun
++++if (CHECK_LISP_OBJECT_TYPE)
+++++set $bugfix = $fun.i
++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++if $type == Lisp_Symbol
++++xprintsym $fun
+++++xsymname $fun
++++++xgetsym $fun
+++++++xgetptr $fun
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $fun.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++set $symname = $ptr->u.s.name
+++++xgetptr $symname
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $symname.i
++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++if $ptr != 0
++++++set $sym_name = (struct Lisp_String *) $ptr
++++++xprintstr $sym_name
+++++++if (! $arg0)
++++++++set $data = (char *) $sym_name->u.s.data
++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++if $strsize == 0
+++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"funcall-interactively"++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffc768)
+++set $bt = backtrace_next ($bt)
+++set $fun = backtrace_function ($bt)
+++xgettype $fun
++++if (CHECK_LISP_OBJECT_TYPE)
+++++set $bugfix = $fun.i
++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++if $type == Lisp_Symbol
++++xprintsym $fun
+++++xsymname $fun
++++++xgetsym $fun
+++++++xgetptr $fun
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $fun.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++set $symname = $ptr->u.s.name
+++++xgetptr $symname
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $symname.i
++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++if $ptr != 0
++++++set $sym_name = (struct Lisp_String *) $ptr
++++++xprintstr $sym_name
+++++++if (! $arg0)
++++++++set $data = (char *) $sym_name->u.s.data
++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++if $strsize == 0
+++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"call-interactively"++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xe2200070)
+++set $bt = backtrace_next ($bt)
+++set $fun = backtrace_function ($bt)
+++xgettype $fun
++++if (CHECK_LISP_OBJECT_TYPE)
+++++set $bugfix = $fun.i
++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++if $type == Lisp_Symbol
++++xprintsym $fun
+++++xsymname $fun
++++++xgetsym $fun
+++++++xgetptr $fun
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $fun.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++set $symname = $ptr->u.s.name
+++++xgetptr $symname
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $symname.i
++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++if $ptr != 0
++++++set $sym_name = (struct Lisp_String *) $ptr
++++++xprintstr $sym_name
+++++++if (! $arg0)
++++++++set $data = (char *) $sym_name->u.s.data
++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++if $strsize == 0
+++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"command-execute"++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffcc08)
+++set $bt = backtrace_next ($bt)
+bt full
#0  terminate_due_to_signal (sig=sig <at> entry=6, backtrace_limit=backtrace_limit <at> entry=2147483647) at ./src/emacs.c:425
#1  0x00005555557d9a62 in set_state (state=state <at> entry=IGC_STATE_DEAD) at ./src/igc.c:1017
        old_state = <optimized out>
#2  0x00005555557d9a96 in igc_assert_fail (file=file <at> entry=0x555555903e97 "igc.c", line=line <at> entry=3020, msg=msg <at> entry=0x5555558f2277 "r == NULL") at ./src/igc.c:306
#3  0x00005555557da4e4 in igc_check_freeable (start=start <at> entry=0x555555b2b8f0) at ./src/igc.c:3020
        r = <optimized out>
#4  0x0000555555736d12 in xfree (block=block <at> entry=0x555555b2b8f0) at ./src/alloc.c:760
#5  0x00005555556889f0 in x_delete_display (dpyinfo=dpyinfo <at> entry=0x555555b2b8f0) at ./src/xterm.c:31925
        t = <optimized out>
        color_entry = <optimized out>
        next_color_entry = <optimized out>
        i = 256
        ie = <optimized out>
        last = <optimized out>
        temp = <optimized out>
#6  0x000055555569385e in x_delete_terminal (terminal=0x7fffd549a0c0) at ./src/xterm.c:32154
        dpyinfo = 0x555555b2b8f0
        f = <optimized out>
        frame = XIL(0x7fffed64d525)
#7  0x000055555567099a in Fdelete_terminal (terminal=terminal <at> entry=XIL(0x7fffd549a0c5), force=XIL(0x38)) at ./src/terminal.c:428
        t = 0x7fffd549a0c0
#8  0x00005555555b492a in delete_frame (frame=frame <at> entry=XIL(0x7fffd5771d1d), force=XIL(0)) at ./src/frame.c:2670
        tmp = XIL(0x7fffd549a0c5)
        terminal = <optimized out>
        f = 0x7fffd5771d18
        sf = <optimized out>
        kb = 0x0
        frame1 = XIL(0x7fffed64d525)
        is_tooltip_frame = 0
        nochild = true
        minibuffer_child_frame = Python Exception <class 'gdb.error'>: value has been optimized out

#9  0x00005555555b4e00 in Fdelete_frame (frame=XIL(0x7fffd5771d1d), force=Python Exception <class 'gdb.error'>: value has been optimized out
) at ./src/frame.c:2839
#10 0x000055555576022a in eval_sub (form=Python Exception <class 'gdb.error'>: value has been optimized out
) at ./src/eval.c:2612
        i = 2
        maxargs = 2
        args_left = XIL(0)
        numargs = 1
        original_fun = Python Exception <class 'gdb.error'>: value has been optimized out

        original_args = XIL(0x7fffbb7a3463)
        count = {
          bytes = 1120
        }
        fun = XIL(0x5555559a8b65)
        val = Python Exception <class 'gdb.error'>: value has been optimized out

        funcar = Python Exception <class 'gdb.error'>: value has been optimized out

        argvals = {XIL(0x7fffd5771d1d), XIL(0), XIL(0x1), XIL(0x7fffffffb0c8), make_fixnum(16383), XIL(0), XIL(0x7fffffffaf50), make_fixnum(23456248591394)}
#11 0x0000555555760bc3 in Fif (args=XIL(0x7fffbb79b6ab)) at ./src/eval.c:407
#12 0x000055555575ffef in eval_sub (form=Python Exception <class 'gdb.error'>: value has been optimized out
, form <at> entry=XIL(0x7fffbb79996b)) at ./src/eval.c:2560
        args_left = XIL(0x7fffbb79b6ab)
        numargs = 3
        original_fun = XIL(0xc7f0)
        original_args = XIL(0x7fffbb79b6ab)
        count = {
          bytes = <optimized out>
        }
        fun = XIL(0x5555559b7425)
        val = Python Exception <class 'gdb.error'>: value has been optimized out

        funcar = Python Exception <class 'gdb.error'>: value has been optimized out

        argvals = {XIL(0x7fffffffb070), XIL(0x5555557e2a19), XIL(0), XIL(0x369475a905028a00), XIL(0x7fffffffb000), XIL(0x5555559b6be5), XIL(0x420), XIL(0x2aaa97c1cb30)}
#13 0x00005555557605e2 in Fprogn (body=Python Exception <class 'gdb.error'>: value has been optimized out
) at ./src/eval.c:452
#14 0x000055555575ffef in eval_sub (form=Python Exception <class 'gdb.error'>: value has been optimized out
) at ./src/eval.c:2560
        args_left = XIL(0x7fffbb795beb)
        numargs = 1
        original_fun = XIL(0x12018)
        original_args = XIL(0x7fffbb795beb)
        count = {
          bytes = <optimized out>
        }
        fun = XIL(0x5555559b73a5)
        val = Python Exception <class 'gdb.error'>: value has been optimized out

        funcar = Python Exception <class 'gdb.error'>: value has been optimized out

        argvals = {XIL(0x7fffd5771d1d), XIL(0x369475a905028a00), XIL(0x7fffffffb0f0), XIL(0x7fffbba862d8), XIL(0x7fffffffb170), XIL(0x5555556fbba8), XIL(0x1), XIL(0x5555556fbc68)}
#15 0x0000555555760bc3 in Fif (args=XIL(0x7fffbb7901f3)) at ./src/eval.c:407
#16 0x000055555575ffef in eval_sub (form=Python Exception <class 'gdb.error'>: value has been optimized out
, form <at> entry=XIL(0x7fffbb77c5bb)) at ./src/eval.c:2560
        args_left = XIL(0x7fffbb7901f3)
        numargs = 2
        original_fun = XIL(0xc7f0)
        original_args = XIL(0x7fffbb7901f3)
        count = {
          bytes = <optimized out>
        }
        fun = XIL(0x5555559b7425)
        val = Python Exception <class 'gdb.error'>: value has been optimized out

        funcar = Python Exception <class 'gdb.error'>: value has been optimized out

        argvals = {XIL(0x7fffbba862dd), XIL(0x7fffabd4c8a3), XIL(0x7fffffffb200), XIL(0x5555557d9e08), XIL(0x7fffabe9ec60), XIL(0x369475a905028a00), XIL(0x555555e075f0), XIL(0x3)}
#17 0x00005555557605e2 in Fprogn (body=Python Exception <class 'gdb.error'>: value has been optimized out
) at ./src/eval.c:452
#18 0x00005555557617f5 in FletX (args=XIL(0x7fffbb767a1b)) at ./src/eval.c:1051
        var = XIL(0x2aaa65d088e8)
        val = XIL(0x7fffbba862dd)
        elt = Python Exception <class 'gdb.error'>: value has been optimized out

        lexenv = XIL(0x7fffabd4c8a3)
        varlist = XIL(0)
#19 0x000055555575ffef in eval_sub (form=Python Exception <class 'gdb.error'>: value has been optimized out
, form <at> entry=XIL(0x7fffbb7662fb)) at ./src/eval.c:2560
        args_left = XIL(0x7fffbb767a1b)
        numargs = 9
        original_fun = XIL(0xe2a0)
        original_args = XIL(0x7fffbb767a1b)
        count = {
          bytes = <optimized out>
        }
        fun = XIL(0x5555559b6fe5)
        val = Python Exception <class 'gdb.error'>: value has been optimized out

        funcar = Python Exception <class 'gdb.error'>: value has been optimized out

        argvals = {XIL(0x7fffbbbf624d), XIL(0x7fffbb7589cb), XIL(0x1), make_fixnum(23456248566315), make_fixnum(0), XIL(0x5555559a1f60), XIL(0x7fffffffb380), XIL(0x55555574a0d0)}
#20 0x00005555557605e2 in Fprogn (body=Python Exception <class 'gdb.error'>: value has been optimized out
) at ./src/eval.c:452
#21 0x000055555575ffef in eval_sub (form=Python Exception <class 'gdb.error'>: value has been optimized out
) at ./src/eval.c:2560
        args_left = XIL(0x7fffbb76232b)
        numargs = 3
        original_fun = XIL(0x12018)
        original_args = XIL(0x7fffbb76232b)
        count = {
          bytes = <optimized out>
        }
        fun = XIL(0x5555559b73a5)
        val = Python Exception <class 'gdb.error'>: value has been optimized out

        funcar = Python Exception <class 'gdb.error'>: value has been optimized out

        argvals = {XIL(0xd2a8), XIL(0x7fffffffb460), make_fixnum(0), XIL(0x7fffabd4c7b3), XIL(0x7fffbba855a5), XIL(0x7fffbb783dc3), XIL(0x7fffffffb450), XIL(0x55555575befd)}
#22 0x0000555555760bc3 in Fif (args=XIL(0x7fffbb75e76b)) at ./src/eval.c:407
#23 0x000055555575ffef in eval_sub (form=Python Exception <class 'gdb.error'>: value has been optimized out
, form <at> entry=XIL(0x7fffbb75d12b)) at ./src/eval.c:2560
        args_left = XIL(0x7fffbb75e76b)
        numargs = 2
        original_fun = XIL(0xc7f0)
        original_args = XIL(0x7fffbb75e76b)
        count = {
          bytes = <optimized out>
        }
        fun = XIL(0x5555559b7425)
        val = Python Exception <class 'gdb.error'>: value has been optimized out

        funcar = Python Exception <class 'gdb.error'>: value has been optimized out

        argvals = {XIL(0x3), XIL(0x100000001), XIL(0x7fffffffb510), XIL(0x7fffabd4c8a3), XIL(0x555555e07570), XIL(0x1), XIL(0x555555e07570), XIL(0x1)}
#24 0x00005555557605e2 in Fprogn (body=Python Exception <class 'gdb.error'>: value has been optimized out
) at ./src/eval.c:452
#25 0x0000555555760914 in funcall_lambda (fun=fun <at> entry=XIL(0x7fffbb756a7d), nargs=nargs <at> entry=1, arg_vector=arg_vector <at> entry=0x7fffffffb5e0) at ./src/eval.c:3361
        syms_left = Python Exception <class 'gdb.error'>: value has been optimized out

        lexenv = Python Exception <class 'gdb.error'>: value has been optimized out

        i = 1
        optional = true
        rest = false
        previous_rest = false
#26 0x0000555555761136 in apply_lambda (fun=Python Exception <class 'gdb.error'>: value has been optimized out
, fun <at> entry=XIL(0x7fffbb756a7d), args=Python Exception <class 'gdb.error'>: value has been optimized out
, count=count <at> entry=...) at ./src/eval.c:3226
        arg_vector = 0x7fffffffb5e0
        tem = XIL(0x2aaa97fcc5e8)
        sa_avail = <optimized out>
        numargs = 1
        args_left = Python Exception <class 'gdb.error'>: value has been optimized out

#27 0x000055555576034e in eval_sub (form=Python Exception <class 'gdb.error'>: value has been optimized out
, form <at> entry=XIL(0x7fffbb781583)) at ./src/eval.c:2656
        original_fun = XIL(0x2aaa65d1f748)
        original_args = XIL(0x7fffbb781b5b)
        count = {
          bytes = 832
        }
        fun = XIL(0x7fffbb756a7d)
        val = Python Exception <class 'gdb.error'>: value has been optimized out

        funcar = XIL(0x7fffbb780ef3)
        argvals = {XIL(0x7fffbba855a5), XIL(0x7fffbba855a5), XIL(0x7fffbb78321b), XIL(0x2bb78270b), make_fixnum(0), XIL(0x5555559a1f60), XIL(0xd2a8), XIL(0x7fffabd4c5d3)}
#28 0x00005555557605e2 in Fprogn (body=Python Exception <class 'gdb.error'>: value has been optimized out
) at ./src/eval.c:452
#29 0x000055555575ffef in eval_sub (form=Python Exception <class 'gdb.error'>: value has been optimized out
) at ./src/eval.c:2560
        args_left = XIL(0x7fffbb780ef3)
        numargs = 1
        original_fun = XIL(0x12018)
        original_args = XIL(0x7fffbb780ef3)
        count = {
          bytes = <optimized out>
        }
        fun = XIL(0x5555559b73a5)
        val = Python Exception <class 'gdb.error'>: value has been optimized out

        funcar = Python Exception <class 'gdb.error'>: value has been optimized out

        argvals = {XIL(0xc), XIL(0xd2a8), XIL(0x7fffabd4c5d3), XIL(0x7fffbba855a5), XIL(0x7fffabd4c5d3), XIL(0x369475a905028a00), XIL(0x7fffffffb7c0), XIL(0x2aaa97c585c8)}
#30 0x0000555555760bc3 in Fif (args=XIL(0x7fffbb77fe6b)) at ./src/eval.c:407
#31 0x000055555575ffef in eval_sub (form=Python Exception <class 'gdb.error'>: value has been optimized out
, form <at> entry=XIL(0x7fffbb77f943)) at ./src/eval.c:2560
        args_left = XIL(0x7fffbb77fe6b)
        numargs = 2
        original_fun = XIL(0xc7f0)
        original_args = XIL(0x7fffbb77fe6b)
        count = {
          bytes = <optimized out>
        }
        fun = XIL(0x5555559b7425)
        val = Python Exception <class 'gdb.error'>: value has been optimized out

        funcar = Python Exception <class 'gdb.error'>: value has been optimized out

        argvals = {XIL(0x3), make_fixnum(1073741824), XIL(0x7fffffffb8a0), XIL(0x7fffabd4c873), XIL(0x555555e074f0), XIL(0x1), XIL(0x555555e074f0), XIL(0x7fffffffb900)}
#32 0x00005555557605e2 in Fprogn (body=Python Exception <class 'gdb.error'>: value has been optimized out
) at ./src/eval.c:452
#33 0x0000555555761542 in Flet (args=Python Exception <class 'gdb.error'>: value has been optimized out
) at ./src/eval.c:1118
        temps = 0x7fffffffb900
        tem = Python Exception <class 'gdb.error'>: value has been optimized out

        lexenv = Python Exception <class 'gdb.error'>: value has been optimized out

        elt = XIL(0x2aaa65d088e8)
        argnum = 3
        sa_avail = <optimized out>
        varlist = Python Exception <class 'gdb.error'>: value has been optimized out

        varlist_len = <optimized out>
        nvars = 3
#34 0x000055555575ffef in eval_sub (form=Python Exception <class 'gdb.error'>: value has been optimized out
, form <at> entry=XIL(0x7fffbb77e803)) at ./src/eval.c:2560
        args_left = XIL(0x7fffbb77ed3b)
        numargs = 2
        original_fun = XIL(0xe268)
        original_args = XIL(0x7fffbb77ed3b)
        count = {
          bytes = <optimized out>
        }
        fun = XIL(0x5555559b6fa5)
        val = Python Exception <class 'gdb.error'>: value has been optimized out

        funcar = Python Exception <class 'gdb.error'>: value has been optimized out

        argvals = {XIL(0x7fffffffba00), XIL(0x2a0), XIL(0x38), XIL(0), XIL(0x1), XIL(0x1), XIL(0x7fffffffba50), XIL(0x55555575d835)}
#35 0x00005555557605e2 in Fprogn (body=Python Exception <class 'gdb.error'>: value has been optimized out
) at ./src/eval.c:452
#36 0x000055555575ffef in eval_sub (form=Python Exception <class 'gdb.error'>: value has been optimized out
, form <at> entry=XIL(0x7fffbb77bf2b)) at ./src/eval.c:2560
        args_left = XIL(0x7fffbb77e353)
        numargs = 1
        original_fun = XIL(0x12018)
        original_args = XIL(0x7fffbb77e353)
        count = {
          bytes = <optimized out>
        }
        fun = XIL(0x5555559b73a5)
        val = Python Exception <class 'gdb.error'>: value has been optimized out

        funcar = Python Exception <class 'gdb.error'>: value has been optimized out

        argvals = {XIL(0x2aaa97fcc5e8), XIL(0x1), XIL(0x1), XIL(0x555555e07490), XIL(0x7fffffffbb40), XIL(0x55555576116b), XIL(0x7fffbbbf624d), XIL(0x55555576107d)}
#37 0x00005555557605e2 in Fprogn (body=Python Exception <class 'gdb.error'>: value has been optimized out
) at ./src/eval.c:452
#38 0x000055555575ffef in eval_sub (form=Python Exception <class 'gdb.error'>: value has been optimized out
) at ./src/eval.c:2560
        args_left = XIL(0x7fffbb777bbb)
        numargs = 1
        original_fun = XIL(0x12018)
        original_args = XIL(0x7fffbb777bbb)
        count = {
          bytes = <optimized out>
        }
        fun = XIL(0x5555559b73a5)
        val = Python Exception <class 'gdb.error'>: value has been optimized out

        funcar = Python Exception <class 'gdb.error'>: value has been optimized out

        argvals = {XIL(0), XIL(0), XIL(0), XIL(0x7fffbb721963), XIL(0x2aaa6607ddc8), XIL(0x7fffbbab36e8), XIL(0x7fffffffbbd0), XIL(0x55555576d6ff)}
#39 0x0000555555760bc3 in Fif (args=XIL(0x7fffbb771c4b)) at ./src/eval.c:407
#40 0x000055555575ffef in eval_sub (form=Python Exception <class 'gdb.error'>: value has been optimized out
, form <at> entry=XIL(0x7fffbb76ff53)) at ./src/eval.c:2560
        args_left = XIL(0x7fffbb771c4b)
        numargs = 2
        original_fun = XIL(0xc7f0)
        original_args = XIL(0x7fffbb771c4b)
        count = {
          bytes = <optimized out>
        }
        fun = XIL(0x5555559b7425)
        val = Python Exception <class 'gdb.error'>: value has been optimized out

        funcar = Python Exception <class 'gdb.error'>: value has been optimized out

        argvals = {XIL(0x3), XIL(0x100000000), XIL(0x7fffffffbcb0), XIL(0x7fffabd4c5d3), XIL(0x555555e07450), XIL(0x1), XIL(0x555555e07450), XIL(0x7fffffffbd10)}
#41 0x00005555557605e2 in Fprogn (body=Python Exception <class 'gdb.error'>: value has been optimized out
) at ./src/eval.c:452
#42 0x0000555555761542 in Flet (args=Python Exception <class 'gdb.error'>: value has been optimized out
) at ./src/eval.c:1118
        temps = 0x7fffffffbd10
        tem = Python Exception <class 'gdb.error'>: value has been optimized out

        lexenv = Python Exception <class 'gdb.error'>: value has been optimized out

        elt = XIL(0x2aaa97fcc5e8)
        argnum = 1
        sa_avail = <optimized out>
        varlist = Python Exception <class 'gdb.error'>: value has been optimized out

        varlist_len = <optimized out>
        nvars = 1
#43 0x000055555575ffef in eval_sub (form=Python Exception <class 'gdb.error'>: value has been optimized out
, form <at> entry=XIL(0x7fffbb76aea3)) at ./src/eval.c:2560
        args_left = XIL(0x7fffbb76c8f3)
        numargs = 2
        original_fun = XIL(0xe268)
        original_args = XIL(0x7fffbb76c8f3)
        count = {
          bytes = <optimized out>
        }
        fun = XIL(0x5555559b6fa5)
        val = Python Exception <class 'gdb.error'>: value has been optimized out

        funcar = Python Exception <class 'gdb.error'>: value has been optimized out

        argvals = {XIL(0x7fffffffbe00), XIL(0x1556f5ad8), XIL(0x2aaa97c1cb30), XIL(0x7fffdf5af95b), XIL(0x555555e07410), XIL(0x1), XIL(0x555555e07410), XIL(0)}
#44 0x00005555557605e2 in Fprogn (body=Python Exception <class 'gdb.error'>: value has been optimized out
) at ./src/eval.c:452
#45 0x0000555555760914 in funcall_lambda (fun=fun <at> entry=XIL(0x7fffbb765de5), nargs=nargs <at> entry=0, arg_vector=arg_vector <at> entry=0x7fffffffbfd0) at ./src/eval.c:3361
        syms_left = Python Exception <class 'gdb.error'>: value has been optimized out

        lexenv = Python Exception <class 'gdb.error'>: value has been optimized out

        i = 0
        optional = false
        rest = false
        previous_rest = false
#46 0x0000555555760b07 in funcall_general (fun=XIL(0x7fffbb765de5), numargs=numargs <at> entry=0, args=args <at> entry=0x7fffffffbfd0) at ./src/eval.c:3055
        original_fun = XIL(0x2aaa65d2ec98)
#47 0x000055555575db3b in Ffuncall (nargs=1, args=0x7fffffffbfc8) at ./src/eval.c:3104
        count = {
          bytes = 480
        }
        val = Python Exception <class 'gdb.error'>: value has been optimized out

#48 0x000055555575df87 in funcall_nil (nargs=<optimized out>, args=<optimized out>) at ./src/eval.c:2787
#49 0x000055555575cffc in run_hook_with_args (nargs=nargs <at> entry=1, args=args <at> entry=0x7fffffffbfc8, funcall=funcall <at> entry=0x55555575df7e <funcall_nil>) at ./src/eval.c:2964
        global_vals = Python Exception <class 'gdb.error'>: value has been optimized out

        sym = XIL(0xdd60)
        val = Python Exception <class 'gdb.error'>: value has been optimized out

#50 0x000055555575d08a in Frun_hook_with_args (nargs=nargs <at> entry=1, args=args <at> entry=0x7fffffffbfc8) at ./src/eval.c:2829
#51 0x000055555575d0a6 in run_hook (hook=XIL(0x2aaa65d2ec98)) at ./src/eval.c:2977
#52 0x00005555556fb765 in Fkill_buffer (buffer_or_name=Python Exception <class 'gdb.error'>: value has been optimized out
) at ./src/lisp.h:1184
        modified = <optimized out>
        buffer = XIL(0x7fffbba855a5)
        b = 0x7fffbba855a0
        tem = Python Exception <class 'gdb.error'>: value has been optimized out

#53 0x000055555575ef53 in funcall_subr (subr=0x5555559b0320 <Skill_buffer>, numargs=numargs <at> entry=1, args=args <at> entry=0x7fffe2200100) at ./src/eval.c:3172
        argbuf = {XIL(0x7fffffffc0d0), make_fixnum(23456248566315), XIL(0), XIL(0x5555559a1710), XIL(0x7fffffffc0b0), XIL(0x55555574846d), XIL(0x7fffeda8fe78), XIL(0x5555559a6718)}
        a = <optimized out>
        maxargs = 1
        fun = Python Exception <class 'gdb.error'>: value has been optimized out

#54 0x00005555557a0de0 in exec_byte_code (fun=Python Exception <class 'gdb.error'>: value has been optimized out
, fun <at> entry=XIL(0x7fffedb24d1d), args_template=<optimized out>, nargs=<optimized out>, nargs <at> entry=0, args=<optimized out>, args <at> entry=0x7fffffffc2e0) at ./src/bytecode.c:827
        call_nargs = 1
        call_fun = XIL(0x5555559b0325)
        val = Python Exception <class 'gdb.error'>: value has been optimized out

        call_args = 0x7fffe2200100
        op = 1
        type = <optimized out>
        targets = {0x5555557a31a5 <exec_byte_code+10997>, 0x5555557a31c4 <exec_byte_code+11028>, 0x5555557a31f9 <exec_byte_code+11081>, 0x5555557a31fb <exec_byte_code+11083>, 0x5555557a31fd <exec_byte_code+11085>, 0x5555557a31c4 <exec_byte_code+11028>, 0x5555557a31ff <exec_byte_code+11087>, 0x5555557a3237 <exec_byte_code+11143>, 0x5555557a0943 <exec_byte_code+659>, 0x5555557a099a <exec_byte_code+746>, 0x5555557a099c <exec_byte_code+748>, 0x5555557a099e <exec_byte_code+750>, 0x5555557a09a0 <exec_byte_code+752>, 0x5555557a0943 <exec_byte_code+659>, 0x5555557a09a2 <exec_byte_code+754>, 0x5555557a0931 <exec_byte_code+641>, 0x5555557a0b91 <exec_byte_code+1249>, 0x5555557a0c00 <exec_byte_code+1360>, 0x5555557a0c02 <exec_byte_code+1362>, 0x5555557a0c04 <exec_byte_code+1364>, 0x5555557a0c06 <exec_byte_code+1366>, 0x5555557a0b91 <exec_byte_code+1249>, 0x5555557a0c1d <exec_byte_code+1389>, 0x5555557a0c08 <exec_byte_code+1368>, 0x5555557a0c7a <exec_byte_code+1482>, 0x5555557a0cc4 <exec_byte_code+1556>, 0x5555557a0cc6 <exec_byte_code+1558>, 0x5555557a0cc8 <exec_byte_code+1560>, 0x5555557a0cca <exec_byte_code+1562>, 0x5555557a0c7a <exec_byte_code+1482>, 0x5555557a0c5f <exec_byte_code+1455>, 0x5555557a0c68 <exec_byte_code+1464>, 0x5555557a0ceb <exec_byte_code+1595>, 0x5555557a0e56 <exec_byte_code+1958>, 0x5555557a0e5b <exec_byte_code+1963>, 0x5555557a0e60 <exec_byte_code+1968>, 0x5555557a0e65 <exec_byte_code+1973>, 0x5555557a0ceb <exec_byte_code+1595>, 0x5555557a0ccc <exec_byte_code+1564>, 0x5555557a0cd6 <exec_byte_code+1574>, 0x5555557a0f48 <exec_byte_code+2200>, 0x5555557a0f8f <exec_byte_code+2271>, 0x5555557a0f91 <exec_byte_code+2273>, 0x5555557a0f93 <exec_byte_code+2275>, 0x5555557a0f95 <exec_byte_code+2277>, 0x5555557a0f48 <exec_byte_code+2200>, 0x5555557a0f2d <exec_byte_code+2173>, 0x5555557a0f36 <exec_byte_code+2182>, 0x5555557a14ee <exec_byte_code+3646>, 0x5555557a144a <exec_byte_code+3482>, 0x5555557a13ba <exec_byte_code+3338>, 0x5555557a31a5 <exec_byte_code+10997>, 0x5555557a31a5 <exec_byte_code+10997>, 0x5555557a31a5 <exec_byte_code+10997>, 0x5555557a31a5 <exec_byte_code+10997>, 0x5555557a31a5 <exec_byte_code+10997>, 0x5555557a1650 <exec_byte_code+4000>, 0x5555557a172a <exec_byte_code+4218>, 0x5555557a176b <exec_byte_code+4283>, 0x5555557a17b7 <exec_byte_code+4359>, 0x5555557a1803 <exec_byte_code+4435>, 0x5555557a0a88 <exec_byte_code+984>, 0x5555557a0ad7 <exec_byte_code+1063>, 0x5555557a185f <exec_byte_code+4527>, 0x5555557a0a08 <exec_byte_code+856>, 0x5555557a0b11 <exec_byte_code+1121>, 0x5555557a18a0 <exec_byte_code+4592>, 0x5555557a18da <exec_byte_code+4650>, 0x5555557a1906 <exec_byte_code+4694>, 0x5555557a1940 <exec_byte_code+4752>, 0x5555557a1979 <exec_byte_code+4809>, 0x5555557a19f7 <exec_byte_code+4935>, 0x5555557a1a23 <exec_byte_code+4979>, 0x5555557a1b2b <exec_byte_code+5243>, 0x5555557a1c61 <exec_byte_code+5553>, 0x5555557a1c8d <exec_byte_code+5597>, 0x5555557a1cb9 <exec_byte_code+5641>, 0x5555557a1cf3 <exec_byte_code+5699>, 0x5555557a1d2d <exec_byte_code+5757>, 0x5555557a1d67 <exec_byte_code+5815>, 0x5555557a1da5 <exec_byte_code+5877>, 0x5555557a1ddb <exec_byte_code+5931>, 0x5555557a1e11 <exec_byte_code+5985>, 0x5555557a1e88 <exec_byte_code+6104>, 0x5555557a1ef4 <exec_byte_code+6212>, 0x5555557a1f60 <exec_byte_code+6320>, 0x5555557a1fdc <exec_byte_code+6444>, 0x5555557a2070 <exec_byte_code+6592>, 0x5555557a2104 <exec_byte_code+6740>, 0x5555557a2198 <exec_byte_code+6888>, 0x5555557a222c <exec_byte_code+7036>, 0x5555557a22c1 <exec_byte_code+7185>, 0x5555557a2334 <exec_byte_code+7300>, 0x5555557a23c7 <exec_byte_code+7447>, 0x5555557a2446 <exec_byte_code+7574>, 0x5555557a24c5 <exec_byte_code+7701>, 0x5555557a2694 <exec_byte_code+8164>, 0x5555557a12c4 <exec_byte_code+3092>, 0x5555557a26d7 <exec_byte_code+8231>, 0x5555557a2703 <exec_byte_code+8275>, 0x5555557a2775 <exec_byte_code+8389>, 0x5555557a27b8 <exec_byte_code+8456>, 0x5555557a27fb <exec_byte_code+8523>, 0x5555557a2827 <exec_byte_code+8567>, 0x5555557a2855 <exec_byte_code+8613>, 0x5555557a2883 <exec_byte_code+8659>, 0x5555557a28b9 <exec_byte_code+8713>, 0x5555557a31a5 <exec_byte_code+10997>, 0x5555557a28ea <exec_byte_code+8762>, 0x5555557a2918 <exec_byte_code+8808>, 0x5555557a2946 <exec_byte_code+8854>, 0x5555557a2974 <exec_byte_code+8900>, 0x5555557a29a2 <exec_byte_code+8946>, 0x5555557a29d0 <exec_byte_code+8992>, 0x5555557a12c4 <exec_byte_code+3092>, 0x5555557a31a5 <exec_byte_code+10997>, 0x5555557a29fc <exec_byte_code+9036>, 0x5555557a2a3b <exec_byte_code+9099>, 0x5555557a2a67 <exec_byte_code+9143>, 0x5555557a2a93 <exec_byte_code+9187>, 0x5555557a2acd <exec_byte_code+9245>, 0x5555557a2b07 <exec_byte_code+9303>, 0x5555557a2b33 <exec_byte_code+9347>, 0x5555557a2b5f <exec_byte_code+9391>, 0x5555557a2b99 <exec_byte_code+9449>, 0x5555557a2bd3 <exec_byte_code+9507>, 0x5555557a2c0d <exec_byte_code+9565>, 0x5555557a2c3b <exec_byte_code+9611>, 0x5555557a31a5 <exec_byte_code+10997>, 0x5555557a1262 <exec_byte_code+2994>, 0x5555557a0f97 <exec_byte_code+2279>, 0x5555557a09ab <exec_byte_code+763>, 0x5555557a1020 <exec_byte_code+2416>, 0x5555557a106d <exec_byte_code+2493>, 0x5555557a10b4 <exec_byte_code+2564>, 0x5555557a10fb <exec_byte_code+2635>, 0x5555557a1240 <exec_byte_code+2960>, 0x5555557a0c33 <exec_byte_code+1411>, 0x5555557a12a2 <exec_byte_code+3058>, 0x5555557a12e6 <exec_byte_code+3126>, 0x5555557a1348 <exec_byte_code+3224>, 0x5555557a1379 <exec_byte_code+3273>, 0x5555557a151e <exec_byte_code+3694>, 0x5555557a1571 <exec_byte_code+3777>, 0x5555557a15af <exec_byte_code+3839>, 0x5555557a15f6 <exec_byte_code+3910>, 0x5555557a31a5 <exec_byte_code+10997>, 0x5555557a2c67 <exec_byte_code+9655>, 0x5555557a2ca5 <exec_byte_code+9717>, 0x5555557a2cd1 <exec_byte_code+9761>, 0x5555557a2cfd <exec_byte_code+9805>, 0x5555557a2d29 <exec_byte_code+9849>, 0x5555557a2d55 <exec_byte_code+9893>, 0x5555557a2d8f <exec_byte_code+9951>, 0x5555557a2dc9 <exec_byte_code+10009>, 0x5555557a2e03 <exec_byte_code+10067>, 0x5555557a2e3d <exec_byte_code+10125>, 0x5555557a2f1f <exec_byte_code+10351>, 0x5555557a2f59 <exec_byte_code+10409>, 0x5555557a2f93 <exec_byte_code+10467>, 0x5555557a2fbf <exec_byte_code+10511>, 0x5555557a302a <exec_byte_code+10618>, 0x5555557a3095 <exec_byte_code+10725>, 0x5555557a30c1 <exec_byte_code+10769>, 0x5555557a30ed <exec_byte_code+10813>, 0x5555557a256e <exec_byte_code+7870>, 0x5555557a260a <exec_byte_code+8026>, 0x5555557a3123 <exec_byte_code+10867>, 0x5555557a3164 <exec_byte_code+10932>, 0x5555557a31a5 <exec_byte_code+10997>, 0x5555557a31a5 <exec_byte_code+10997>, 0x5555557a31a5 <exec_byte_code+10997>, 0x5555557a31a5 <exec_byte_code+10997>, 0x5555557a31a5 <exec_byte_code+10997>, 0x5555557a31a5 <exec_byte_code+10997>, 0x5555557a19b6 <exec_byte_code+4870>, 0x5555557a1e47 <exec_byte_code+6039>, 0x5555557a2734 <exec_byte_code+8324>, 0x5555557a3278 <exec_byte_code+11208>, 0x5555557a32b8 <exec_byte_code+11272>, 0x5555557a31a5 <exec_byte_code+10997>, 0x5555557a31a5 <exec_byte_code+10997>, 0x5555557a3303 <exec_byte_code+11347>, 0x5555557a334e <exec_byte_code+11422>, 0x5555557a31a5 <exec_byte_code+10997>, 0x5555557a31a5 <exec_byte_code+10997>, 0x5555557a31a5 <exec_byte_code+10997>, 0x5555557a31a5 <exec_byte_code+10997>, 0x5555557a31a5 <exec_byte_code+10997>, 0x5555557a31a5 <exec_byte_code+10997>, 0x5555557a31a5 <exec_byte_code+10997>, 0x5555557a31a5 <exec_byte_code+10997>, 0x5555557a3445 <exec_byte_code+11669> <repeats 64 times>}
        quitcounter = 1 '\001'
        bc = 0x5555559a6718 <main_thread+504>
        top = 0x7fffe22000f8
        pc = 0x7fffedb25b59 "\210\t\205B"
        bytestr = Python Exception <class 'gdb.error'>: value has been optimized out

        vectorp = 0x7fffedb25398
        max_stack = <optimized out>
        frame_base = <optimized out>
        fp = <optimized out>
        bytestr_data = 0x7fffedb25b28 "\211\203\021"
        rest = <optimized out>
        mandatory = <optimized out>
        nonrest = <optimized out>
        pushedargs = <optimized out>
        saved_quitcounter = 0 '\000'
        saved_vectorp = 0x5555559b73a5 <Sprogn+5>
        saved_bytestr_data = 0x160 <error: Cannot access memory at address 0x160>
#55 0x000055555576070e in funcall_lambda (fun=fun <at> entry=XIL(0x7fffedb24d1d), nargs=nargs <at> entry=0, arg_vector=arg_vector <at> entry=0x7fffffffc2e0) at ./src/eval.c:3263
        syms_left = make_fixnum(256)
        lexenv = Python Exception <class 'gdb.error'>: value has been optimized out

        i = <optimized out>
        optional = <optimized out>
        rest = <optimized out>
        previous_rest = <optimized out>
#56 0x0000555555761136 in apply_lambda (fun=Python Exception <class 'gdb.error'>: value has been optimized out
, fun <at> entry=XIL(0x7fffedb24d1d), args=Python Exception <class 'gdb.error'>: value has been optimized out
, count=count <at> entry=...) at ./src/eval.c:3226
        arg_vector = 0x7fffffffc2e0
        tem = XIL(0x180)
        sa_avail = <optimized out>
        numargs = 0
        args_left = Python Exception <class 'gdb.error'>: value has been optimized out

#57 0x000055555576034e in eval_sub (form=Python Exception <class 'gdb.error'>: value has been optimized out
, form <at> entry=XIL(0x7fffdca6007b)) at ./src/eval.c:2656
        original_fun = XIL(0x2aaa980eef48)
        original_args = XIL(0)
        count = {
          bytes = 384
        }
        fun = XIL(0x7fffedb24d1d)
        val = Python Exception <class 'gdb.error'>: value has been optimized out

        funcar = XIL(0x7fffdca5ca03)
        argvals = {XIL(0), XIL(0), XIL(0x7fffddcd320b), XIL(0), XIL(0), XIL(0x369475a905028a00), XIL(0x7fffffffc3e0), XIL(0x7fffddccef2d)}
#58 0x00005555557605e2 in Fprogn (body=Python Exception <class 'gdb.error'>: value has been optimized out
) at ./src/eval.c:452
#59 0x0000555555760ba4 in Fif (args=XIL(0x7fffdca5ca03)) at ./src/eval.c:408
#60 0x000055555575ffef in eval_sub (form=Python Exception <class 'gdb.error'>: value has been optimized out
, form <at> entry=XIL(0x7fffdca5c303)) at ./src/eval.c:2560
        args_left = XIL(0x7fffdca5ca03)
        numargs = 3
        original_fun = XIL(0xc7f0)
        original_args = XIL(0x7fffdca5ca03)
        count = {
          bytes = <optimized out>
        }
        fun = XIL(0x5555559b7425)
        val = Python Exception <class 'gdb.error'>: value has been optimized out

        funcar = Python Exception <class 'gdb.error'>: value has been optimized out

        argvals = {XIL(0x3), XIL(0x100000001), XIL(0x7fffffffc4e0), XIL(0x7fffabd4c56b), XIL(0x555555e07350), XIL(0x1), XIL(0x555555e07350), XIL(0x1)}
#61 0x00005555557605e2 in Fprogn (body=Python Exception <class 'gdb.error'>: value has been optimized out
) at ./src/eval.c:452
#62 0x0000555555760914 in funcall_lambda (fun=fun <at> entry=XIL(0x7fffdc9de3f5), nargs=nargs <at> entry=1, arg_vector=arg_vector <at> entry=0x7fffffffc770) at ./src/eval.c:3361
        syms_left = Python Exception <class 'gdb.error'>: value has been optimized out

        lexenv = Python Exception <class 'gdb.error'>: value has been optimized out

        i = 1
        optional = false
        rest = false
        previous_rest = false
#63 0x0000555555760b07 in funcall_general (fun=XIL(0x7fffdc9de3f5), numargs=numargs <at> entry=1, args=args <at> entry=0x7fffffffc770) at ./src/eval.c:3055
        original_fun = XIL(0x2aaa86c6f3f8)
#64 0x000055555575db3b in Ffuncall (nargs=nargs <at> entry=2, args=args <at> entry=0x7fffffffc768) at ./src/eval.c:3104
        count = {
          bytes = 288
        }
        val = Python Exception <class 'gdb.error'>: value has been optimized out

#65 0x000055555575850c in Ffuncall_interactively (nargs=2, args=0x7fffffffc768) at ./src/callint.c:250
#66 0x000055555575f0c6 in funcall_subr (subr=0x5555559b67e0 <Sfuncall_interactively>, numargs=numargs <at> entry=2, args=args <at> entry=0x7fffffffc768) at ./src/eval.c:3195
        maxargs = -2
        fun = Python Exception <class 'gdb.error'>: value has been optimized out

#67 0x0000555555760af7 in funcall_general (fun=XIL(0x5555559b67e5), numargs=numargs <at> entry=2, args=args <at> entry=0x7fffffffc768) at ./src/eval.c:3051
        original_fun = XIL(0xaf38)
#68 0x000055555575db3b in Ffuncall (nargs=nargs <at> entry=3, args=args <at> entry=0x7fffffffc760) at ./src/eval.c:3104
        count = {
          bytes = 224
        }
        val = Python Exception <class 'gdb.error'>: value has been optimized out

#69 0x000055555575a466 in Fcall_interactively (function=Python Exception <class 'gdb.error'>: value has been optimized out
, record_flag=Python Exception <class 'gdb.error'>: value has been optimized out
, keys=Python Exception <class 'gdb.error'>: value has been optimized out
) at ./src/callint.c:789
        arg_from_tty = false
        key_count = <optimized out>
        record_then_fail = <optimized out>
        save_this_command = Python Exception <class 'gdb.error'>: value has been optimized out

        save_this_original_command = Python Exception <class 'gdb.error'>: value has been optimized out

        save_real_this_command = Python Exception <class 'gdb.error'>: value has been optimized out

        save_last_command = Python Exception <class 'gdb.error'>: value has been optimized out

        prefix_arg = Python Exception <class 'gdb.error'>: value has been optimized out

        specs = Python Exception <class 'gdb.error'>: value has been optimized out

        sa_avail = <optimized out>
        string_len = <optimized out>
        string = <optimized out>
        string_end = <optimized out>
        next_event = 2
        nargs = <optimized out>
        args = <optimized out>
        visargs = <optimized out>
        varies = <optimized out>
        tem = <optimized out>
#70 0x000055555575ef7f in funcall_subr (subr=0x5555559b67a0 <Scall_interactively>, numargs=numargs <at> entry=3, args=args <at> entry=0x7fffe2200070) at ./src/eval.c:3176
        argbuf = {XIL(0x2aaa86c6f3f8), XIL(0), XIL(0x7fffffffc960), XIL(0x55555576dac0), XIL(0x7fffbc312bc3), XIL(0x4), XIL(0), XIL(0x555555760003)}
        a = <optimized out>
        maxargs = 3
        fun = Python Exception <class 'gdb.error'>: value has been optimized out

#71 0x00005555557a0de0 in exec_byte_code (fun=Python Exception <class 'gdb.error'>: value has been optimized out
, fun <at> entry=XIL(0x7fffed66283d), args_template=<optimized out>, nargs=<optimized out>, nargs <at> entry=1, args=<optimized out>, args <at> entry=0x7fffffffcc08) at ./src/bytecode.c:827
        call_nargs = 3
        call_fun = XIL(0x5555559b67a5)
        val = Python Exception <class 'gdb.error'>: value has been optimized out

        call_args = 0x7fffe2200070
        op = 3
        type = <optimized out>
        targets = {0x5555557a31a5 <exec_byte_code+10997>, 0x5555557a31c4 <exec_byte_code+11028>, 0x5555557a31f9 <exec_byte_code+11081>, 0x5555557a31fb <exec_byte_code+11083>, 0x5555557a31fd <exec_byte_code+11085>, 0x5555557a31c4 <exec_byte_code+11028>, 0x5555557a31ff <exec_byte_code+11087>, 0x5555557a3237 <exec_byte_code+11143>, 0x5555557a0943 <exec_byte_code+659>, 0x5555557a099a <exec_byte_code+746>, 0x5555557a099c <exec_byte_code+748>, 0x5555557a099e <exec_byte_code+750>, 0x5555557a09a0 <exec_byte_code+752>, 0x5555557a0943 <exec_byte_code+659>, 0x5555557a09a2 <exec_byte_code+754>, 0x5555557a0931 <exec_byte_code+641>, 0x5555557a0b91 <exec_byte_code+1249>, 0x5555557a0c00 <exec_byte_code+1360>, 0x5555557a0c02 <exec_byte_code+1362>, 0x5555557a0c04 <exec_byte_code+1364>, 0x5555557a0c06 <exec_byte_code+1366>, 0x5555557a0b91 <exec_byte_code+1249>, 0x5555557a0c1d <exec_byte_code+1389>, 0x5555557a0c08 <exec_byte_code+1368>, 0x5555557a0c7a <exec_byte_code+1482>, 0x5555557a0cc4 <exec_byte_code+1556>, 0x5555557a0cc6 <exec_byte_code+1558>, 0x5555557a0cc8 <exec_byte_code+1560>, 0x5555557a0cca <exec_byte_code+1562>, 0x5555557a0c7a <exec_byte_code+1482>, 0x5555557a0c5f <exec_byte_code+1455>, 0x5555557a0c68 <exec_byte_code+1464>, 0x5555557a0ceb <exec_byte_code+1595>, 0x5555557a0e56 <exec_byte_code+1958>, 0x5555557a0e5b <exec_byte_code+1963>, 0x5555557a0e60 <exec_byte_code+1968>, 0x5555557a0e65 <exec_byte_code+1973>, 0x5555557a0ceb <exec_byte_code+1595>, 0x5555557a0ccc <exec_byte_code+1564>, 0x5555557a0cd6 <exec_byte_code+1574>, 0x5555557a0f48 <exec_byte_code+2200>, 0x5555557a0f8f <exec_byte_code+2271>, 0x5555557a0f91 <exec_byte_code+2273>, 0x5555557a0f93 <exec_byte_code+2275>, 0x5555557a0f95 <exec_byte_code+2277>, 0x5555557a0f48 <exec_byte_code+2200>, 0x5555557a0f2d <exec_byte_code+2173>, 0x5555557a0f36 <exec_byte_code+2182>, 0x5555557a14ee <exec_byte_code+3646>, 0x5555557a144a <exec_byte_code+3482>, 0x5555557a13ba <exec_byte_code+3338>, 0x5555557a31a5 <exec_byte_code+10997>, 0x5555557a31a5 <exec_byte_code+10997>, 0x5555557a31a5 <exec_byte_code+10997>, 0x5555557a31a5 <exec_byte_code+10997>, 0x5555557a31a5 <exec_byte_code+10997>, 0x5555557a1650 <exec_byte_code+4000>, 0x5555557a172a <exec_byte_code+4218>, 0x5555557a176b <exec_byte_code+4283>, 0x5555557a17b7 <exec_byte_code+4359>, 0x5555557a1803 <exec_byte_code+4435>, 0x5555557a0a88 <exec_byte_code+984>, 0x5555557a0ad7 <exec_byte_code+1063>, 0x5555557a185f <exec_byte_code+4527>, 0x5555557a0a08 <exec_byte_code+856>, 0x5555557a0b11 <exec_byte_code+1121>, 0x5555557a18a0 <exec_byte_code+4592>, 0x5555557a18da <exec_byte_code+4650>, 0x5555557a1906 <exec_byte_code+4694>, 0x5555557a1940 <exec_byte_code+4752>, 0x5555557a1979 <exec_byte_code+4809>, 0x5555557a19f7 <exec_byte_code+4935>, 0x5555557a1a23 <exec_byte_code+4979>, 0x5555557a1b2b <exec_byte_code+5243>, 0x5555557a1c61 <exec_byte_code+5553>, 0x5555557a1c8d <exec_byte_code+5597>, 0x5555557a1cb9 <exec_byte_code+5641>, 0x5555557a1cf3 <exec_byte_code+5699>, 0x5555557a1d2d <exec_byte_code+5757>, 0x5555557a1d67 <exec_byte_code+5815>, 0x5555557a1da5 <exec_byte_code+5877>, 0x5555557a1ddb <exec_byte_code+5931>, 0x5555557a1e11 <exec_byte_code+5985>, 0x5555557a1e88 <exec_byte_code+6104>, 0x5555557a1ef4 <exec_byte_code+6212>, 0x5555557a1f60 <exec_byte_code+6320>, 0x5555557a1fdc <exec_byte_code+6444>, 0x5555557a2070 <exec_byte_code+6592>, 0x5555557a2104 <exec_byte_code+6740>, 0x5555557a2198 <exec_byte_code+6888>, 0x5555557a222c <exec_byte_code+7036>, 0x5555557a22c1 <exec_byte_code+7185>, 0x5555557a2334 <exec_byte_code+7300>, 0x5555557a23c7 <exec_byte_code+7447>, 0x5555557a2446 <exec_byte_code+7574>, 0x5555557a24c5 <exec_byte_code+7701>, 0x5555557a2694 <exec_byte_code+8164>, 0x5555557a12c4 <exec_byte_code+3092>, 0x5555557a26d7 <exec_byte_code+8231>, 0x5555557a2703 <exec_byte_code+8275>, 0x5555557a2775 <exec_byte_code+8389>, 0x5555557a27b8 <exec_byte_code+8456>, 0x5555557a27fb <exec_byte_code+8523>, 0x5555557a2827 <exec_byte_code+8567>, 0x5555557a2855 <exec_byte_code+8613>, 0x5555557a2883 <exec_byte_code+8659>, 0x5555557a28b9 <exec_byte_code+8713>, 0x5555557a31a5 <exec_byte_code+10997>, 0x5555557a28ea <exec_byte_code+8762>, 0x5555557a2918 <exec_byte_code+8808>, 0x5555557a2946 <exec_byte_code+8854>, 0x5555557a2974 <exec_byte_code+8900>, 0x5555557a29a2 <exec_byte_code+8946>, 0x5555557a29d0 <exec_byte_code+8992>, 0x5555557a12c4 <exec_byte_code+3092>, 0x5555557a31a5 <exec_byte_code+10997>, 0x5555557a29fc <exec_byte_code+9036>, 0x5555557a2a3b <exec_byte_code+9099>, 0x5555557a2a67 <exec_byte_code+9143>, 0x5555557a2a93 <exec_byte_code+9187>, 0x5555557a2acd <exec_byte_code+9245>, 0x5555557a2b07 <exec_byte_code+9303>, 0x5555557a2b33 <exec_byte_code+9347>, 0x5555557a2b5f <exec_byte_code+9391>, 0x5555557a2b99 <exec_byte_code+9449>, 0x5555557a2bd3 <exec_byte_code+9507>, 0x5555557a2c0d <exec_byte_code+9565>, 0x5555557a2c3b <exec_byte_code+9611>, 0x5555557a31a5 <exec_byte_code+10997>, 0x5555557a1262 <exec_byte_code+2994>, 0x5555557a0f97 <exec_byte_code+2279>, 0x5555557a09ab <exec_byte_code+763>, 0x5555557a1020 <exec_byte_code+2416>, 0x5555557a106d <exec_byte_code+2493>, 0x5555557a10b4 <exec_byte_code+2564>, 0x5555557a10fb <exec_byte_code+2635>, 0x5555557a1240 <exec_byte_code+2960>, 0x5555557a0c33 <exec_byte_code+1411>, 0x5555557a12a2 <exec_byte_code+3058>, 0x5555557a12e6 <exec_byte_code+3126>, 0x5555557a1348 <exec_byte_code+3224>, 0x5555557a1379 <exec_byte_code+3273>, 0x5555557a151e <exec_byte_code+3694>, 0x5555557a1571 <exec_byte_code+3777>, 0x5555557a15af <exec_byte_code+3839>, 0x5555557a15f6 <exec_byte_code+3910>, 0x5555557a31a5 <exec_byte_code+10997>, 0x5555557a2c67 <exec_byte_code+9655>, 0x5555557a2ca5 <exec_byte_code+9717>, 0x5555557a2cd1 <exec_byte_code+9761>, 0x5555557a2cfd <exec_byte_code+9805>, 0x5555557a2d29 <exec_byte_code+9849>, 0x5555557a2d55 <exec_byte_code+9893>, 0x5555557a2d8f <exec_byte_code+9951>, 0x5555557a2dc9 <exec_byte_code+10009>, 0x5555557a2e03 <exec_byte_code+10067>, 0x5555557a2e3d <exec_byte_code+10125>, 0x5555557a2f1f <exec_byte_code+10351>, 0x5555557a2f59 <exec_byte_code+10409>, 0x5555557a2f93 <exec_byte_code+10467>, 0x5555557a2fbf <exec_byte_code+10511>, 0x5555557a302a <exec_byte_code+10618>, 0x5555557a3095 <exec_byte_code+10725>, 0x5555557a30c1 <exec_byte_code+10769>, 0x5555557a30ed <exec_byte_code+10813>, 0x5555557a256e <exec_byte_code+7870>, 0x5555557a260a <exec_byte_code+8026>, 0x5555557a3123 <exec_byte_code+10867>, 0x5555557a3164 <exec_byte_code+10932>, 0x5555557a31a5 <exec_byte_code+10997>, 0x5555557a31a5 <exec_byte_code+10997>, 0x5555557a31a5 <exec_byte_code+10997>, 0x5555557a31a5 <exec_byte_code+10997>, 0x5555557a31a5 <exec_byte_code+10997>, 0x5555557a31a5 <exec_byte_code+10997>, 0x5555557a19b6 <exec_byte_code+4870>, 0x5555557a1e47 <exec_byte_code+6039>, 0x5555557a2734 <exec_byte_code+8324>, 0x5555557a3278 <exec_byte_code+11208>, 0x5555557a32b8 <exec_byte_code+11272>, 0x5555557a31a5 <exec_byte_code+10997>, 0x5555557a31a5 <exec_byte_code+10997>, 0x5555557a3303 <exec_byte_code+11347>, 0x5555557a334e <exec_byte_code+11422>, 0x5555557a31a5 <exec_byte_code+10997>, 0x5555557a31a5 <exec_byte_code+10997>, 0x5555557a31a5 <exec_byte_code+10997>, 0x5555557a31a5 <exec_byte_code+10997>, 0x5555557a31a5 <exec_byte_code+10997>, 0x5555557a31a5 <exec_byte_code+10997>, 0x5555557a31a5 <exec_byte_code+10997>, 0x5555557a31a5 <exec_byte_code+10997>, 0x5555557a3445 <exec_byte_code+11669> <repeats 64 times>}
        quitcounter = 1 '\001'
        bc = 0x5555559a6718 <main_thread+504>
        top = 0x7fffe2200068
        pc = 0x7fffed7554af "\006\a9\205\231"
        bytestr = Python Exception <class 'gdb.error'>: value has been optimized out

        vectorp = 0x7fffed735fd8
        max_stack = <optimized out>
        frame_base = <optimized out>
        fp = <optimized out>
        bytestr_data = 0x7fffed755428 "\304\020\211?\205\023"
        rest = <optimized out>
        mandatory = <optimized out>
        nonrest = <optimized out>
        pushedargs = <optimized out>
        saved_quitcounter = 54 '6'
        saved_vectorp = 0x0
        saved_bytestr_data = 0x7fffed68016d ""
#72 0x000055555576070e in funcall_lambda (fun=fun <at> entry=XIL(0x7fffed66283d), nargs=nargs <at> entry=1, arg_vector=arg_vector <at> entry=0x7fffffffcc08) at ./src/eval.c:3263
        syms_left = make_fixnum(1025)
        lexenv = Python Exception <class 'gdb.error'>: value has been optimized out

        i = <optimized out>
        optional = <optimized out>
        rest = <optimized out>
        previous_rest = <optimized out>
#73 0x0000555555760b07 in funcall_general (fun=XIL(0x7fffed66283d), numargs=numargs <at> entry=1, args=args <at> entry=0x7fffffffcc08) at ./src/eval.c:3055
        original_fun = XIL(0x6b68)
#74 0x000055555575db3b in Ffuncall (nargs=nargs <at> entry=2, args=args <at> entry=0x7fffffffcc00) at ./src/eval.c:3104
        count = {
          bytes = 128
        }
        val = Python Exception <class 'gdb.error'>: value has been optimized out

#75 0x00005555556e3cac in command_loop_1 () at ./src/lisp.h:1184
        cmd = Python Exception <class 'gdb.error'>: value has been optimized out

        keybuf = {make_fixnum(24), make_fixnum(107), make_fixnum(48), make_fixnum(98), XIL(0x7fffffffcc80), XIL(0x55555575befd), XIL(0x7fffffffcca8), XIL(0x60), XIL(0), XIL(0), XIL(0), XIL(0x1), XIL(0x7fffffffcce0), XIL(0x55555575d835), XIL(0xc), XIL(0x140b0), XIL(0x38), XIL(0x7fffa98b620d), XIL(0x7fffed400004), XIL(0x369475a905028a00), XIL(0x7fffa99487a3), XIL(0x7fffa99487a3), XIL(0x60), XIL(0), XIL(0x7fffffffcd50), XIL(0x5555556d69f8), XIL(0), XIL(0x38), XIL(0x60), XIL(0x7fffe37952cb)}
        i = <optimized out>
        last_pt = 447894
        prev_modiff = 6774
        prev_buffer = 0x7fffbba855a0
#76 0x000055555575c6d8 in internal_condition_case (bfun=bfun <at> entry=0x5555556e382c <command_loop_1>, handlers=Python Exception <class 'gdb.error'>: value has been optimized out
, handlers <at> entry=XIL(0xa8), hfun=hfun <at> entry=0x5555556d6847 <cmd_error>) at ./src/eval.c:1623
        val = XIL(0x7ffff7fc2470)
        c = 0x7fffe3dc9940
#77 0x00005555556cdb82 in command_loop_2 (handlers=handlers <at> entry=XIL(0xa8)) at ./src/keyboard.c:1174
#78 0x000055555575c5ed in internal_catch (tag=Python Exception <class 'gdb.error'>: value has been optimized out
, tag <at> entry=XIL(0x15498), func=func <at> entry=0x5555556cdb60 <command_loop_2>, arg=Python Exception <class 'gdb.error'>: value has been optimized out
, arg <at> entry=XIL(0xa8)) at ./src/eval.c:1302
        val = XIL(0x7ffff7fc2470)
        c = 0x7fffe3da3cc0
#79 0x00005555556cdb3d in command_loop () at ./src/lisp.h:1184
#80 0x00005555556d635e in recursive_edit_1 () at ./src/keyboard.c:760
        val = Python Exception <class 'gdb.error'>: value has been optimized out

#81 0x00005555556d66ff in Frecursive_edit () at ./src/keyboard.c:843
#82 0x00005555556cd517 in main (argc=5, argv=0x7fffffffcff8) at ./src/emacs.c:2580
        stack_bottom_variable = 0x0
        old_argc = <optimized out>
        no_loadup = false
        junk = 0x0
        dname_arg = 0x7fffffffd52e "EMACS-MPS=debug"
        ch_to_dir = 0x0
        original_pwd = 0x0
        dump_mode = 0x0
        skip_args = 1
        temacs = 0x0
        attempt_load_pdump = <optimized out>
        only_version = false
        rlim = {
          rlim_cur = 10022912,
          rlim_max = 18446744073709551615
        }
        lc_all = <optimized out>
        sockfd = -1
        module_assertions = <optimized out>
++set $bt = backtrace_top ()
++if backtrace_p ($bt)
+++echo \n

+++echo Lisp Backtrace:\n
Lisp Backtrace:
+++xbacktrace
++++set $bt = backtrace_top ()
++++while backtrace_p ($bt)
+++++set $fun = backtrace_function ($bt)
+++++xgettype $fun
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $fun.i
++++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++++if $type == Lisp_Symbol
++++++xprintsym $fun
+++++++xsymname $fun
++++++++xgetsym $fun
+++++++++xgetptr $fun
++++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++++set $bugfix = $fun.i
++++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++++set $symname = $ptr->u.s.name
+++++++xgetptr $symname
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $symname.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++if $ptr != 0
++++++++set $sym_name = (struct Lisp_String *) $ptr
++++++++xprintstr $sym_name
+++++++++if (! $arg0)
++++++++++set $data = (char *) $sym_name->u.s.data
++++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++++if $strsize == 0
+++++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"delete-frame"++++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffaf10)
+++++set $bt = backtrace_next ($bt)
+++++set $fun = backtrace_function ($bt)
+++++xgettype $fun
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $fun.i
++++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++++if $type == Lisp_Symbol
++++++xprintsym $fun
+++++++xsymname $fun
++++++++xgetsym $fun
+++++++++xgetptr $fun
++++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++++set $bugfix = $fun.i
++++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++++set $symname = $ptr->u.s.name
+++++++xgetptr $symname
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $symname.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++if $ptr != 0
++++++++set $sym_name = (struct Lisp_String *) $ptr
++++++++xprintstr $sym_name
+++++++++if (! $arg0)
++++++++++set $data = (char *) $sym_name->u.s.data
++++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++++if $strsize == 0
+++++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"if"++++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffafe8)
+++++set $bt = backtrace_next ($bt)
+++++set $fun = backtrace_function ($bt)
+++++xgettype $fun
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $fun.i
++++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++++if $type == Lisp_Symbol
++++++xprintsym $fun
+++++++xsymname $fun
++++++++xgetsym $fun
+++++++++xgetptr $fun
++++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++++set $bugfix = $fun.i
++++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++++set $symname = $ptr->u.s.name
+++++++xgetptr $symname
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $symname.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++if $ptr != 0
++++++++set $sym_name = (struct Lisp_String *) $ptr
++++++++xprintstr $sym_name
+++++++++if (! $arg0)
++++++++++set $data = (char *) $sym_name->u.s.data
++++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++++if $strsize == 0
+++++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"progn"++++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffb0c8)
+++++set $bt = backtrace_next ($bt)
+++++set $fun = backtrace_function ($bt)
+++++xgettype $fun
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $fun.i
++++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++++if $type == Lisp_Symbol
++++++xprintsym $fun
+++++++xsymname $fun
++++++++xgetsym $fun
+++++++++xgetptr $fun
++++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++++set $bugfix = $fun.i
++++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++++set $symname = $ptr->u.s.name
+++++++xgetptr $symname
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $symname.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++if $ptr != 0
++++++++set $sym_name = (struct Lisp_String *) $ptr
++++++++xprintstr $sym_name
+++++++++if (! $arg0)
++++++++++set $data = (char *) $sym_name->u.s.data
++++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++++if $strsize == 0
+++++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"if"++++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffb1a8)
+++++set $bt = backtrace_next ($bt)
+++++set $fun = backtrace_function ($bt)
+++++xgettype $fun
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $fun.i
++++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++++if $type == Lisp_Symbol
++++++xprintsym $fun
+++++++xsymname $fun
++++++++xgetsym $fun
+++++++++xgetptr $fun
++++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++++set $bugfix = $fun.i
++++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++++set $symname = $ptr->u.s.name
+++++++xgetptr $symname
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $symname.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++if $ptr != 0
++++++++set $sym_name = (struct Lisp_String *) $ptr
++++++++xprintstr $sym_name
+++++++++if (! $arg0)
++++++++++set $data = (char *) $sym_name->u.s.data
++++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++++if $strsize == 0
+++++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"let*"++++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffb2f8)
+++++set $bt = backtrace_next ($bt)
+++++set $fun = backtrace_function ($bt)
+++++xgettype $fun
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $fun.i
++++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++++if $type == Lisp_Symbol
++++++xprintsym $fun
+++++++xsymname $fun
++++++++xgetsym $fun
+++++++++xgetptr $fun
++++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++++set $bugfix = $fun.i
++++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++++set $symname = $ptr->u.s.name
+++++++xgetptr $symname
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $symname.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++if $ptr != 0
++++++++set $sym_name = (struct Lisp_String *) $ptr
++++++++xprintstr $sym_name
+++++++++if (! $arg0)
++++++++++set $data = (char *) $sym_name->u.s.data
++++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++++if $strsize == 0
+++++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"progn"++++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffb3d8)
+++++set $bt = backtrace_next ($bt)
+++++set $fun = backtrace_function ($bt)
+++++xgettype $fun
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $fun.i
++++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++++if $type == Lisp_Symbol
++++++xprintsym $fun
+++++++xsymname $fun
++++++++xgetsym $fun
+++++++++xgetptr $fun
++++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++++set $bugfix = $fun.i
++++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++++set $symname = $ptr->u.s.name
+++++++xgetptr $symname
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $symname.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++if $ptr != 0
++++++++set $sym_name = (struct Lisp_String *) $ptr
++++++++xprintstr $sym_name
+++++++++if (! $arg0)
++++++++++set $data = (char *) $sym_name->u.s.data
++++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++++if $strsize == 0
+++++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"if"++++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffb4b8)
+++++set $bt = backtrace_next ($bt)
+++++set $fun = backtrace_function ($bt)
+++++xgettype $fun
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $fun.i
++++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++++if $type == Lisp_Symbol
++++++xprintsym $fun
+++++++xsymname $fun
++++++++xgetsym $fun
+++++++++xgetptr $fun
++++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++++set $bugfix = $fun.i
++++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++++set $symname = $ptr->u.s.name
+++++++xgetptr $symname
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $symname.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++if $ptr != 0
++++++++set $sym_name = (struct Lisp_String *) $ptr
++++++++xprintstr $sym_name
+++++++++if (! $arg0)
++++++++++set $data = (char *) $sym_name->u.s.data
++++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++++if $strsize == 0
+++++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"org-noter-kill-session"++++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffb5e0)
+++++set $bt = backtrace_next ($bt)
+++++set $fun = backtrace_function ($bt)
+++++xgettype $fun
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $fun.i
++++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++++if $type == Lisp_Symbol
++++++xprintsym $fun
+++++++xsymname $fun
++++++++xgetsym $fun
+++++++++xgetptr $fun
++++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++++set $bugfix = $fun.i
++++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++++set $symname = $ptr->u.s.name
+++++++xgetptr $symname
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $symname.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++if $ptr != 0
++++++++set $sym_name = (struct Lisp_String *) $ptr
++++++++xprintstr $sym_name
+++++++++if (! $arg0)
++++++++++set $data = (char *) $sym_name->u.s.data
++++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++++if $strsize == 0
+++++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"progn"++++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffb768)
+++++set $bt = backtrace_next ($bt)
+++++set $fun = backtrace_function ($bt)
+++++xgettype $fun
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $fun.i
++++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++++if $type == Lisp_Symbol
++++++xprintsym $fun
+++++++xsymname $fun
++++++++xgetsym $fun
+++++++++xgetptr $fun
++++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++++set $bugfix = $fun.i
++++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++++set $symname = $ptr->u.s.name
+++++++xgetptr $symname
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $symname.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++if $ptr != 0
++++++++set $sym_name = (struct Lisp_String *) $ptr
++++++++xprintstr $sym_name
+++++++++if (! $arg0)
++++++++++set $data = (char *) $sym_name->u.s.data
++++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++++if $strsize == 0
+++++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"if"++++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffb848)
+++++set $bt = backtrace_next ($bt)
+++++set $fun = backtrace_function ($bt)
+++++xgettype $fun
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $fun.i
++++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++++if $type == Lisp_Symbol
++++++xprintsym $fun
+++++++xsymname $fun
++++++++xgetsym $fun
+++++++++xgetptr $fun
++++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++++set $bugfix = $fun.i
++++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++++set $symname = $ptr->u.s.name
+++++++xgetptr $symname
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $symname.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++if $ptr != 0
++++++++set $sym_name = (struct Lisp_String *) $ptr
++++++++xprintstr $sym_name
+++++++++if (! $arg0)
++++++++++set $data = (char *) $sym_name->u.s.data
++++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++++if $strsize == 0
+++++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"let"++++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffb9b8)
+++++set $bt = backtrace_next ($bt)
+++++set $fun = backtrace_function ($bt)
+++++xgettype $fun
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $fun.i
++++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++++if $type == Lisp_Symbol
++++++xprintsym $fun
+++++++xsymname $fun
++++++++xgetsym $fun
+++++++++xgetptr $fun
++++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++++set $bugfix = $fun.i
++++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++++set $symname = $ptr->u.s.name
+++++++xgetptr $symname
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $symname.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++if $ptr != 0
++++++++set $sym_name = (struct Lisp_String *) $ptr
++++++++xprintstr $sym_name
+++++++++if (! $arg0)
++++++++++set $data = (char *) $sym_name->u.s.data
++++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++++if $strsize == 0
+++++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"progn"++++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffba98)
+++++set $bt = backtrace_next ($bt)
+++++set $fun = backtrace_function ($bt)
+++++xgettype $fun
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $fun.i
++++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++++if $type == Lisp_Symbol
++++++xprintsym $fun
+++++++xsymname $fun
++++++++xgetsym $fun
+++++++++xgetptr $fun
++++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++++set $bugfix = $fun.i
++++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++++set $symname = $ptr->u.s.name
+++++++xgetptr $symname
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $symname.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++if $ptr != 0
++++++++set $sym_name = (struct Lisp_String *) $ptr
++++++++xprintstr $sym_name
+++++++++if (! $arg0)
++++++++++set $data = (char *) $sym_name->u.s.data
++++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++++if $strsize == 0
+++++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"progn"++++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffbb78)
+++++set $bt = backtrace_next ($bt)
+++++set $fun = backtrace_function ($bt)
+++++xgettype $fun
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $fun.i
++++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++++if $type == Lisp_Symbol
++++++xprintsym $fun
+++++++xsymname $fun
++++++++xgetsym $fun
+++++++++xgetptr $fun
++++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++++set $bugfix = $fun.i
++++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++++set $symname = $ptr->u.s.name
+++++++xgetptr $symname
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $symname.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++if $ptr != 0
++++++++set $sym_name = (struct Lisp_String *) $ptr
++++++++xprintstr $sym_name
+++++++++if (! $arg0)
++++++++++set $data = (char *) $sym_name->u.s.data
++++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++++if $strsize == 0
+++++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"if"++++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffbc58)
+++++set $bt = backtrace_next ($bt)
+++++set $fun = backtrace_function ($bt)
+++++xgettype $fun
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $fun.i
++++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++++if $type == Lisp_Symbol
++++++xprintsym $fun
+++++++xsymname $fun
++++++++xgetsym $fun
+++++++++xgetptr $fun
++++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++++set $bugfix = $fun.i
++++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++++set $symname = $ptr->u.s.name
+++++++xgetptr $symname
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $symname.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++if $ptr != 0
++++++++set $sym_name = (struct Lisp_String *) $ptr
++++++++xprintstr $sym_name
+++++++++if (! $arg0)
++++++++++set $data = (char *) $sym_name->u.s.data
++++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++++if $strsize == 0
+++++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"let"++++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffbdb8)
+++++set $bt = backtrace_next ($bt)
+++++set $fun = backtrace_function ($bt)
+++++xgettype $fun
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $fun.i
++++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++++if $type == Lisp_Symbol
++++++xprintsym $fun
+++++++xsymname $fun
++++++++xgetsym $fun
+++++++++xgetptr $fun
++++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++++set $bugfix = $fun.i
++++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++++set $symname = $ptr->u.s.name
+++++++xgetptr $symname
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $symname.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++if $ptr != 0
++++++++set $sym_name = (struct Lisp_String *) $ptr
++++++++xprintstr $sym_name
+++++++++if (! $arg0)
++++++++++set $data = (char *) $sym_name->u.s.data
++++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++++if $strsize == 0
+++++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"org-noter--handle-kill-buffer"++++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffbfd0)
+++++set $bt = backtrace_next ($bt)
+++++set $fun = backtrace_function ($bt)
+++++xgettype $fun
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $fun.i
++++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++++if $type == Lisp_Symbol
++++++xprintsym $fun
+++++++xsymname $fun
++++++++xgetsym $fun
+++++++++xgetptr $fun
++++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++++set $bugfix = $fun.i
++++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++++set $symname = $ptr->u.s.name
+++++++xgetptr $symname
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $symname.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++if $ptr != 0
++++++++set $sym_name = (struct Lisp_String *) $ptr
++++++++xprintstr $sym_name
+++++++++if (! $arg0)
++++++++++set $data = (char *) $sym_name->u.s.data
++++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++++if $strsize == 0
+++++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"kill-buffer"++++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xe2200100)
+++++set $bt = backtrace_next ($bt)
+++++set $fun = backtrace_function ($bt)
+++++xgettype $fun
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $fun.i
++++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++++if $type == Lisp_Symbol
++++++xprintsym $fun
+++++++xsymname $fun
++++++++xgetsym $fun
+++++++++xgetptr $fun
++++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++++set $bugfix = $fun.i
++++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++++set $symname = $ptr->u.s.name
+++++++xgetptr $symname
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $symname.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++if $ptr != 0
++++++++set $sym_name = (struct Lisp_String *) $ptr
++++++++xprintstr $sym_name
+++++++++if (! $arg0)
++++++++++set $data = (char *) $sym_name->u.s.data
++++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++++if $strsize == 0
+++++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"kill-this-buffer"++++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffc2e0)
+++++set $bt = backtrace_next ($bt)
+++++set $fun = backtrace_function ($bt)
+++++xgettype $fun
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $fun.i
++++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++++if $type == Lisp_Symbol
++++++xprintsym $fun
+++++++xsymname $fun
++++++++xgetsym $fun
+++++++++xgetptr $fun
++++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++++set $bugfix = $fun.i
++++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++++set $symname = $ptr->u.s.name
+++++++xgetptr $symname
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $symname.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++if $ptr != 0
++++++++set $sym_name = (struct Lisp_String *) $ptr
++++++++xprintstr $sym_name
+++++++++if (! $arg0)
++++++++++set $data = (char *) $sym_name->u.s.data
++++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++++if $strsize == 0
+++++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"if"++++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffc488)
+++++set $bt = backtrace_next ($bt)
+++++set $fun = backtrace_function ($bt)
+++++xgettype $fun
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $fun.i
++++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++++if $type == Lisp_Symbol
++++++xprintsym $fun
+++++++xsymname $fun
++++++++xgetsym $fun
+++++++++xgetptr $fun
++++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++++set $bugfix = $fun.i
++++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++++set $symname = $ptr->u.s.name
+++++++xgetptr $symname
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $symname.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++if $ptr != 0
++++++++set $sym_name = (struct Lisp_String *) $ptr
++++++++xprintstr $sym_name
+++++++++if (! $arg0)
++++++++++set $data = (char *) $sym_name->u.s.data
++++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++++if $strsize == 0
+++++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"grfz-kill-a-buffer"++++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffc770)
+++++set $bt = backtrace_next ($bt)
+++++set $fun = backtrace_function ($bt)
+++++xgettype $fun
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $fun.i
++++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++++if $type == Lisp_Symbol
++++++xprintsym $fun
+++++++xsymname $fun
++++++++xgetsym $fun
+++++++++xgetptr $fun
++++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++++set $bugfix = $fun.i
++++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++++set $symname = $ptr->u.s.name
+++++++xgetptr $symname
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $symname.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++if $ptr != 0
++++++++set $sym_name = (struct Lisp_String *) $ptr
++++++++xprintstr $sym_name
+++++++++if (! $arg0)
++++++++++set $data = (char *) $sym_name->u.s.data
++++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++++if $strsize == 0
+++++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"funcall-interactively"++++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffc768)
+++++set $bt = backtrace_next ($bt)
+++++set $fun = backtrace_function ($bt)
+++++xgettype $fun
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $fun.i
++++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++++if $type == Lisp_Symbol
++++++xprintsym $fun
+++++++xsymname $fun
++++++++xgetsym $fun
+++++++++xgetptr $fun
++++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++++set $bugfix = $fun.i
++++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++++set $symname = $ptr->u.s.name
+++++++xgetptr $symname
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $symname.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++if $ptr != 0
++++++++set $sym_name = (struct Lisp_String *) $ptr
++++++++xprintstr $sym_name
+++++++++if (! $arg0)
++++++++++set $data = (char *) $sym_name->u.s.data
++++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++++if $strsize == 0
+++++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"call-interactively"++++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xe2200070)
+++++set $bt = backtrace_next ($bt)
+++++set $fun = backtrace_function ($bt)
+++++xgettype $fun
++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++set $bugfix = $fun.i
++++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
+++++if $type == Lisp_Symbol
++++++xprintsym $fun
+++++++xsymname $fun
++++++++xgetsym $fun
+++++++++xgetptr $fun
++++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++++set $bugfix = $fun.i
++++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
++++++++set $symname = $ptr->u.s.name
+++++++xgetptr $symname
++++++++if (CHECK_LISP_OBJECT_TYPE)
+++++++++set $bugfix = $symname.i
++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
+++++++if $ptr != 0
++++++++set $sym_name = (struct Lisp_String *) $ptr
++++++++xprintstr $sym_name
+++++++++if (! $arg0)
++++++++++set $data = (char *) $sym_name->u.s.data
++++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
++++++++++if $strsize == 0
+++++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
"command-execute"++++++printf " (0x%x)\n", backtrace_args ($bt)
 (0xffffcc08)
+++++set $bt = backtrace_next ($bt)
+i reg
rax            0x7ffff7fc2470      140737353884784
rbx            0x555555b2b8f0      93824998357232
rcx            0x3f                63
rdx            0x0                 0
rsi            0x7fffffff          2147483647
rdi            0x6                 6
rbp            0x7fffffffad30      0x7fffffffad30
rsp            0x7fffffffad28      0x7fffffffad28
r8             0x0                 0
r9             0x73                115
r10            0x7ffff5e4f868      140737318811752
r11            0x206               518
r12            0x0                 0
r13            0x555555b2b8f0      93824998357232
r14            0x100               256
r15            0x0                 0
rip            0x5555556cc062      0x5555556cc062 <terminate_due_to_signal>
eflags         0x246               [ PF ZF IF ]
cs             0x33                51
ss             0x2b                43
ds             0x0                 0
es             0x0                 0
fs             0x0                 0
gs             0x0                 0
+frame 3
#3  0x00005555557da4e4 in igc_check_freeable (start=start <at> entry=0x555555b2b8f0) at ./src/igc.c:3020
3020	      igc_assert (r == NULL);
+print a
No symbol "a" in current context.
+xtype
++xgettype $
+++if (CHECK_LISP_OBJECT_TYPE)
++++set $bugfix = $.i
The history is empty.


HTH, Gregor




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#76091; Package emacs. (Fri, 07 Feb 2025 07:54:01 GMT) Full text and rfc822 format available.

Message #17 received at 76091 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Gregor Zattler <telegraph <at> gmx.net>
Cc: gerd.moellmann <at> gmail.com, 76091 <at> debbugs.gnu.org, pipcet <at> protonmail.com
Subject: Re: bug#76091: 31.0.50; festure/igc: buffer.h:829: Emacs fatal
 error: assertion failed: BUFFERP (a)
Date: Fri, 07 Feb 2025 09:52:58 +0200
> From: Gregor Zattler <telegraph <at> gmx.net>
> Cc: 76091 <at> debbugs.gnu.org
> Date: Fri, 07 Feb 2025 00:15:25 +0100
> 
> Hi Eli,
> * Gregor Zattler <telegraph <at> gmx.net> [2025-02-06; 16:48 +01]:
> > I'll try to use an un-optimized build
> > but I'm afraid it's too slow for
> > everyday usage.
> 
> So I did, it's really slow, but just
> usable, and I got a hit at the same
> breakpoint.  I again played around with
> org-noter.  When I finally hit C-x k (a
> convenience function which kills current
> buffer) the graphical frame vanished.
> It might even be that this is expected
> behaviour of org-noter but the daemon
> now hangs which it surely should not.

This is a different problem, see below.

> As always first infos for this
> build, then GDB output

Your GDB seems either misconfigured or buggy: it constantly complains
about exceptions in Python, like this:

  #12 0x000055555575ffef in eval_sub (form=Python Exception <class 'gdb.error'>: value has been optimized out
  , form <at> entry=XIL(0x7fffbb79996b)) at ./src/eval.c:2560

Please either upgrade or downgrade your GDB, or figure out what is the
problem in the configuration (incompatible Python version, perhaps?) and
fix it.  It gets in the way of reading the backtraces.

> +run --debug-init -xrm --init-directory="${USER_EMACS_DIRECTORY}" --fg-daemon="${EMACS_SERVER_NAME}"

These "+" signs are due to "set trace-command on" setting you use,
which is fine for commands you type, but it also expands all the
user-defined commands we have in src/.gdbinit, and that makes the
results very hard to read, because the results are buried in gobs of
unhelpful command lines.  Example:

> ++set $bt = backtrace_top ()
> ++if backtrace_p ($bt)
> +++echo \n
> 
> +++echo Lisp Backtrace:\n
> Lisp Backtrace:
> +++xbacktrace
> ++++set $bt = backtrace_top ()
> ++++while backtrace_p ($bt)
> +++++set $fun = backtrace_function ($bt)
> +++++xgettype $fun
> ++++++if (CHECK_LISP_OBJECT_TYPE)
> +++++++set $bugfix = $fun.i
> ++++++set $type = (enum Lisp_Type) (USE_LSB_TAG ? (EMACS_INT) $bugfix & (1 << GCTYPEBITS) - 1 : (EMACS_UINT) $bugfix >> VALBITS)
> +++++if $type == Lisp_Symbol
> ++++++xprintsym $fun
> +++++++xsymname $fun
> ++++++++xgetsym $fun
> +++++++++xgetptr $fun
> ++++++++++if (CHECK_LISP_OBJECT_TYPE)
> +++++++++++set $bugfix = $fun.i
> ++++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
> +++++++++set $ptr = ((struct Lisp_Symbol *) ((char *) &lispsym + $ptr))
> ++++++++set $symname = $ptr->u.s.name
> +++++++xgetptr $symname
> ++++++++if (CHECK_LISP_OBJECT_TYPE)
> +++++++++set $bugfix = $symname.i
> ++++++++set $ptr = (EMACS_INT) $bugfix & VALMASK
> +++++++if $ptr != 0
> ++++++++set $sym_name = (struct Lisp_String *) $ptr
> ++++++++xprintstr $sym_name
> +++++++++if (! $arg0)
> ++++++++++set $data = (char *) $sym_name->u.s.data
> ++++++++++set $strsize = ($sym_name->u.s.size_byte < 0) ? ($sym_name->u.s.size & ~ARRAY_MARK_FLAG) : $sym_name->u.s.size_byte
> ++++++++++if $strsize == 0
> +++++++++++output ($sym_name->u.s.size > 1000) ? 0 : ($data[0])@($strsize)
> "delete-frame"++++++printf " (0x%x)\n", backtrace_args ($bt)
>  (0xffffaf10)

This should have been just the following 2 lines:

  Lisp backtrace:
  "delete-frame" (0xffffaf10)

So please don't use "set trace-command on" in the future, when
reporting results of GDB sessions here.

> Breakpoint 1, terminate_due_to_signal (sig=sig <at> entry=6, backtrace_limit=backtrace_limit <at> entry=2147483647) at ./src/emacs.c:425
> 425	{
> +t
> [Current thread is 1 (Thread 0x7ffff4f48000 (LWP 1750449))]
> +bt
> #0  terminate_due_to_signal (sig=sig <at> entry=6, backtrace_limit=backtrace_limit <at> entry=2147483647) at ./src/emacs.c:425
> #1  0x00005555557d9a62 in set_state (state=state <at> entry=IGC_STATE_DEAD) at ./src/igc.c:1017
> #2  0x00005555557d9a96 in igc_assert_fail (file=file <at> entry=0x555555903e97 "igc.c", line=line <at> entry=3020, msg=msg <at> entry=0x5555558f2277 "r == NULL") at ./src/igc.c:306
> #3  0x00005555557da4e4 in igc_check_freeable (start=start <at> entry=0x555555b2b8f0) at ./src/igc.c:3020
> #4  0x0000555555736d12 in xfree (block=block <at> entry=0x555555b2b8f0) at ./src/alloc.c:760
> #5  0x00005555556889f0 in x_delete_display (dpyinfo=dpyinfo <at> entry=0x555555b2b8f0) at ./src/xterm.c:31925
> #6  0x000055555569385e in x_delete_terminal (terminal=0x7fffd549a0c0) at ./src/xterm.c:32154
> #7  0x000055555567099a in Fdelete_terminal (terminal=terminal <at> entry=XIL(0x7fffd549a0c5), force=XIL(0x38)) at ./src/terminal.c:428

This seems to be a bug in x_delete_display: while dpyinfo is allocated
in x_term_init by igc_xzalloc, it is freed by xfree:

  struct x_display_info *
  x_term_init (Lisp_Object display_name, char *xrm_option, char *resource_name)
  {
    [...]
  #ifdef HAVE_MPS
    // FIXME/igc: use exact references
    dpyinfo = igc_xzalloc_ambig (sizeof *dpyinfo);
  #else
    dpyinfo = xzalloc (sizeof *dpyinfo);
  #endif

but

  static void
  x_delete_display (struct x_display_info *dpyinfo)
  {
    [...]
    xfree (dpyinfo);
  }




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#76091; Package emacs. (Fri, 07 Feb 2025 09:58:01 GMT) Full text and rfc822 format available.

Message #20 received at 76091 <at> debbugs.gnu.org (full text, mbox):

From: Pip Cet <pipcet <at> protonmail.com>
To: Gregor Zattler <telegraph <at> gmx.net>
Cc: Gerd Möllmann <gerd.moellmann <at> gmail.com>,
 76091 <at> debbugs.gnu.org, Eli Zaretskii <eliz <at> gnu.org>
Subject: Re: bug#76091: 31.0.50;
 festure/igc: buffer.h:829: Emacs fatal error: assertion failed:
 BUFFERP (a)
Date: Fri, 07 Feb 2025 09:57:15 +0000
"Gregor Zattler" <telegraph <at> gmx.net> writes:

> Hi Eli,
> * Gregor Zattler <telegraph <at> gmx.net> [2025-02-06; 16:48 +01]:
>> I'll try to use an un-optimized build
>> but I'm afraid it's too slow for
>> everyday usage.
>
> So I did, it's really slow, but just
> usable, and I got a hit at the same
> breakpoint.  I again played around with
> org-noter.  When I finally hit C-x k (a
> convenience function which kills current
> buffer) the graphical frame vanished.
> It might even be that this is expected
> behaviour of org-noter but the daemon
> now hangs which it surely should not.

> #0  terminate_due_to_signal (sig=sig <at> entry=6, backtrace_limit=backtrace_limit <at> entry=2147483647) at ./src/emacs.c:425
> #1  0x00005555557d9a62 in set_state (state=state <at> entry=IGC_STATE_DEAD) at ./src/igc.c:1017
> #2  0x00005555557d9a96 in igc_assert_fail (file=file <at> entry=0x555555903e97 "igc.c", line=line <at> entry=3020, msg=msg <at> entry=0x5555558f2277 "r == NULL") at ./src/igc.c:306
> #3  0x00005555557da4e4 in igc_check_freeable (start=start <at> entry=0x555555b2b8f0) at ./src/igc.c:3020
> #4  0x0000555555736d12 in xfree (block=block <at> entry=0x555555b2b8f0) at ./src/alloc.c:760
> #5  0x00005555556889f0 in x_delete_display (dpyinfo=dpyinfo <at> entry=0x555555b2b8f0) at ./src/xterm.c:31925

This is a different bug, which I've fixed.

Still looking for the original bug...

Pip





Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#76091; Package emacs. (Fri, 07 Feb 2025 10:42:01 GMT) Full text and rfc822 format available.

Message #23 received at 76091 <at> debbugs.gnu.org (full text, mbox):

From: Pip Cet <pipcet <at> protonmail.com>
To: Gerd Möllmann <gerd.moellmann <at> gmail.com>
Cc: 76091 <at> debbugs.gnu.org, Gregor Zattler <telegraph <at> gmx.net>,
 Eli Zaretskii <eliz <at> gnu.org>
Subject: Re: bug#76091: 31.0.50;
 festure/igc: buffer.h:829: Emacs fatal error: assertion failed:
 BUFFERP (a)
Date: Fri, 07 Feb 2025 10:41:18 +0000
"Eli Zaretskii" <eliz <at> gnu.org> writes:

>> Date: Thu, 06 Feb 2025 13:49:30 +0100
>> From:  Gregor Zattler via "Bug reports for GNU Emacs,
>>  the Swiss army knife of text editors" <bug-gnu-emacs <at> gnu.org>
>>
>> Dear Emacs developers, I don't know if
>> this failed assertion is due to using
>> MPS as GC.
>>
>> I played along with pdf-tools and
>> org-noter when it happened.
>>
>> This time I built with a current
>> checkout of feature/igc.
>>
>> GDB output even further below.
>>
>> The crashed session is still in GDB.
>> [...]
>> Breakpoint 1, terminate_due_to_signal (sig=sig <at> entry=6, backtrace_limit=backtrace_limit <at> entry=2147483647) at ./src/emacs.c:425
>> 425	{
>> +bt
>> #0  terminate_due_to_signal (sig=sig <at> entry=6, backtrace_limit=backtrace_limit <at> entry=2147483647) at ./src/emacs.c:425
>> #1 0x00005555555b8f5b in die (msg=msg <at> entry=0x5555559b40d0 "BUFFERP
>> (a)", file=file <at> entry=0x5555559b40c7 "buffer.h",
>> line=line <at> entry=829) at ./src/alloc.c:7683
>> #2  0x00005555555a0bda in XBUFFER (a=Python Exception <class 'gdb.error'>: value has been optimized out
>> ) at ./src/buffer.h:829
>> #3  0x00005555555a4370 in XBUFFER (a=Python Exception <class 'gdb.error'>: value has been optimized out
>> ) at ./src/xdisp.c:17024
>> #4  prepare_menu_bars () at ./src/xdisp.c:14041
>
> This is here:
>
>       FOR_EACH_FRAME (tail, frame)
> 	{
> 	  struct frame *f = XFRAME (frame);
> 	  struct window *w = XWINDOW (FRAME_SELECTED_WINDOW (f));
> 	  if (some_windows
> 	      && !f->redisplay
> 	      && !w->redisplay
> 	      && !XBUFFER (w->contents)->text->redisplay)
> 	    continue;
>
> And I don't understand how w->contents of a frame's selected window
> could fail the BUFFERP test.

Here's my current theory:

1. display_mode_lines calls

  record_unwind_protect
    (restore_frame_selected_window, XFRAME (new_frame)->selected_window);

2. that stores the selected window in the specpdl

3. the specpdl is then grown

4. we xpalloc the specpdl area, creating a copy of it and freeing the
old memory, which is still registered as a root.

5. igc_on_grow_specpdl calls mps_arena_park

6. the first thing mps_arena_park does is to complete the current GC
cycle.  This means that it will:

* look at the old specpdl area, which has been freed and may now contain
  invalid data
* *modify* the old specpdl area, which may have been reallocated so
  cause random memory corruption
* move objects by updating their pointers in the *old* specpdl area,
  leaving the pointers in the *new* specpdl area invalid

7. in our case, the selected window was supposed to have been moved but
the pointer in the *new* specpdl area continues to point to the old
memory, which is reused for something else which fails the BUFFERP test.

8. we unwind and restore the invalid selected window pointer.

I have a patch, but I'd like to discuss whether this is a plausible
theory first.  Gerd, if there's something that prevents this problem
from happening, and I missed it, could you briefly yell at me here?

Thanks!

Pip





Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#76091; Package emacs. (Fri, 07 Feb 2025 12:09:02 GMT) Full text and rfc822 format available.

Message #26 received at 76091 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Pip Cet <pipcet <at> protonmail.com>
Cc: gerd.moellmann <at> gmail.com, 76091 <at> debbugs.gnu.org, telegraph <at> gmx.net
Subject: Re: bug#76091: 31.0.50;
 festure/igc: buffer.h:829: Emacs fatal error: assertion failed:
 BUFFERP (a)
Date: Fri, 07 Feb 2025 14:08:16 +0200
> Date: Fri, 07 Feb 2025 10:41:18 +0000
> From: Pip Cet <pipcet <at> protonmail.com>
> Cc: Gregor Zattler <telegraph <at> gmx.net>, Eli Zaretskii <eliz <at> gnu.org>, 76091 <at> debbugs.gnu.org
> 
> "Eli Zaretskii" <eliz <at> gnu.org> writes:
> 
> >> Date: Thu, 06 Feb 2025 13:49:30 +0100
> >> From:  Gregor Zattler via "Bug reports for GNU Emacs,
> >>  the Swiss army knife of text editors" <bug-gnu-emacs <at> gnu.org>
> >>
> >> Dear Emacs developers, I don't know if
> >> this failed assertion is due to using
> >> MPS as GC.
> >>
> >> I played along with pdf-tools and
> >> org-noter when it happened.
> >>
> >> This time I built with a current
> >> checkout of feature/igc.
> >>
> >> GDB output even further below.
> >>
> >> The crashed session is still in GDB.
> >> [...]
> >> Breakpoint 1, terminate_due_to_signal (sig=sig <at> entry=6, backtrace_limit=backtrace_limit <at> entry=2147483647) at ./src/emacs.c:425
> >> 425	{
> >> +bt
> >> #0  terminate_due_to_signal (sig=sig <at> entry=6, backtrace_limit=backtrace_limit <at> entry=2147483647) at ./src/emacs.c:425
> >> #1 0x00005555555b8f5b in die (msg=msg <at> entry=0x5555559b40d0 "BUFFERP
> >> (a)", file=file <at> entry=0x5555559b40c7 "buffer.h",
> >> line=line <at> entry=829) at ./src/alloc.c:7683
> >> #2  0x00005555555a0bda in XBUFFER (a=Python Exception <class 'gdb.error'>: value has been optimized out
> >> ) at ./src/buffer.h:829
> >> #3  0x00005555555a4370 in XBUFFER (a=Python Exception <class 'gdb.error'>: value has been optimized out
> >> ) at ./src/xdisp.c:17024
> >> #4  prepare_menu_bars () at ./src/xdisp.c:14041
> >
> > This is here:
> >
> >       FOR_EACH_FRAME (tail, frame)
> > 	{
> > 	  struct frame *f = XFRAME (frame);
> > 	  struct window *w = XWINDOW (FRAME_SELECTED_WINDOW (f));
> > 	  if (some_windows
> > 	      && !f->redisplay
> > 	      && !w->redisplay
> > 	      && !XBUFFER (w->contents)->text->redisplay)
> > 	    continue;
> >
> > And I don't understand how w->contents of a frame's selected window
> > could fail the BUFFERP test.
> 
> Here's my current theory:
> 
> 1. display_mode_lines calls
> 
>   record_unwind_protect
>     (restore_frame_selected_window, XFRAME (new_frame)->selected_window);
> 
> 2. that stores the selected window in the specpdl
> 
> 3. the specpdl is then grown
> 
> 4. we xpalloc the specpdl area, creating a copy of it and freeing the
> old memory, which is still registered as a root.
> 
> 5. igc_on_grow_specpdl calls mps_arena_park
> 
> 6. the first thing mps_arena_park does is to complete the current GC
> cycle.  This means that it will:
> 
> * look at the old specpdl area, which has been freed and may now contain
>   invalid data
> * *modify* the old specpdl area, which may have been reallocated so
>   cause random memory corruption
> * move objects by updating their pointers in the *old* specpdl area,
>   leaving the pointers in the *new* specpdl area invalid
> 
> 7. in our case, the selected window was supposed to have been moved but
> the pointer in the *new* specpdl area continues to point to the old
> memory, which is reused for something else which fails the BUFFERP test.
> 
> 8. we unwind and restore the invalid selected window pointer.
> 
> I have a patch, but I'd like to discuss whether this is a plausible
> theory first.  Gerd, if there's something that prevents this problem
> from happening, and I missed it, could you briefly yell at me here?

If this is possible, all hell will break loose.  The selected window
of any frame must be a leaf window, and its contents member must
identify a buffer, at all times.  We must ensure this is true whenever
our code runs.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#76091; Package emacs. (Fri, 07 Feb 2025 13:49:01 GMT) Full text and rfc822 format available.

Message #29 received at 76091 <at> debbugs.gnu.org (full text, mbox):

From: Gerd Möllmann <gerd.moellmann <at> gmail.com>
To: Pip Cet <pipcet <at> protonmail.com>
Cc: 76091 <at> debbugs.gnu.org, Gregor Zattler <telegraph <at> gmx.net>,
 Eli Zaretskii <eliz <at> gnu.org>
Subject: Re: bug#76091: 31.0.50; festure/igc: buffer.h:829: Emacs fatal error:
 assertion failed: BUFFERP (a)
Date: Fri, 7 Feb 2025 14:47:55 +0100
[Message part 1 (text/plain, inline)]
On 7. Feb 2025, at 11:41, Pip Cet <pipcet <at> protonmail.com> wrote:
> 
> I have a patch, but I'd like to discuss whether this is a plausible
> theory first.  Gerd, if there's something that prevents this problem
> from happening, and I missed it, could you briefly yell at me here?

Good catch!

I think he idea I had with the igc_on_... is mistaken, one must not free the memory of a root while the MPS is not parked.

[Message part 2 (text/html, inline)]

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#76091; Package emacs. (Fri, 07 Feb 2025 13:56:02 GMT) Full text and rfc822 format available.

Message #32 received at 76091 <at> debbugs.gnu.org (full text, mbox):

From: Pip Cet <pipcet <at> protonmail.com>
To: Gerd Möllmann <gerd.moellmann <at> gmail.com>
Cc: 76091 <at> debbugs.gnu.org, Gregor Zattler <telegraph <at> gmx.net>,
 Eli Zaretskii <eliz <at> gnu.org>
Subject: Re: bug#76091: 31.0.50;
 festure/igc: buffer.h:829: Emacs fatal error: assertion failed:
 BUFFERP (a)
Date: Fri, 07 Feb 2025 13:55:19 +0000
Gerd Möllmann <gerd.moellmann <at> gmail.com> writes:

> On 7. Feb 2025, at 11:41, Pip Cet <pipcet <at> protonmail.com> wrote:
>
>  I have a patch, but I'd like to discuss whether this is a plausible
>  theory first.  Gerd, if there's something that prevents this problem
>  from happening, and I missed it, could you briefly yell at me here?
>
> Good catch!

Thanks!

> I think he idea I had with the igc_on_... is mistaken,

I've rewritten the root resizing functions to always follow the

1. allocate new zeroed root
2. register new root
3. copy contents from old root
4. if this fails, try again
5. save new root
6. unregister old root
7. free old root

pattern.  It's a bit complicated, but avoids the need for parking the
arena in these cases.  And, yes, it'll waste some memory, but these are
roots, and roots are supposed to be small.  I'd rather do it that way
and turn them into non-roots than figure out how to use realloc() on an
MPS root, TBH.

> one must not free the memory of a root while the MPS is not parked.

I think the surprising thing is that parking the arena will cause GC
activity.  It's best to avoid parking it except when walking the pools,
I think.

Still testing the patch...

Pip





Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#76091; Package emacs. (Fri, 07 Feb 2025 15:24:01 GMT) Full text and rfc822 format available.

Message #35 received at 76091 <at> debbugs.gnu.org (full text, mbox):

From: Pip Cet <pipcet <at> protonmail.com>
To: Gerd Möllmann <gerd.moellmann <at> gmail.com>,
 Helmut Eller <eller.helmut <at> gmail.com>
Cc: 76091 <at> debbugs.gnu.org, Gregor Zattler <telegraph <at> gmx.net>,
 Eli Zaretskii <eliz <at> gnu.org>
Subject: Re: bug#76091: 31.0.50;
 festure/igc: buffer.h:829: Emacs fatal error: assertion failed:
 BUFFERP (a)
Date: Fri, 07 Feb 2025 15:23:08 +0000
Pip Cet <pipcet <at> protonmail.com> writes:

> Gerd Möllmann <gerd.moellmann <at> gmail.com> writes:
>
>> On 7. Feb 2025, at 11:41, Pip Cet <pipcet <at> protonmail.com> wrote:
>>
>>  I have a patch, but I'd like to discuss whether this is a plausible
>>  theory first.  Gerd, if there's something that prevents this problem
>>  from happening, and I missed it, could you briefly yell at me here?
>>
>> Good catch!
>
> Thanks!
>
>> I think he idea I had with the igc_on_... is mistaken,
>
> I've rewritten the root resizing functions to always follow the
>
> 1. allocate new zeroed root
> 2. register new root
> 3. copy contents from old root
> 4. if this fails, try again
> 5. save new root
> 6. unregister old root
> 7. free old root
>
> pattern.  It's a bit complicated, but avoids the need for parking the
> arena in these cases.  And, yes, it'll waste some memory, but these are
> roots, and roots are supposed to be small.  I'd rather do it that way
> and turn them into non-roots than figure out how to use realloc() on an
> MPS root, TBH.

I should point out that the memory waste is temporary, only while we
simulate realloc by allocating a new area, then freeing the old one.

>> one must not free the memory of a root while the MPS is not parked.
>
> I think the surprising thing is that parking the arena will cause GC
> activity.  It's best to avoid parking it except when walking the pools,
> I think.

But if you think parking the area *more* is a solution, please let me
know!

> Still testing the patch...

Well, here it is:

It still needs more testing, thought, and comments.  All the volatile
stuff is needed because we can't copy a union with word atomicity: all
we have is memcpy, which might copy bytewise and result in an invalid
intermediate state.  OTOH, we don't know anything about the type in
igc_xpalloc_ambig and igc_xpalloc_exact, so we have to fake it and hope
mps_word_t alignment is good enough.

(Of course, with WIDE_EMACS_INT, mps_word_t is not good enough; unless
we carefully write the scan function not to assume that the two
half-words comprising a 64-bit Lisp_Object are in sync.  As Eli was very
opposed to the idea of removing WIDE_EMACS_INT again, we might have to
find a workaround there.)

Also, "scrans" should be "scans", but I'd rather not edit a patch I've
tested and am about to post :-)

Helmut, can you look over the larger_marker_vector changes?  While
testing, I hit easserts there, so I added some new ones to catch the
situation earlier.  I think the old code was fine, but the new one
should also be, right?

Pip

From 8521107ab2a9033647082236517770a1604e53c9 Mon Sep 17 00:00:00 2001
From: Pip Cet <pipcet <at> protonmail.com>
Subject: [PATCH] Bug#76091

---
 src/alloc.c |  67 +++++++++-------
 src/eval.c  |  26 +++++--
 src/igc.c   | 219 +++++++++++++++++++++++++++++++++++++++-------------
 src/igc.h   |   2 +
 src/lisp.h  |   3 +-
 src/print.c |   5 +-
 6 files changed, 233 insertions(+), 89 deletions(-)

diff --git a/src/alloc.c b/src/alloc.c
index 8f24ca5e0f3..f0c0e0538b5 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -801,32 +801,13 @@ xnrealloc (void *pa, ptrdiff_t nitems, ptrdiff_t item_size)
 }
 
 
-/* Grow PA, which points to an array of *NITEMS items, and return the
-   location of the reallocated array, updating *NITEMS to reflect its
-   new size.  The new array will contain at least NITEMS_INCR_MIN more
-   items, but will not contain more than NITEMS_MAX items total.
-   ITEM_SIZE is the size of each item, in bytes.
+/* Calculate the new allocation size for xpalloc.  This needs to be a
+   separate function because MPS always allocates a new area, rather
+   than calling xrealloc as xpalloc does.  */
 
-   ITEM_SIZE and NITEMS_INCR_MIN must be positive.  *NITEMS must be
-   nonnegative.  If NITEMS_MAX is -1, it is treated as if it were
-   infinity.
-
-   If PA is null, then allocate a new array instead of reallocating
-   the old one.
-
-   Block interrupt input as needed.  If memory exhaustion occurs, set
-   *NITEMS to zero if PA is null, and signal an error (i.e., do not
-   return).
-
-   Thus, to grow an array A without saving its old contents, do
-   { xfree (A); A = NULL; A = xpalloc (NULL, &AITEMS, ...); }.
-   The A = NULL avoids a dangling pointer if xpalloc exhausts memory
-   and signals an error, and later this code is reexecuted and
-   attempts to free A.  */
-
-void *
-xpalloc (void *pa, ptrdiff_t *nitems, ptrdiff_t nitems_incr_min,
-	 ptrdiff_t nitems_max, ptrdiff_t item_size)
+ptrdiff_t
+xpalloc_nbytes (void *pa, ptrdiff_t *nitems, ptrdiff_t nitems_incr_min,
+		ptrdiff_t nitems_max, ptrdiff_t item_size)
 {
   ptrdiff_t n0 = *nitems;
   eassume (0 < item_size && 0 < nitems_incr_min && 0 <= n0 && -1 <= nitems_max);
@@ -864,8 +845,42 @@ xpalloc (void *pa, ptrdiff_t *nitems, ptrdiff_t nitems_incr_min,
 	  || (0 <= nitems_max && nitems_max < n)
 	  || ckd_mul (&nbytes, n, item_size)))
     memory_full (SIZE_MAX);
-  pa = xrealloc (pa, nbytes);
   *nitems = n;
+  return nbytes;
+}
+
+/* Grow PA, which points to an array of *NITEMS items, and return the
+   location of the reallocated array, updating *NITEMS to reflect its
+   new size.  The new array will contain at least NITEMS_INCR_MIN more
+   items, but will not contain more than NITEMS_MAX items total.
+   ITEM_SIZE is the size of each item, in bytes.
+
+   ITEM_SIZE and NITEMS_INCR_MIN must be positive.  *NITEMS must be
+   nonnegative.  If NITEMS_MAX is -1, it is treated as if it were
+   infinity.
+
+   If PA is null, then allocate a new array instead of reallocating
+   the old one.
+
+   Block interrupt input as needed.  If memory exhaustion occurs, set
+   *NITEMS to zero if PA is null, and signal an error (i.e., do not
+   return).
+
+   Thus, to grow an array A without saving its old contents, do
+   { xfree (A); A = NULL; A = xpalloc (NULL, &AITEMS, ...); }.
+   The A = NULL avoids a dangling pointer if xpalloc exhausts memory
+   and signals an error, and later this code is reexecuted and
+   attempts to free A.  */
+
+void *
+xpalloc (void *pa, ptrdiff_t *nitems, ptrdiff_t nitems_incr_min,
+	 ptrdiff_t nitems_max, ptrdiff_t item_size)
+{
+  ptrdiff_t nitems_new = *nitems;
+  ptrdiff_t nbytes = xpalloc_nbytes (pa, &nitems_new, nitems_incr_min,
+				     nitems_max, item_size);
+  pa = xrealloc (pa, nbytes);
+  *nitems = nitems_new;
   return pa;
 }
 
diff --git a/src/eval.c b/src/eval.c
index 1fbed2d96b9..e542efd9476 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -225,12 +225,15 @@ init_eval_once (void)
 init_eval_once_for_pdumper (void)
 {
   enum { size = 50 };
-  union specbinding *pdlvec = malloc ((size + 1) * sizeof *specpdl);
+  union specbinding *pdlvec = xzalloc ((size + 1) * sizeof *specpdl);
   specpdl = specpdl_ptr = pdlvec + 1;
   specpdl_end = specpdl + size;
 #ifdef HAVE_MPS
   for (int i = 0; i < size; ++i)
-    specpdl[i].kind = SPECPDL_FREE;
+    {
+      specpdl[i].kind = SPECPDL_FREE;
+      memset (&specpdl[i], 0, sizeof specpdl[i]);
+    }
   igc_on_alloc_main_thread_specpdl ();
 #endif
 }
@@ -2479,15 +2482,23 @@ grow_specpdl_allocation (void)
   ptrdiff_t size = specpdl_end - specpdl;
   ptrdiff_t pdlvecsize = size + 1;
   eassert (max_size > size);
+
+#ifdef HAVE_MPS
+  ptrdiff_t old_pdlvecsize = pdlvecsize;
+  ptrdiff_t nbytes = xpalloc_nbytes (pdlvec, &pdlvecsize, 1, max_size + 1,
+				     sizeof *specpdl);
+  union specbinding *new_pdlvec = xzalloc (nbytes);
+  igc_replace_specpdl (pdlvec, old_pdlvecsize,
+		       new_pdlvec, pdlvecsize);
+  union specbinding *old_pdlvec = pdlvec;
+  pdlvec = new_pdlvec;
+  xfree (old_pdlvec);
+#else
   pdlvec = xpalloc (pdlvec, &pdlvecsize, 1, max_size + 1, sizeof *specpdl);
+#endif
   specpdl = pdlvec + 1;
   specpdl_end = specpdl + pdlvecsize - 1;
   specpdl_ptr = specpdl_ref_to_ptr (count);
-#ifdef HAVE_MPS
-  for (int i = size; i < pdlvecsize - 1; ++i)
-    specpdl[i].kind = SPECPDL_FREE;
-  igc_on_grow_specpdl ();
-#endif
 }
 
 /* Eval a sub-expression of the current expression (i.e. in the same
@@ -3847,6 +3858,7 @@ unbind_to (specpdl_ref count, Lisp_Object value)
       this_binding = *--specpdl_ptr;
 #ifdef HAVE_MPS
       specpdl_ptr->kind = SPECPDL_FREE;
+      memset (specpdl_ptr, 0, sizeof *specpdl_ptr);
 #endif
       do_one_unbind (&this_binding, true, SET_INTERNAL_UNBIND);
     }
diff --git a/src/igc.c b/src/igc.c
index af73406cecc..08e8f37387f 100644
--- a/src/igc.c
+++ b/src/igc.c
@@ -2986,6 +2986,59 @@ igc_on_grow_specpdl (void)
   }
 }
 
+void
+igc_replace_specpdl (volatile union specbinding *old_pdlvec, ptrdiff_t old_entries,
+		     volatile union specbinding *new_pdlvec, ptrdiff_t new_entries)
+{
+  struct igc *gc = global_igc;
+  mps_root_t root;
+  for (ptrdiff_t i = 0; i < new_entries; i++)
+    new_pdlvec[i].kind = SPECPDL_FREE;
+
+  volatile union specbinding *new_specpdl = new_pdlvec + 1;
+  struct igc_thread_list *t = current_thread->gc_info;
+  mps_res_t res
+    = mps_root_create_area (&root, gc->arena, mps_rank_exact (), 0,
+			    (void *)new_specpdl, (void *)(new_pdlvec + new_entries),
+			    scan_specpdl, t);
+  IGC_CHECK_RES (res);
+  struct igc_root_list *old_root = t->d.specpdl_root;
+  t->d.specpdl_root
+    = register_root (gc, root, (void *)new_specpdl, (void *)(new_pdlvec + new_entries),
+		     false, "specpdl");
+  volatile union specbinding orig;
+
+  for (ptrdiff_t i = 0; i < old_entries; i++)
+    {
+    try_again:;
+      orig = old_pdlvec[i];
+      if (memcmp ((void *)&orig, (void *)(&old_pdlvec[i]), sizeof orig))
+	{
+	  /* We tried to create a snapshot of old_pdlvec[i] on the
+	     stack, which would pin all pointers in old_pdlvec[i].  But
+	     we failed, because a pointer in old_pdlvec[i] was updated
+	     by GC while we were creating the copy.  Try again.  */
+	  goto try_again;
+	}
+      volatile union specbinding temp = orig;
+      temp.kind = SPECPDL_FREE;
+      new_pdlvec[i] = temp;
+      new_pdlvec[i].kind = orig.kind;
+      if (memcmp ((void *)(&new_pdlvec[i]), (void *)(&old_pdlvec[i]), sizeof orig))
+	{
+	  /* old_pdlvec[i] was updated by GC even though all of its
+	     references should have been pinned by the volatile "orig"
+	     copy on the stack!  This really shouldn't happen!  */
+	  emacs_abort ();
+	}
+    }
+
+  if (memcmp ((void *)new_pdlvec, (void *)old_pdlvec, old_entries * sizeof (old_pdlvec[0])))
+    emacs_abort ();
+
+  igc_destroy_root_with_start (old_root->d.start);
+}
+
 static igc_root_list *
 root_create_exact_n (Lisp_Object *start, size_t n)
 {
@@ -3193,16 +3246,42 @@ igc_park_arena (void)
 igc_grow_rdstack (struct read_stack *rs)
 {
   struct igc *gc = global_igc;
-  IGC_WITH_PARKED (gc)
-  {
-    igc_destroy_root_with_start (rs->stack);
-    ptrdiff_t old_nitems = rs->size;
-    rs->stack = xpalloc (rs->stack, &rs->size, 1, -1, sizeof *rs->stack);
-    for (ptrdiff_t i = old_nitems; i < rs->size; ++i)
-      rs->stack[i].type = RE_free;
-    root_create_exact (gc, rs->stack, rs->stack + rs->size, scan_rdstack,
-		       "rdstack");
-  }
+  ptrdiff_t old_nitems = rs->size;
+  ptrdiff_t nbytes = xpalloc_nbytes (rs->stack, &rs->size, 1, -1, sizeof *rs->stack);
+  struct read_stack_entry *new_stack = xzalloc (nbytes);
+  for (ptrdiff_t i = 0; i < rs->size; i++)
+    new_stack[i].type = RE_free;
+  volatile struct read_stack_entry orig;
+  struct read_stack *old_stack = rs;
+  root_create_exact (gc, new_stack, (char *)new_stack + nbytes, scan_rdstack,
+		     "rdstack");
+  for (ptrdiff_t i = 0; i < old_nitems; i++)
+    {
+    try_again:;
+      orig = old_stack->stack[i];
+      if (memcmp ((void *)&orig, (void *)(&old_stack->stack[i]), sizeof orig))
+	{
+	  /* We tried to create a snapshot of old_stack[i] on the
+	     stack, which would pin all pointers in old_stack[i].  But
+	     we failed, because a pointer in old_stack[i] was updated
+	     by GC while we were creating the copy.  Try again.  */
+	  goto try_again;
+	}
+      volatile struct read_stack_entry temp = orig;
+      temp.type = RE_free;
+      new_stack[i] = temp;
+      new_stack[i].type = orig.type;
+      if (memcmp ((void *)(&new_stack[i]), (void *)(&old_stack->stack[i]), sizeof orig))
+	{
+	  /* old_pdlvec[i] was updated by GC even though all of its
+	     references should have been pinned by the volatile "orig"
+	     copy on the stack!  This really shouldn't happen!  */
+	  emacs_abort ();
+	}
+    }
+
+  igc_xfree (rs->stack);
+  rs->stack = new_stack;
 }
 
 Lisp_Object *
@@ -3249,28 +3328,35 @@ igc_xzalloc_ambig (size_t size)
 void *
 igc_xnmalloc_ambig (ptrdiff_t nitems, ptrdiff_t item_size)
 {
-  return igc_xzalloc_ambig (nitems * item_size);
+  ptrdiff_t nbytes;
+  if (ckd_mul (&nbytes, nitems, item_size) || SIZE_MAX < nbytes)
+    memory_full (SIZE_MAX);
+  return igc_xzalloc_ambig (nbytes);
 }
 
 void *
 igc_realloc_ambig (void *block, size_t size)
 {
   struct igc *gc = global_igc;
-  void *p;
-  IGC_WITH_PARKED (gc)
-  {
-    igc_destroy_root_with_start (block);
-    /* Can't make a root that has zero length.  Want one to be able to
-       detect calling igc_free on something not having a root.  */
-    size_t new_size = (size == 0 ? IGC_ALIGN_DFLT : size);
-    p = xrealloc (block, new_size);
-    void *end = (char *)p + new_size;
-    root_create_ambig (global_igc, p, end, "realloc-ambig");
-  }
+  void *p = xzalloc (size);
+  struct igc_root_list *r = root_find (block);
+  ptrdiff_t old_size = (char *)r->d.end - (char *)r->d.start;
+  root_create_ambig (gc, p, (char *)p + size, "realloc-ambig");
+  mps_word_t *old_pw = block;
+  mps_word_t *new_pw = p;
+  for (ptrdiff_t i = 0; i < old_size / sizeof (mps_word_t); i++)
+    {
+      volatile mps_word_t word = old_pw[i];
+      if (memcmp ((void *)&word, old_pw + i, sizeof word))
+	emacs_abort ();
+      new_pw[i] = word;
+    }
+  memcpy (new_pw + (old_size / sizeof (mps_word_t)), old_pw + (old_size / sizeof (mps_word_t)),
+	  old_size % sizeof (mps_word_t));
+  igc_xfree (block);
   return p;
 }
 
-
 void
 igc_xfree (void *p)
 {
@@ -3284,17 +3370,23 @@ igc_xfree (void *p)
 }
 
 void *
-igc_xpalloc_ambig (void *pa, ptrdiff_t *nitems, ptrdiff_t nitems_incr_min,
+igc_xpalloc_ambig (void *old_pa, ptrdiff_t *nitems, ptrdiff_t nitems_incr_min,
 		   ptrdiff_t nitems_max, ptrdiff_t item_size)
 {
-  IGC_WITH_PARKED (global_igc)
-  {
-    igc_destroy_root_with_start (pa);
-    pa = xpalloc (pa, nitems, nitems_incr_min, nitems_max, item_size);
-    char *end = (char *) pa + *nitems * item_size;
-    root_create_ambig (global_igc, pa, end, "xpalloc-ambig");
-  }
-  return pa;
+  ptrdiff_t old_nitems = *nitems;
+  ptrdiff_t new_nitems = *nitems;
+  ptrdiff_t nbytes = xpalloc_nbytes (old_pa, &new_nitems, nitems_incr_min,
+				     nitems_max, item_size);
+  void *new_pa = xzalloc (nbytes);
+  char *end = (char *)new_pa + nbytes;
+  root_create_ambig (global_igc, new_pa, end, "xpalloc-ambig");
+  mps_word_t *old_word = old_pa;
+  mps_word_t *new_word = new_pa;
+  for (ptrdiff_t i = 0; i < (old_nitems * item_size) / sizeof (mps_word_t); i++)
+    new_word[i] = old_word[i];
+  *nitems = new_nitems;
+  igc_xfree (old_pa);
+  return new_pa;
 }
 
 void
@@ -3303,29 +3395,48 @@ igc_xpalloc_exact (void **pa_cell, ptrdiff_t *nitems,
 		   ptrdiff_t item_size, igc_scan_area_t scan_area,
 		   void *closure)
 {
-  IGC_WITH_PARKED (global_igc)
-  {
-    void *pa = *pa_cell;
-    igc_destroy_root_with_start (pa);
-    pa = xpalloc (pa, nitems, nitems_incr_min, nitems_max, item_size);
-    char *end = (char *)pa + *nitems * item_size;
-    root_create (global_igc, pa, end, mps_rank_exact (), (mps_area_scan_t) scan_area,
-		 closure, false, "xpalloc-exact");
-    *pa_cell = pa;
-  }
+  void *old_pa = *pa_cell;
+  ptrdiff_t old_nitems = *nitems;
+  ptrdiff_t new_nitems = *nitems;
+  ptrdiff_t nbytes = xpalloc_nbytes (old_pa, &new_nitems, nitems_incr_min,
+				     nitems_max, item_size);
+  void *new_pa = xzalloc (nbytes);
+  char *end = (char *)new_pa + nbytes;
+  root_create (global_igc, new_pa, end, mps_rank_exact (), (mps_area_scan_t) scan_area,
+	       closure, false, "xpalloc-exact");
+  for (ptrdiff_t i = 0; i < (old_nitems); i++)
+    {
+      volatile mps_word_t area[(item_size + (sizeof (mps_word_t) - 1)) / (sizeof (mps_word_t))];
+      memcpy ((void *)area, (char *)old_pa + item_size * i, item_size);
+      if (memcmp ((void *)area, (char *)old_pa + item_size * i, item_size))
+	emacs_abort ();
+      memcpy ((char *)new_pa + item_size * i, (void *)area, item_size);
+    }
+  if (memcmp (old_pa, new_pa, old_nitems * item_size))
+    emacs_abort ();
+  eassert ((item_size) % sizeof (mps_word_t) == 0);
+  *pa_cell = new_pa;
+  *nitems = new_nitems;
+  igc_xfree (old_pa);
 }
 
 void *
-igc_xnrealloc_ambig (void *pa, ptrdiff_t nitems, ptrdiff_t item_size)
+igc_xnrealloc_ambig (void *old_pa, ptrdiff_t nitems, ptrdiff_t item_size)
 {
-  IGC_WITH_PARKED (global_igc)
-  {
-    igc_destroy_root_with_start (pa);
-    pa = xnrealloc (pa, nitems, item_size);
-    char *end = (char *) pa + nitems * item_size;
-    root_create_ambig (global_igc, pa, end, "xnrealloc-ambig");
-  }
-  return pa;
+  struct igc_root_list *r = root_find (old_pa);
+  ptrdiff_t old_nbytes = (char *)r->d.end - (char *)r->d.start;
+  ptrdiff_t nbytes;
+  if (ckd_mul (&nbytes, nitems, item_size) || SIZE_MAX < nbytes)
+    memory_full (SIZE_MAX);
+  void *new_pa = xzalloc (nbytes);
+  char *end = (char *) new_pa + nbytes;
+  root_create_ambig (global_igc, new_pa, end, "xnrealloc-ambig");
+  memcpy (new_pa, old_pa, old_nbytes);
+  if (memcmp (new_pa, old_pa, old_nbytes))
+    emacs_abort ();
+  igc_xfree (old_pa);
+
+  return new_pa;
 }
 
 static void
@@ -4408,9 +4519,9 @@ larger_marker_vector (Lisp_Object v)
   ptrdiff_t old_len = NILP (v) ? 0 : ASIZE (v);
   ptrdiff_t new_len = max (2, 2 * old_len);
   Lisp_Object new_v = alloc_marker_vector (new_len, Qnil);
-  ptrdiff_t i = 0;
+  ptrdiff_t i = 1;
   if (VECTORP (v))
-    for (i = 1; i < ASIZE (v); ++i)
+    for (; i < ASIZE (v); ++i)
       ASET (new_v, i, AREF (v, i));
   for (; i < ASIZE (new_v) - 1; ++i)
     ASET (new_v, i, make_fixnum (i + 1));
@@ -4430,6 +4541,8 @@ igc_add_marker (struct buffer *b, struct Lisp_Marker *m)
       v = BUF_MARKERS (b) = larger_marker_vector (v);
       next_free = XFIXNUM (AREF (v, 0));
     }
+  /* unrelated; triggered during testing */
+  eassert (FIXNUMP (AREF (v, next_free)));
   ASET (v, 0, AREF (v, next_free));
   ASET (v, next_free, make_lisp_ptr (m, Lisp_Vectorlike));
   m->index = next_free;
diff --git a/src/igc.h b/src/igc.h
index d4be8e4c03d..7ccb931550d 100644
--- a/src/igc.h
+++ b/src/igc.h
@@ -141,6 +141,8 @@ #define EMACS_IGC_H
 specpdl_ref igc_park_arena (void);
 void igc_postmortem (void);
 void igc_on_grow_specpdl (void);
+void igc_replace_specpdl (volatile union specbinding *old_specpdl, ptrdiff_t old_nitems,
+			  volatile union specbinding *new_specpdl, ptrdiff_t new_nitems);
 void igc_on_alloc_main_thread_specpdl (void);
 void igc_on_alloc_main_thread_bc (void);
 void igc_on_staticpros_complete (void);
diff --git a/src/lisp.h b/src/lisp.h
index 7dfcda223df..e48e1c5e121 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -3799,7 +3799,7 @@ #define DEFVAR_KBOARD(lname, vname, doc)			\
 enum specbind_tag
 {
 # ifdef HAVE_MPS
-  SPECPDL_FREE,
+  SPECPDL_FREE = 0, /* must be 0 so xzalloc'd memory scrans without crashing */
 # endif
   SPECPDL_UNWIND,		/* An unwind_protect function on Lisp_Object.  */
   SPECPDL_UNWIND_ARRAY,		/* Likewise, on an array that needs freeing.
@@ -5903,6 +5903,7 @@ NATIVE_COMP_FUNCTION_DYNP (Lisp_Object a)
   ATTRIBUTE_MALLOC_SIZE ((1,2)) ATTRIBUTE_RETURNS_NONNULL;
 extern void *xnrealloc (void *, ptrdiff_t, ptrdiff_t)
   ATTRIBUTE_ALLOC_SIZE ((2,3)) ATTRIBUTE_RETURNS_NONNULL;
+extern ptrdiff_t xpalloc_nbytes (void *, ptrdiff_t *, ptrdiff_t, ptrdiff_t, ptrdiff_t);
 extern void *xpalloc (void *, ptrdiff_t *, ptrdiff_t, ptrdiff_t, ptrdiff_t)
   ATTRIBUTE_RETURNS_NONNULL;
 
diff --git a/src/print.c b/src/print.c
index 6fc13d4dd39..fc689d11e7a 100644
--- a/src/print.c
+++ b/src/print.c
@@ -1402,12 +1402,13 @@ pp_stack_push_values (Lisp_Object vectorlike, ptrdiff_t start, ptrdiff_t n)
     return;
   if (ppstack.sp >= ppstack.size)
     grow_pp_stack ();
+  memset (&ppstack.stack[ppstack.sp], 0, sizeof ppstack.stack[ppstack.sp]);
+  ppstack.stack[ppstack.sp].is_free = false;
   ppstack.stack[ppstack.sp++]
     = (struct print_pp_entry){.start = start,
 			      .n = n,
 			      .u.vectorlike = vectorlike
 			     };
-  ppstack.stack[ppstack.sp - 1].is_free = false;
 }
 #else
 static inline void
@@ -2222,7 +2223,7 @@ named_escape (int i)
 enum print_entry_type
 {
 #ifdef HAVE_MPS
-  PE_free,
+  PE_free = 0, /* must be zero so xzalloc'd memory scans without crashing */
 #endif
   PE_list,			/* print rest of list */
   PE_rbrac,			/* print ")" */
-- 
2.48.1






Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#76091; Package emacs. (Fri, 07 Feb 2025 15:32:02 GMT) Full text and rfc822 format available.

Message #38 received at 76091 <at> debbugs.gnu.org (full text, mbox):

From: Pip Cet <pipcet <at> protonmail.com>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: gerd.moellmann <at> gmail.com, 76091 <at> debbugs.gnu.org, telegraph <at> gmx.net
Subject: Re: bug#76091: 31.0.50;
 festure/igc: buffer.h:829: Emacs fatal error: assertion failed:
 BUFFERP (a)
Date: Fri, 07 Feb 2025 15:30:45 +0000
"Eli Zaretskii" <eliz <at> gnu.org> writes:

>> Date: Fri, 07 Feb 2025 10:41:18 +0000
>> From: Pip Cet <pipcet <at> protonmail.com>
>> Cc: Gregor Zattler <telegraph <at> gmx.net>, Eli Zaretskii <eliz <at> gnu.org>, 76091 <at> debbugs.gnu.org
>>
>> "Eli Zaretskii" <eliz <at> gnu.org> writes:
>>
>> >> Date: Thu, 06 Feb 2025 13:49:30 +0100
>> >> From:  Gregor Zattler via "Bug reports for GNU Emacs,
>> >>  the Swiss army knife of text editors" <bug-gnu-emacs <at> gnu.org>
>> >>
>> >> Dear Emacs developers, I don't know if
>> >> this failed assertion is due to using
>> >> MPS as GC.
>> >>
>> >> I played along with pdf-tools and
>> >> org-noter when it happened.
>> >>
>> >> This time I built with a current
>> >> checkout of feature/igc.
>> >>
>> >> GDB output even further below.
>> >>
>> >> The crashed session is still in GDB.
>> >> [...]
>> >> Breakpoint 1, terminate_due_to_signal (sig=sig <at> entry=6, backtrace_limit=backtrace_limit <at> entry=2147483647) at ./src/emacs.c:425
>> >> 425	{
>> >> +bt
>> >> #0  terminate_due_to_signal (sig=sig <at> entry=6, backtrace_limit=backtrace_limit <at> entry=2147483647) at ./src/emacs.c:425
>> >> #1 0x00005555555b8f5b in die (msg=msg <at> entry=0x5555559b40d0 "BUFFERP
>> >> (a)", file=file <at> entry=0x5555559b40c7 "buffer.h",
>> >> line=line <at> entry=829) at ./src/alloc.c:7683
>> >> #2  0x00005555555a0bda in XBUFFER (a=Python Exception <class 'gdb.error'>: value has been optimized out
>> >> ) at ./src/buffer.h:829
>> >> #3  0x00005555555a4370 in XBUFFER (a=Python Exception <class 'gdb.error'>: value has been optimized out
>> >> ) at ./src/xdisp.c:17024
>> >> #4  prepare_menu_bars () at ./src/xdisp.c:14041
>> >
>> > This is here:
>> >
>> >       FOR_EACH_FRAME (tail, frame)
>> > 	{
>> > 	  struct frame *f = XFRAME (frame);
>> > 	  struct window *w = XWINDOW (FRAME_SELECTED_WINDOW (f));
>> > 	  if (some_windows
>> > 	      && !f->redisplay
>> > 	      && !w->redisplay
>> > 	      && !XBUFFER (w->contents)->text->redisplay)
>> > 	    continue;
>> >
>> > And I don't understand how w->contents of a frame's selected window
>> > could fail the BUFFERP test.
>>
>> Here's my current theory:
>>
>> 1. display_mode_lines calls
>>
>>   record_unwind_protect
>>     (restore_frame_selected_window, XFRAME (new_frame)->selected_window);
>>
>> 2. that stores the selected window in the specpdl
>>
>> 3. the specpdl is then grown
>>
>> 4. we xpalloc the specpdl area, creating a copy of it and freeing the
>> old memory, which is still registered as a root.
>>
>> 5. igc_on_grow_specpdl calls mps_arena_park
>>
>> 6. the first thing mps_arena_park does is to complete the current GC
>> cycle.  This means that it will:
>>
>> * look at the old specpdl area, which has been freed and may now contain
>>   invalid data
>> * *modify* the old specpdl area, which may have been reallocated so
>>   cause random memory corruption
>> * move objects by updating their pointers in the *old* specpdl area,
>>   leaving the pointers in the *new* specpdl area invalid
>>
>> 7. in our case, the selected window was supposed to have been moved but
>> the pointer in the *new* specpdl area continues to point to the old
>> memory, which is reused for something else which fails the BUFFERP test.
>>
>> 8. we unwind and restore the invalid selected window pointer.
>>
>> I have a patch, but I'd like to discuss whether this is a plausible
>> theory first.  Gerd, if there's something that prevents this problem
>> from happening, and I missed it, could you briefly yell at me here?
>
> If this is possible, all hell will break loose.

Failing to update moved Lisp_Objects will make all hell break loose no
matter where they are.

> The selected window of any frame must be a leaf window, and its
> contents member must identify a buffer, at all times.  We must ensure
> this is true whenever our code runs.

Absolutely, which is why I think we need to remove the root reszing
code, and its no-GC assumption which turned out to be unjustified,
because parking the arena in an attempt to avoid GC turned out to
trigger GC at a very bad time.

The remaining no-GC assumptions are:

1. we don't allow the first GC to happen until things have been set up
(this seems justifiable)

2. we park the arena when walking the pool for statistics (so they
represent consistent counts)

3. (my code only) we park the arena while implementing which_symbols or
scanning the heap for references to a given object, but those are ultima
ratio debug methods which, while highly desirable, do not count as
ordinary operations.

I'll post about (3) in some more detail when I've decided whether I
would want to propose heap scanning code in time for the feature/igc
merge or not.

Pip





Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#76091; Package emacs. (Fri, 07 Feb 2025 15:54:01 GMT) Full text and rfc822 format available.

Message #41 received at 76091 <at> debbugs.gnu.org (full text, mbox):

From: Gerd Möllmann <gerd.moellmann <at> gmail.com>
To: Pip Cet <pipcet <at> protonmail.com>
Cc: 76091 <at> debbugs.gnu.org, Gregor Zattler <telegraph <at> gmx.net>,
 Helmut Eller <eller.helmut <at> gmail.com>, Eli Zaretskii <eliz <at> gnu.org>
Subject: Re: bug#76091: 31.0.50; festure/igc: buffer.h:829: Emacs fatal
 error: assertion failed: BUFFERP (a)
Date: Fri, 07 Feb 2025 16:53:15 +0100
Pip Cet <pipcet <at> protonmail.com> writes:

> Well, here it is:

IIUC, that fixes the problem with igc_on_grow_specpdl as part of a
grander effort that avoids parking the arena in more cases.

(I'd naively just written a new igc_xpalloc_specpdl patterned after the
existing igc_xpalloc_exectly and ambig variants, but I'm also lazy :-).)

Hard to review. Did you take this into account?

igc.c:
 3240   /* Can't make a root that has zero length.  Want one to be able to
 3241      detect calling igc_free on something not having a root.  */
 3242   void *end = (char *) p + size;
 3243   if (end == p)
 3244     end = (char *) p + IGC_ALIGN_DFLT;
 3245   root_create_ambig (global_igc, p, end, "xzalloc-ambig");





Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#76091; Package emacs. (Fri, 07 Feb 2025 16:08:02 GMT) Full text and rfc822 format available.

Message #44 received at 76091 <at> debbugs.gnu.org (full text, mbox):

From: Pip Cet <pipcet <at> protonmail.com>
To: Gerd Möllmann <gerd.moellmann <at> gmail.com>
Cc: 76091 <at> debbugs.gnu.org, Gregor Zattler <telegraph <at> gmx.net>,
 Helmut Eller <eller.helmut <at> gmail.com>, Eli Zaretskii <eliz <at> gnu.org>
Subject: Re: bug#76091: 31.0.50;
 festure/igc: buffer.h:829: Emacs fatal error: assertion failed:
 BUFFERP (a)
Date: Fri, 07 Feb 2025 16:07:30 +0000
Gerd Möllmann <gerd.moellmann <at> gmail.com> writes:

> Pip Cet <pipcet <at> protonmail.com> writes:
>
>> Well, here it is:
>
> IIUC, that fixes the problem with igc_on_grow_specpdl as part of a
> grander effort that avoids parking the arena in more cases.

My assumption was the other root resizing methods would have similar
issues, yes.  I'm not sure this is true, but why risk it?

> (I'd naively just written a new igc_xpalloc_specpdl patterned after the
> existing igc_xpalloc_exectly and ambig variants, but I'm also lazy :-).)

Laziness is a virtue for hackers :-)

> Hard to review. Did you take this into account?

Well, yes.  I'll split it up into individual patches, so we can review
them one by one?

> igc.c:
>  3240   /* Can't make a root that has zero length.  Want one to be able to
>  3241      detect calling igc_free on something not having a root.  */
>  3242   void *end = (char *) p + size;
>  3243   if (end == p)
>  3244     end = (char *) p + IGC_ALIGN_DFLT;
>  3245   root_create_ambig (global_igc, p, end, "xzalloc-ambig");

Ugh.  No, I didn't.  Need to fix igc_realloc_ambig (also, it doesn't
handle the "shrinking" case correctly, oops.  However, there appear to
be no callers of igc_realloc_ambig that expect the root to shrink,
whew).

As for that code, is it really necessary to lie about this case?  Can't
we simply force size to be >= IGC_ALIGN_DFLT when making the allocation?

Pip





Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#76091; Package emacs. (Fri, 07 Feb 2025 16:17:01 GMT) Full text and rfc822 format available.

Message #47 received at 76091 <at> debbugs.gnu.org (full text, mbox):

From: Gerd Möllmann <gerd.moellmann <at> gmail.com>
To: Pip Cet <pipcet <at> protonmail.com>
Cc: 76091 <at> debbugs.gnu.org, Gregor Zattler <telegraph <at> gmx.net>,
 Helmut Eller <eller.helmut <at> gmail.com>, Eli Zaretskii <eliz <at> gnu.org>
Subject: Re: bug#76091: 31.0.50; festure/igc: buffer.h:829: Emacs fatal error:
 assertion failed: BUFFERP (a)
Date: Fri, 7 Feb 2025 17:16:07 +0100
On 7. Feb 2025, at 17:07, Pip Cet <pipcet <at> protonmail.com> wrote:
> 
> Gerd Möllmann <gerd.moellmann <at> gmail.com> writes:
> 
>> Pip Cet <pipcet <at> protonmail.com> writes:
>> 
>>> Well, here it is:
>> 
>> IIUC, that fixes the problem with igc_on_grow_specpdl as part of a
>> grander effort that avoids parking the arena in more cases.
> 
> My assumption was the other root resizing methods would have similar
> issues, yes.  I'm not sure this is true, but why risk it?

Yes, true. 

> 
>> (I'd naively just written a new igc_xpalloc_specpdl patterned after the
>> existing igc_xpalloc_exectly and ambig variants, but I'm also lazy :-).)
> 
> Laziness is a virtue for hackers :-)
> 
>> Hard to review. Did you take this into account?
> 
> Well, yes.  I'll split it up into individual patches, so we can review
> them one by one?

Not necessary, but thanks. 

> 
>> igc.c:
>> 3240   /* Can't make a root that has zero length.  Want one to be able to
>> 3241      detect calling igc_free on something not having a root.  */
>> 3242   void *end = (char *) p + size;
>> 3243   if (end == p)
>> 3244     end = (char *) p + IGC_ALIGN_DFLT;
>> 3245   root_create_ambig (global_igc, p, end, "xzalloc-ambig");
> 
> Ugh.  No, I didn't.  Need to fix igc_realloc_ambig (also, it doesn't
> handle the "shrinking" case correctly, oops.  However, there appear to
> be no callers of igc_realloc_ambig that expect the root to shrink,
> whew).
> 
> As for that code, is it really necessary to lie about this case?  Can't
> we simply force size to be >= IGC_ALIGN_DFLT when making the allocation?
> 

We could do that. I did it only that way because it was easy and unproblematic at that time.





Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#76091; Package emacs. (Fri, 07 Feb 2025 16:20:02 GMT) Full text and rfc822 format available.

Message #50 received at 76091 <at> debbugs.gnu.org (full text, mbox):

From: Gerd Möllmann <gerd.moellmann <at> gmail.com>
To: Pip Cet <pipcet <at> protonmail.com>
Cc: 76091 <at> debbugs.gnu.org, Gregor Zattler <telegraph <at> gmx.net>,
 Helmut Eller <eller.helmut <at> gmail.com>, Eli Zaretskii <eliz <at> gnu.org>
Subject: Re: bug#76091: 31.0.50; festure/igc: buffer.h:829: Emacs fatal error:
 assertion failed: BUFFERP (a)
Date: Fri, 7 Feb 2025 17:19:39 +0100
>> Well, yes.  I'll split it up into individual patches, so we can review
>> them one by one?
> 
> Not necessary, but thanks.

I'm through. Except for the shrinking case that you already mentioned I haven't found other problems. 

So LGTM.



Reply sent to Pip Cet <pipcet <at> protonmail.com>:
You have taken responsibility. (Fri, 07 Feb 2025 19:44:01 GMT) Full text and rfc822 format available.

Notification sent to Gregor Zattler <telegraph <at> gmx.net>:
bug acknowledged by developer. (Fri, 07 Feb 2025 19:44:02 GMT) Full text and rfc822 format available.

Message #55 received at 76091-done <at> debbugs.gnu.org (full text, mbox):

From: Pip Cet <pipcet <at> protonmail.com>
To: Gerd Möllmann <gerd.moellmann <at> gmail.com>
Cc: 76091-done <at> debbugs.gnu.org, Gregor Zattler <telegraph <at> gmx.net>,
 Helmut Eller <eller.helmut <at> gmail.com>, Eli Zaretskii <eliz <at> gnu.org>
Subject: Re: bug#76091: 31.0.50;
 festure/igc: buffer.h:829: Emacs fatal error: assertion failed:
 BUFFERP (a)
Date: Fri, 07 Feb 2025 19:43:18 +0000
Gerd Möllmann <gerd.moellmann <at> gmail.com> writes:

>>> Well, yes.  I'll split it up into individual patches, so we can review
>>> them one by one?
>>
>> Not necessary, but thanks.
>
> I'm through. Except for the shrinking case that you already mentioned I haven't found other problems.
>
> So LGTM.

Thanks!

Hope I didn't break anything, but I just pushed the series.  Please feel
free to revert or fix as appropriate!

Gregor, I believe this should fix the bug you originally saw (the second
bug you saw when building without optimization has also been fixed), so
I'm optimistically closing this report.  If you run into any further
issues, please open a new bug or reopen this one if it looks quite
similar :-)

Thanks again for the report, please keep them coming!

Pip





Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#76091; Package emacs. (Fri, 07 Feb 2025 20:18:02 GMT) Full text and rfc822 format available.

Message #58 received at 76091 <at> debbugs.gnu.org (full text, mbox):

From: Helmut Eller <eller.helmut <at> gmail.com>
To: Pip Cet <pipcet <at> protonmail.com>
Cc: Gerd Möllmann <gerd.moellmann <at> gmail.com>,
 76091 <at> debbugs.gnu.org, Gregor Zattler <telegraph <at> gmx.net>,
 Eli Zaretskii <eliz <at> gnu.org>
Subject: Re: bug#76091: 31.0.50; festure/igc: buffer.h:829: Emacs fatal
 error: assertion failed: BUFFERP (a)
Date: Fri, 07 Feb 2025 21:16:52 +0100
On Fri, Feb 07 2025, Pip Cet wrote:

> It still needs more testing, thought, and comments.  All the volatile
> stuff is needed because we can't copy a union with word atomicity: all
> we have is memcpy, which might copy bytewise and result in an invalid
> intermediate state.

But volatile doesn't guarantee atomicity.  Does it?

> Helmut, can you look over the larger_marker_vector changes?  While
> testing, I hit easserts there, so I added some new ones to catch the
> situation earlier.  I think the old code was fine, but the new one
> should also be, right?

Yes, I think the same.

Helmut




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#76091; Package emacs. (Fri, 07 Feb 2025 20:36:02 GMT) Full text and rfc822 format available.

Message #61 received at 76091 <at> debbugs.gnu.org (full text, mbox):

From: Pip Cet <pipcet <at> protonmail.com>
To: Helmut Eller <eller.helmut <at> gmail.com>
Cc: Gerd Möllmann <gerd.moellmann <at> gmail.com>,
 76091 <at> debbugs.gnu.org, Gregor Zattler <telegraph <at> gmx.net>,
 Eli Zaretskii <eliz <at> gnu.org>
Subject: Re: bug#76091: 31.0.50;
 festure/igc: buffer.h:829: Emacs fatal error: assertion failed:
 BUFFERP (a)
Date: Fri, 07 Feb 2025 20:35:10 +0000
"Helmut Eller" <eller.helmut <at> gmail.com> writes:

> On Fri, Feb 07 2025, Pip Cet wrote:
>
>> It still needs more testing, thought, and comments.  All the volatile
>> stuff is needed because we can't copy a union with word atomicity: all
>> we have is memcpy, which might copy bytewise and result in an invalid
>> intermediate state.
>
> But volatile doesn't guarantee atomicity.  Does it?

No, it doesn't.  But having a volatile structure on the stack guarantees
that none of the pointers in the heap structure can be moved (the
volatile stack structure pins them).

But I see now we do use union assignments in an attempt to get word
atomicity, so maybe the volatile stack structure pinning the pointers
isn't always needed.

Maybe it'd be better to define memcpy_by_words which never reveals
intermediate states.

However, this race condition window should be quite small, so probably
worth thinking about more...

Pip





Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#76091; Package emacs. (Sat, 08 Feb 2025 07:24:02 GMT) Full text and rfc822 format available.

Message #64 received at 76091 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Pip Cet <pipcet <at> protonmail.com>
Cc: gerd.moellmann <at> gmail.com, 76091 <at> debbugs.gnu.org, telegraph <at> gmx.net,
 eller.helmut <at> gmail.com
Subject: Re: bug#76091: 31.0.50;
 festure/igc: buffer.h:829: Emacs fatal error: assertion failed:
 BUFFERP (a)
Date: Sat, 08 Feb 2025 09:23:16 +0200
> Date: Fri, 07 Feb 2025 19:43:18 +0000
> From: Pip Cet <pipcet <at> protonmail.com>
> Cc: Helmut Eller <eller.helmut <at> gmail.com>, Gregor Zattler <telegraph <at> gmx.net>, Eli Zaretskii <eliz <at> gnu.org>, 76091-done <at> debbugs.gnu.org
> 
> Gerd Möllmann <gerd.moellmann <at> gmail.com> writes:
> 
> >>> Well, yes.  I'll split it up into individual patches, so we can review
> >>> them one by one?
> >>
> >> Not necessary, but thanks.
> >
> > I'm through. Except for the shrinking case that you already mentioned I haven't found other problems.
> >
> > So LGTM.
> 
> Thanks!
> 
> Hope I didn't break anything, but I just pushed the series.  Please feel
> free to revert or fix as appropriate!

Here I get compilation warnings:

  igc.c: In function 'igc_realloc_ambig':
  igc.c:3324:55: warning: potential null pointer dereference [-Wnull-dereference]
   3324 |   ptrdiff_t old_size = (char *)r->d.end - (char *)r->d.start;
	|                                                   ~~~~^~~~~~
  igc.c:3324:36: warning: potential null pointer dereference [-Wnull-dereference]
   3324 |   ptrdiff_t old_size = (char *)r->d.end - (char *)r->d.start;
	|                                ~~~~^~~~
  igc.c:3324:55: warning: potential null pointer dereference [-Wnull-dereference]
   3324 |   ptrdiff_t old_size = (char *)r->d.end - (char *)r->d.start;
	|                                                   ~~~~^~~~~~
  igc.c:3324:36: warning: potential null pointer dereference [-Wnull-dereference]
   3324 |   ptrdiff_t old_size = (char *)r->d.end - (char *)r->d.start;
	|                                ~~~~^~~~
  igc.c: In function 'igc_xpalloc_exact':
  igc.c:3397:27: warning: argument to variable-length array may be too large [-Wvla-larger-than=]
   3397 |       volatile mps_word_t area[(item_size + (sizeof (mps_word_t) - 1))
	|                           ^~~~
  igc.c:3397:27: note: limit is 4031 bytes, but argument may be as large as 4294967292
  igc.c: In function 'igc_xnrealloc_ambig':
  igc.c:3415:57: warning: potential null pointer dereference [-Wnull-dereference]
   3415 |   ptrdiff_t old_nbytes = (char *)r->d.end - (char *)r->d.start;
	|                                                     ~~~~^~~~~~
  igc.c:3415:38: warning: potential null pointer dereference [-Wnull-dereference]
   3415 |   ptrdiff_t old_nbytes = (char *)r->d.end - (char *)r->d.start;
	|                                  ~~~~^~~~
  igc.c:3415:57: warning: potential null pointer dereference [-Wnull-dereference]
   3415 |   ptrdiff_t old_nbytes = (char *)r->d.end - (char *)r->d.start;
	|                                                     ~~~~^~~~~~
  igc.c:3415:38: warning: potential null pointer dereference [-Wnull-dereference]
   3415 |   ptrdiff_t old_nbytes = (char *)r->d.end - (char *)r->d.start;
	|                                  ~~~~^~~~

Most of them seem to be because root_find can return NULL.  The nit
about arena[] is probably because one cannot use sizeof and variables
in an array declaration?  We should probably either use the maximum as
a constant, or use alloca instead.

This is a 32-bit build on MS-Windows.

Also, does this:

> (Of course, with WIDE_EMACS_INT, mps_word_t is not good enough; unless
> we carefully write the scan function not to assume that the two
> half-words comprising a 64-bit Lisp_Object are in sync.  As Eli was very
> opposed to the idea of removing WIDE_EMACS_INT again, we might have to
> find a workaround there.)

mean that the wide-int 32-bit build is now in trouble?  Or did you
install some workaround for the above?




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#76091; Package emacs. (Sat, 08 Feb 2025 10:25:02 GMT) Full text and rfc822 format available.

Message #67 received at 76091 <at> debbugs.gnu.org (full text, mbox):

From: Pip Cet <pipcet <at> protonmail.com>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: gerd.moellmann <at> gmail.com, 76091 <at> debbugs.gnu.org, telegraph <at> gmx.net,
 eller.helmut <at> gmail.com
Subject: Re: bug#76091: 31.0.50;
 festure/igc: buffer.h:829: Emacs fatal error: assertion failed:
 BUFFERP (a)
Date: Sat, 08 Feb 2025 10:24:01 +0000
"Eli Zaretskii" <eliz <at> gnu.org> writes:

>> Date: Fri, 07 Feb 2025 19:43:18 +0000
>> From: Pip Cet <pipcet <at> protonmail.com>
>> Cc: Helmut Eller <eller.helmut <at> gmail.com>, Gregor Zattler <telegraph <at> gmx.net>, Eli Zaretskii <eliz <at> gnu.org>, 76091-done <at> debbugs.gnu.org
>>
>> Gerd Möllmann <gerd.moellmann <at> gmail.com> writes:
>>
>> >>> Well, yes.  I'll split it up into individual patches, so we can review
>> >>> them one by one?
>> >>
>> >> Not necessary, but thanks.
>> >
>> > I'm through. Except for the shrinking case that you already mentioned I haven't found other problems.
>> >
>> > So LGTM.
>>
>> Thanks!
>>
>> Hope I didn't break anything, but I just pushed the series.  Please feel
>> free to revert or fix as appropriate!
>
> Here I get compilation warnings:
>
>   igc.c: In function 'igc_realloc_ambig':
>   igc.c:3324:55: warning: potential null pointer dereference [-Wnull-dereference]
>    3324 |   ptrdiff_t old_size = (char *)r->d.end - (char *)r->d.start;
> 	|                                                   ~~~~^~~~~~
>   igc.c:3324:36: warning: potential null pointer dereference [-Wnull-dereference]
>    3324 |   ptrdiff_t old_size = (char *)r->d.end - (char *)r->d.start;
> 	|                                ~~~~^~~~
>   igc.c:3324:55: warning: potential null pointer dereference [-Wnull-dereference]
>    3324 |   ptrdiff_t old_size = (char *)r->d.end - (char *)r->d.start;
> 	|                                                   ~~~~^~~~~~
>   igc.c:3324:36: warning: potential null pointer dereference [-Wnull-dereference]
>    3324 |   ptrdiff_t old_size = (char *)r->d.end - (char *)r->d.start;
> 	|                                ~~~~^~~~
>   igc.c: In function 'igc_xpalloc_exact':
>   igc.c:3397:27: warning: argument to variable-length array may be too large [-Wvla-larger-than=]
>    3397 |       volatile mps_word_t area[(item_size + (sizeof (mps_word_t) - 1))
> 	|                           ^~~~
>   igc.c:3397:27: note: limit is 4031 bytes, but argument may be as large as 4294967292
>   igc.c: In function 'igc_xnrealloc_ambig':
>   igc.c:3415:57: warning: potential null pointer dereference [-Wnull-dereference]
>    3415 |   ptrdiff_t old_nbytes = (char *)r->d.end - (char *)r->d.start;
> 	|                                                     ~~~~^~~~~~
>   igc.c:3415:38: warning: potential null pointer dereference [-Wnull-dereference]
>    3415 |   ptrdiff_t old_nbytes = (char *)r->d.end - (char *)r->d.start;
> 	|                                  ~~~~^~~~
>   igc.c:3415:57: warning: potential null pointer dereference [-Wnull-dereference]
>    3415 |   ptrdiff_t old_nbytes = (char *)r->d.end - (char *)r->d.start;
> 	|                                                     ~~~~^~~~~~
>   igc.c:3415:38: warning: potential null pointer dereference [-Wnull-dereference]
>    3415 |   ptrdiff_t old_nbytes = (char *)r->d.end - (char *)r->d.start;
> 	|                                  ~~~~^~~~
>
> Most of them seem to be because root_find can return NULL.  The nit

Those are harmless; I'll add an eassert (r), that should prevent the
warnings (together with Gerd's fix for the igc_realloc (NULL) case).

> about arena[] is probably because one cannot use sizeof and variables
> in an array declaration?  We should probably either use the maximum as

I'll add another eassert to ensure no one is calling this with
unreasonably large item_size values.  If anyone does, it's probably best
to crash early.

> a constant, or use alloca instead.

The vla limit applies to alloca as well.

> Also, does this:
>
>> (Of course, with WIDE_EMACS_INT, mps_word_t is not good enough; unless
>> we carefully write the scan function not to assume that the two
>> half-words comprising a 64-bit Lisp_Object are in sync.  As Eli was very
>> opposed to the idea of removing WIDE_EMACS_INT again, we might have to
>> find a workaround there.)
>
> mean that the wide-int 32-bit build is now in trouble?

Yes, it does.  All scanning functions need to be written to deal with
half-written Lisp_Object values in that case.  (Easier than it sounds
because we USE_LSB_TAG).

> Or did you install some workaround for the above?

Not yet :-)

Pip






Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#76091; Package emacs. (Sat, 08 Feb 2025 11:56:01 GMT) Full text and rfc822 format available.

Message #70 received at 76091 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Pip Cet <pipcet <at> protonmail.com>
Cc: gerd.moellmann <at> gmail.com, 76091 <at> debbugs.gnu.org, telegraph <at> gmx.net,
 eller.helmut <at> gmail.com
Subject: Re: bug#76091: 31.0.50;
 festure/igc: buffer.h:829: Emacs fatal error: assertion failed:
 BUFFERP (a)
Date: Sat, 08 Feb 2025 13:54:54 +0200
> Date: Sat, 08 Feb 2025 10:24:01 +0000
> From: Pip Cet <pipcet <at> protonmail.com>
> Cc: gerd.moellmann <at> gmail.com, eller.helmut <at> gmail.com, telegraph <at> gmx.net, 76091 <at> debbugs.gnu.org
> 
> "Eli Zaretskii" <eliz <at> gnu.org> writes:
> 
> >> Date: Fri, 07 Feb 2025 19:43:18 +0000
> >> From: Pip Cet <pipcet <at> protonmail.com>
> >> Cc: Helmut Eller <eller.helmut <at> gmail.com>, Gregor Zattler <telegraph <at> gmx.net>, Eli Zaretskii <eliz <at> gnu.org>, 76091-done <at> debbugs.gnu.org
> >>
> >> Gerd Möllmann <gerd.moellmann <at> gmail.com> writes:
> >>
> >> >>> Well, yes.  I'll split it up into individual patches, so we can review
> >> >>> them one by one?
> >> >>
> >> >> Not necessary, but thanks.
> >> >
> >> > I'm through. Except for the shrinking case that you already mentioned I haven't found other problems.
> >> >
> >> > So LGTM.
> >>
> >> Thanks!
> >>
> >> Hope I didn't break anything, but I just pushed the series.  Please feel
> >> free to revert or fix as appropriate!
> >
> > Here I get compilation warnings:
> >
> >   igc.c: In function 'igc_realloc_ambig':
> >   igc.c:3324:55: warning: potential null pointer dereference [-Wnull-dereference]
> >    3324 |   ptrdiff_t old_size = (char *)r->d.end - (char *)r->d.start;
> > 	|                                                   ~~~~^~~~~~
> >   igc.c:3324:36: warning: potential null pointer dereference [-Wnull-dereference]
> >    3324 |   ptrdiff_t old_size = (char *)r->d.end - (char *)r->d.start;
> > 	|                                ~~~~^~~~
> >   igc.c:3324:55: warning: potential null pointer dereference [-Wnull-dereference]
> >    3324 |   ptrdiff_t old_size = (char *)r->d.end - (char *)r->d.start;
> > 	|                                                   ~~~~^~~~~~
> >   igc.c:3324:36: warning: potential null pointer dereference [-Wnull-dereference]
> >    3324 |   ptrdiff_t old_size = (char *)r->d.end - (char *)r->d.start;
> > 	|                                ~~~~^~~~
> >   igc.c: In function 'igc_xpalloc_exact':
> >   igc.c:3397:27: warning: argument to variable-length array may be too large [-Wvla-larger-than=]
> >    3397 |       volatile mps_word_t area[(item_size + (sizeof (mps_word_t) - 1))
> > 	|                           ^~~~
> >   igc.c:3397:27: note: limit is 4031 bytes, but argument may be as large as 4294967292
> >   igc.c: In function 'igc_xnrealloc_ambig':
> >   igc.c:3415:57: warning: potential null pointer dereference [-Wnull-dereference]
> >    3415 |   ptrdiff_t old_nbytes = (char *)r->d.end - (char *)r->d.start;
> > 	|                                                     ~~~~^~~~~~
> >   igc.c:3415:38: warning: potential null pointer dereference [-Wnull-dereference]
> >    3415 |   ptrdiff_t old_nbytes = (char *)r->d.end - (char *)r->d.start;
> > 	|                                  ~~~~^~~~
> >   igc.c:3415:57: warning: potential null pointer dereference [-Wnull-dereference]
> >    3415 |   ptrdiff_t old_nbytes = (char *)r->d.end - (char *)r->d.start;
> > 	|                                                     ~~~~^~~~~~
> >   igc.c:3415:38: warning: potential null pointer dereference [-Wnull-dereference]
> >    3415 |   ptrdiff_t old_nbytes = (char *)r->d.end - (char *)r->d.start;
> > 	|                                  ~~~~^~~~
> >
> > Most of them seem to be because root_find can return NULL.  The nit
> 
> Those are harmless; I'll add an eassert (r), that should prevent the
> warnings (together with Gerd's fix for the igc_realloc (NULL) case).

Not sure if you already did, but:

 . I still see the warnings, and
 . this is an optimized build, so eassert compiles to nothing

> > Also, does this:
> >
> >> (Of course, with WIDE_EMACS_INT, mps_word_t is not good enough; unless
> >> we carefully write the scan function not to assume that the two
> >> half-words comprising a 64-bit Lisp_Object are in sync.  As Eli was very
> >> opposed to the idea of removing WIDE_EMACS_INT again, we might have to
> >> find a workaround there.)
> >
> > mean that the wide-int 32-bit build is now in trouble?
> 
> Yes, it does.  All scanning functions need to be written to deal with
> half-written Lisp_Object values in that case.  (Easier than it sounds
> because we USE_LSB_TAG).
> 
> > Or did you install some workaround for the above?
> 
> Not yet :-)

Hopefully, soon then?




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#76091; Package emacs. (Sat, 08 Feb 2025 12:29:02 GMT) Full text and rfc822 format available.

Message #73 received at 76091 <at> debbugs.gnu.org (full text, mbox):

From: Pip Cet <pipcet <at> protonmail.com>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: gerd.moellmann <at> gmail.com, 76091 <at> debbugs.gnu.org, telegraph <at> gmx.net,
 eller.helmut <at> gmail.com
Subject: Re: bug#76091: 31.0.50;
 festure/igc: buffer.h:829: Emacs fatal error: assertion failed:
 BUFFERP (a)
Date: Sat, 08 Feb 2025 12:28:12 +0000
"Eli Zaretskii" <eliz <at> gnu.org> writes:

>> Date: Sat, 08 Feb 2025 10:24:01 +0000
>> From: Pip Cet <pipcet <at> protonmail.com>
>> Cc: gerd.moellmann <at> gmail.com, eller.helmut <at> gmail.com, telegraph <at> gmx.net, 76091 <at> debbugs.gnu.org
>>
>> "Eli Zaretskii" <eliz <at> gnu.org> writes:
>>
>> >> Date: Fri, 07 Feb 2025 19:43:18 +0000
>> >> From: Pip Cet <pipcet <at> protonmail.com>
>> >> Cc: Helmut Eller <eller.helmut <at> gmail.com>, Gregor Zattler <telegraph <at> gmx.net>, Eli Zaretskii <eliz <at> gnu.org>, 76091-done <at> debbugs.gnu.org
>> >>
>> >> Gerd Möllmann <gerd.moellmann <at> gmail.com> writes:
>> >>
>> >> >>> Well, yes.  I'll split it up into individual patches, so we can review
>> >> >>> them one by one?
>> >> >>
>> >> >> Not necessary, but thanks.
>> >> >
>> >> > I'm through. Except for the shrinking case that you already mentioned I haven't found other problems.
>> >> >
>> >> > So LGTM.
>> >>
>> >> Thanks!
>> >>
>> >> Hope I didn't break anything, but I just pushed the series.  Please feel
>> >> free to revert or fix as appropriate!
>> >
>> > Here I get compilation warnings:
>> >
>> >   igc.c: In function 'igc_realloc_ambig':
>> >   igc.c:3324:55: warning: potential null pointer dereference [-Wnull-dereference]
>> >    3324 |   ptrdiff_t old_size = (char *)r->d.end - (char *)r->d.start;
>> > 	|                                                   ~~~~^~~~~~
>> >   igc.c:3324:36: warning: potential null pointer dereference [-Wnull-dereference]
>> >    3324 |   ptrdiff_t old_size = (char *)r->d.end - (char *)r->d.start;
>> > 	|                                ~~~~^~~~
>> >   igc.c:3324:55: warning: potential null pointer dereference [-Wnull-dereference]
>> >    3324 |   ptrdiff_t old_size = (char *)r->d.end - (char *)r->d.start;
>> > 	|                                                   ~~~~^~~~~~
>> >   igc.c:3324:36: warning: potential null pointer dereference [-Wnull-dereference]
>> >    3324 |   ptrdiff_t old_size = (char *)r->d.end - (char *)r->d.start;
>> > 	|                                ~~~~^~~~
>> >   igc.c: In function 'igc_xpalloc_exact':
>> >   igc.c:3397:27: warning: argument to variable-length array may be too large [-Wvla-larger-than=]
>> >    3397 |       volatile mps_word_t area[(item_size + (sizeof (mps_word_t) - 1))
>> > 	|                           ^~~~
>> >   igc.c:3397:27: note: limit is 4031 bytes, but argument may be as large as 4294967292
>> >   igc.c: In function 'igc_xnrealloc_ambig':
>> >   igc.c:3415:57: warning: potential null pointer dereference [-Wnull-dereference]
>> >    3415 |   ptrdiff_t old_nbytes = (char *)r->d.end - (char *)r->d.start;
>> > 	|                                                     ~~~~^~~~~~
>> >   igc.c:3415:38: warning: potential null pointer dereference [-Wnull-dereference]
>> >    3415 |   ptrdiff_t old_nbytes = (char *)r->d.end - (char *)r->d.start;
>> > 	|                                  ~~~~^~~~
>> >   igc.c:3415:57: warning: potential null pointer dereference [-Wnull-dereference]
>> >    3415 |   ptrdiff_t old_nbytes = (char *)r->d.end - (char *)r->d.start;
>> > 	|                                                     ~~~~^~~~~~
>> >   igc.c:3415:38: warning: potential null pointer dereference [-Wnull-dereference]
>> >    3415 |   ptrdiff_t old_nbytes = (char *)r->d.end - (char *)r->d.start;
>> > 	|                                  ~~~~^~~~
>> >
>> > Most of them seem to be because root_find can return NULL.  The nit
>>
>> Those are harmless; I'll add an eassert (r), that should prevent the
>> warnings (together with Gerd's fix for the igc_realloc (NULL) case).
>
> Not sure if you already did, but:
>
>  . I still see the warnings, and
>  . this is an optimized build, so eassert compiles to nothing

Oh, thanks! Yeah, I can see them in optimized builds, and they require
eassume, not eassert.  I'll suggest a patch once I've thought of a good
way to avoid those, but for now, we just might have to ignore the
warnings.

>> > Also, does this:
>> >
>> >> (Of course, with WIDE_EMACS_INT, mps_word_t is not good enough; unless
>> >> we carefully write the scan function not to assume that the two
>> >> half-words comprising a 64-bit Lisp_Object are in sync.  As Eli was very
>> >> opposed to the idea of removing WIDE_EMACS_INT again, we might have to
>> >> find a workaround there.)
>> >
>> > mean that the wide-int 32-bit build is now in trouble?
>>
>> Yes, it does.  All scanning functions need to be written to deal with
>> half-written Lisp_Object values in that case.  (Easier than it sounds
>> because we USE_LSB_TAG).
>>
>> > Or did you install some workaround for the above?
>>
>> Not yet :-)
>
> Hopefully, soon then?

I don't think there are any fundamental problems there, but it needs
some time and the setjmp() issues seem more important right now.

(Two issues: nativecomp uses %rbp and may call setjmp directly, which
scrambles the %rbp value before saving it in a jmp_buf.

And it seems that push_handler_nosignal allocates the jmp_buf from a
non-root but doesn't trace it in any way whatsoever. I have no idea why
that isn't causing more frequent crashes....)

Pip





Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#76091; Package emacs. (Sun, 09 Feb 2025 17:25:01 GMT) Full text and rfc822 format available.

Message #76 received at 76091 <at> debbugs.gnu.org (full text, mbox):

From: Pip Cet <pipcet <at> protonmail.com>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: gerd.moellmann <at> gmail.com, 76091 <at> debbugs.gnu.org, telegraph <at> gmx.net,
 eller.helmut <at> gmail.com
Subject: Re: bug#76091: 31.0.50;
 festure/igc: buffer.h:829: Emacs fatal error: assertion failed:
 BUFFERP (a)
Date: Sun, 09 Feb 2025 17:24:11 +0000
Pip Cet <pipcet <at> protonmail.com> writes:

> Oh, thanks! Yeah, I can see them in optimized builds, and they require
> eassume, not eassert.  I'll suggest a patch once I've thought of a good
> way to avoid those, but for now, we just might have to ignore the
> warnings.

Okay, patch pushed.  I still see warnings for some builds, but I don't
really know how to fix them.

Also fixed a minor oversight which caused trouble in the print code in
!HAVE_MPS builds.

>>> > Also, does this:
>>> >
>>> >> (Of course, with WIDE_EMACS_INT, mps_word_t is not good enough; unless
>>> >> we carefully write the scan function not to assume that the two
>>> >> half-words comprising a 64-bit Lisp_Object are in sync.  As Eli was very
>>> >> opposed to the idea of removing WIDE_EMACS_INT again, we might have to
>>> >> find a workaround there.)
>>> >
>>> > mean that the wide-int 32-bit build is now in trouble?
>>>
>>> Yes, it does.  All scanning functions need to be written to deal with
>>> half-written Lisp_Object values in that case.  (Easier than it sounds
>>> because we USE_LSB_TAG).
>>>
>>> > Or did you install some workaround for the above?
>>>
>>> Not yet :-)
>>
>> Hopefully, soon then?
>
> I don't think there are any fundamental problems there, but it needs
> some time and the setjmp() issues seem more important right now.
>
> (Two issues: nativecomp uses %rbp and may call setjmp directly, which
> scrambles the %rbp value before saving it in a jmp_buf.
>
> And it seems that push_handler_nosignal allocates the jmp_buf from a
> non-root but doesn't trace it in any way whatsoever. I have no idea why
> that isn't causing more frequent crashes....)

I think both these issues need fixing to avoid crashes with unusual
optimization options, but they should be fine for non-LTO builds.

Pip





Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#76091; Package emacs. (Sun, 09 Feb 2025 19:41:01 GMT) Full text and rfc822 format available.

Message #79 received at 76091 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Pip Cet <pipcet <at> protonmail.com>
Cc: gerd.moellmann <at> gmail.com, 76091 <at> debbugs.gnu.org, telegraph <at> gmx.net,
 eller.helmut <at> gmail.com
Subject: Re: bug#76091: 31.0.50;
 festure/igc: buffer.h:829: Emacs fatal error: assertion failed:
 BUFFERP (a)
Date: Sun, 09 Feb 2025 21:40:13 +0200
> Date: Sun, 09 Feb 2025 17:24:11 +0000
> From: Pip Cet <pipcet <at> protonmail.com>
> Cc: gerd.moellmann <at> gmail.com, eller.helmut <at> gmail.com, telegraph <at> gmx.net, 76091 <at> debbugs.gnu.org
> 
> Pip Cet <pipcet <at> protonmail.com> writes:
> 
> > Oh, thanks! Yeah, I can see them in optimized builds, and they require
> > eassume, not eassert.  I'll suggest a patch once I've thought of a good
> > way to avoid those, but for now, we just might have to ignore the
> > warnings.
> 
> Okay, patch pushed.  I still see warnings for some builds, but I don't
> really know how to fix them.

Thanks, those warnings are gone now.




bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Mon, 10 Mar 2025 11:24:12 GMT) Full text and rfc822 format available.

This bug report was last modified 102 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.