> It's too bad the problem goes away under GDB, because we don't even

> know whether the crash is due to some fatal error in the Emacs code,

> or due to those extra-checking routines inserted into the code by the

> FORTIFY option.  IOW, it could be that the problem happens because the

> FORTIFY routines don't understand something Emacs does and consider it

> a bug worthy of aborting the program.

 

Oh, I think there might be some confusion with #63365, sorry if I

haven't been precise enough. This fortify bug does *not* go away under

GDB (unless I'm misunderstanding). I get the following output when

running the binary compiled with -D_FORTIFY_SOURCE:

 

$ gdb -q --args ./src/emacs -Q --eval '(async-shell-command "dir")'

Reading symbols from ./src/emacs...

(gdb) run

Starting program: I:\Git\emacs\src\emacs.exe -Q --eval "(async-shell-command \"dir\")"

[New Thread 15740.0x22e0]

[New Thread 15740.0x2b50]

[New Thread 15740.0x10cc]

[New Thread 15740.0x4f4]

[New Thread 15740.0x3eac]

[New Thread 15740.0x3c80]

 

The output then continues once I close the window:

 

[Thread 15740.0x4f4 exited with code 0]

[New Thread 15740.0x3b00]

[New Thread 15740.0x9ac]

[Thread 15740.0x3c80 exited with code 0]

[Thread 15740.0x10cc exited with code 0]

[Thread 15740.0x2b50 exited with code 0]

[Thread 15740.0x22e0 exited with code 0]

[Thread 15740.0x3b00 exited with code 0]

[Thread 15740.0x3eac exited with code 0]

[Thread 15740.0x9ac exited with code 0]

[Inferior 1 (process 15740) exited normally]

(gdb) quit

 

When running the binary where sysdep.o is compiled without

-D_FORTIFY_SOURCE, I get the following instead:

 

$ gdb -q --args ./src/emacs -Q --eval '(async-shell-command "dir")'

Reading symbols from ./src/emacs...

(gdb) run

Starting program: I:\Git\emacs\src\emacs.exe -Q --eval "(async-shell-command \"dir\")"

[New Thread 4364.0x36d4]

[New Thread 4364.0x3f38]

[New Thread 4364.0x3eec]

[New Thread 4364.0x924]

[New Thread 4364.0x38bc]

[New Thread 4364.0x2f8c]

[Thread 4364.0x2f8c exited with code 0]

 

And once I close the window:

 

[Thread 4364.0x924 exited with code 0]

[Thread 4364.0x36d4 exited with code 0]

[Thread 4364.0x3eec exited with code 0]

[Thread 4364.0x3f38 exited with code 0]

[Thread 4364.0x38bc exited with code 0]

[Inferior 1 (process 4364) exited normally]

(gdb) quit

 

The big difference being that in the latter case, the last thread exits

immediately (which I assume is the "dir" command), while with

-D_FORTIFY_SOURCE the thread only exits once I close the window. I can

perform further tests with GDB of course.

 

> Another interesting question is why the problems happen only in Emacs

> built with native compilation.  Do we use emacs_read or its callers in

> some special ways when they are called from comp.c or comp.el?

 

Again, there's some confusion with #63365. AFAICT, the fortify bug

occurs regardless of whether Emacs is built --with-native-compilation or

not. The third emacs-28.2 release on MSYS2 had the fortify bug and was

compiled --with-native-compilation. So far in *this* bug report I have

been using the default ./configure options, so native compilation should

be off in my objdumps.

 

In fact, I think the two bugs are not related at all. #63365 occurs

regardless of whether Emacs is built with or without -D_FORTIFY_SOURCE;

see the fourth and fifth release of Emacs on MSYS2.

 

Now, to make sure the two are not related, I've now repeated the process

with the following flags:

 

CFLAGS='-g3 -O2 -gdwarf-2 -Wp,-D_FORTIFY_SOURCE=2 -fno-optimize-sibling-calls'

 

The fortify bug was still there, so it doesn't seem like

-foptimize-sibling-calls is the root cause for #63752. The objdump of

sysdep1.o is slightly different from the one compiled with

-foptimize-sibling-calls, I've attached it in case someone wants to take

a look but I don't think it's relevant.

 

> Maybe we should ask the MinGW64 folks who implemented the FORTIFY

> support for MinGW64 GCC to join this discussion and help us figure out

> which part(s) of this puzzle are relevant and why?  Cyril, can you

> reach out to them and ask them help us out here?

 

Sure, I've opened a support request:

 

https://sourceforge.net/p/mingw-w64/support-requests/193/