Subject: bug#46256: [feature/native-comp] AOT eln files ignored if run from build tree

From: Andrea Corallo <[email-masked]>
Date: Wed, 03 Mar 2021 20:21:38 +0000

Eli Zaretskii <[email-masked]> writes:

>> Date: Wed, 03 Mar 2021 21:46:44 +0200
>> From: Eli Zaretskii <[email-masked]>
>> Cc: [email-masked], [email-masked]
>> 
>> >   emacs_abort at src/w32fns.c:10947
>> >   terminate_due_to_signal at src/emacs.c:417
>> >   die at src/alloc.c:7452
>> >   XNATIVE_COMP_UNIT at src/comp.h:70
>> >   load_comp_unit at src/comp.c:4766
>> >   syms_of_comp at src/comp.c:5077
>> >   Fload at src/lread.c:1548
>> 
>> It looks like these crashes are when compiling subr-x, because I see
>> zero-sized subr-x-XXXXX.eln.tmp files in the eln-cache directory.
>
> Yes:
>
>   (gdb) r -batch -l comp -f batch-native-compile ../lisp/emacs-lisp/subr-x.el
>   Starting program: D:\gnu\git\emacs\native-comp\src\emacs.exe -batch -l comp -f batch-native-compile ../lisp/emacs-lisp/subr-x.el
>   warning: Enabling Low Fragmentation Heap failed: error 31
>   [New Thread 14244.0x320c]
>   [New Thread 14244.0x3540]
>   [Thread 14244.0x3540 exited with code 1]
>   Debugger entered--Lisp error: (native-compiler-error "../lisp/emacs-lisp/subr-x.el" "\nException 0xc0000005 at this address:\n07cdac3e\n\nB...")
>     signal(native-compiler-error ("../lisp/emacs-lisp/subr-x.el" "\nException 0xc0000005 at this address:\n07cdac3e\n\nB..."))
>     comp--native-compile("../lisp/emacs-lisp/subr-x.el")
>     batch-native-compile()
>     command-line-1(("-l" "comp" "-f" "batch-native-compile" "../lisp/emacs-lisp/subr-x.el"))
>     command-line()
>     normal-top-level()
>
> So the async compilation process crashes with SIGSEGV when compiling
> subr-x.el.
>
> Andrea, can you help me figure out the command line with which the
> async compilation subprocess is invoked in this case?  I'd like to run
> it as a foreground process under a debugger, and see why it crashes.

Yes, each async compilation runs executing a temporary (not to exceed
the max command line length on Windows) Elisp file.  This file is
created by `comp-run-async-workers'.

One can put a print there to have the name of this file (and execute it
regularly with emacs -batch -l ...) to have the reproducer or look into
the temporary directory for the most recent
emacs-async-comp-...something... file.

  Andrea

PS ATM I see a crash too in my 32bit wide-int setup here, this is while
executing a top_level_run function loading a .eln file.  I need to
compile a more recent gdb to look into this further but it looks
something basic is going wrong there.