* recent master core dumps building on FreeBSD i386
@ 2018-10-16 15:53 Joseph Mingrone
2018-10-17 1:27 ` Joseph Mingrone
0 siblings, 1 reply; 16+ messages in thread
From: Joseph Mingrone @ 2018-10-16 15:53 UTC (permalink / raw)
To: emacs-devel
[-- Attachment #1: Type: text/plain, Size: 468 bytes --]
Hello,
A change within the last few days gives these core dumps on FreeBSD 10.4/11.2 i386. Both 10.4 and 11.2 still build fine on amd64. If I can find time this evening, I will try to drill down a commit.
http://pkg.awarnach.mathstat.dal.ca/data/10i386-default/2018-10-16_11h14m45s/logs/errors/emacs-devel-27.0.50.20181016,2.log
http://pkg.awarnach.mathstat.dal.ca/data/11i386-default/2018-10-16_11h14m45s/logs/errors/emacs-devel-27.0.50.20181016,2.log
-- Joseph
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 962 bytes --]
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: recent master core dumps building on FreeBSD i386
2018-10-16 15:53 recent master core dumps building on FreeBSD i386 Joseph Mingrone
@ 2018-10-17 1:27 ` Joseph Mingrone
2018-10-17 16:10 ` Eli Zaretskii
0 siblings, 1 reply; 16+ messages in thread
From: Joseph Mingrone @ 2018-10-17 1:27 UTC (permalink / raw)
To: emacs-devel
[-- Attachment #1: Type: text/plain, Size: 994 bytes --]
Joseph Mingrone <jrm@ftfl.ca> writes:
> Hello,
> A change within the last few days gives these core dumps on FreeBSD 10.4/11.2 i386. Both 10.4 and 11.2 still build fine on amd64. If I can find time this evening, I will try to drill down a commit.
> http://pkg.awarnach.mathstat.dal.ca/data/10i386-default/2018-10-16_11h14m45s/logs/errors/emacs-devel-27.0.50.20181016,2.log
> http://pkg.awarnach.mathstat.dal.ca/data/11i386-default/2018-10-16_11h14m45s/logs/errors/emacs-devel-27.0.50.20181016,2.log
> -- Joseph
As far as I can tell, the core dump began with f5896e2.
Build of f5896e2:
http://pkg.awarnach.mathstat.dal.ca/data/11i386-default/2018-10-16_22h12m56s/logs/errors/emacs-devel-27.0.50.20181016,2.log
Build of previous commit (643df6):
http://pkg.awarnach.mathstat.dal.ca/data/11i386-default/2018-10-16_22h06m14s/logs/errors/emacs-devel-27.0.50.20181016,2.log
There is an error creating a link at the end of the 643df6 build, but that seems to have been corrected.
-- Joseph
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 962 bytes --]
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: recent master core dumps building on FreeBSD i386
2018-10-17 1:27 ` Joseph Mingrone
@ 2018-10-17 16:10 ` Eli Zaretskii
2018-10-18 1:09 ` Paul Eggert
0 siblings, 1 reply; 16+ messages in thread
From: Eli Zaretskii @ 2018-10-17 16:10 UTC (permalink / raw)
To: Joseph Mingrone; +Cc: emacs-devel
> From: Joseph Mingrone <jrm@ftfl.ca>
> Date: Tue, 16 Oct 2018 22:27:40 -0300
>
> > A change within the last few days gives these core dumps on FreeBSD 10.4/11.2 i386. Both 10.4 and 11.2 still build fine on amd64. If I can find time this evening, I will try to drill down a commit.
>
> > http://pkg.awarnach.mathstat.dal.ca/data/10i386-default/2018-10-16_11h14m45s/logs/errors/emacs-devel-27.0.50.20181016,2.log
> > http://pkg.awarnach.mathstat.dal.ca/data/11i386-default/2018-10-16_11h14m45s/logs/errors/emacs-devel-27.0.50.20181016,2.log
>
> > -- Joseph
>
> As far as I can tell, the core dump began with f5896e2.
This is unexpected. Can you run the offending command under GDB and
show the backtrace from the crash, please?
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: recent master core dumps building on FreeBSD i386
2018-10-17 16:10 ` Eli Zaretskii
@ 2018-10-18 1:09 ` Paul Eggert
2018-10-18 13:28 ` Eli Zaretskii
2018-10-18 15:40 ` Joseph Mingrone
0 siblings, 2 replies; 16+ messages in thread
From: Paul Eggert @ 2018-10-18 1:09 UTC (permalink / raw)
To: Eli Zaretskii, Joseph Mingrone; +Cc: emacs-devel
[-- Attachment #1: Type: text/plain, Size: 907 bytes --]
On 10/17/18 9:10 AM, Eli Zaretskii wrote:
>> As far as I can tell, the core dump began with f5896e2.
> This is unexpected. Can you run the offending command under GDB and
> show the backtrace from the crash, please?
>
Quite possibly this is yet another obscure bug involving dumping. I hope
the portable dumper will be merged soon. Could you please remind me what
the remaining trouble spots are with pdumper, i.e., the issues that are
preventing merging that branch in?
Anyway, I struggled a bit with Joseph's report (trying lots of ways to
build Emacs master on Fedora 28) and managed to reproduce a similar
problem that does indeed involve dumping. I installed into Emacs master
the attached patch, which fixed that bug for me. Joseph, please try the
latest master, and if that doesn't work then GDB may well be your friend
(though it may not be; dumping leads to reaaaally obscure problems).
[-- Attachment #2: 0001-Bring-back-nocombreloc-if-dumping.patch --]
[-- Type: text/x-patch, Size: 3402 bytes --]
From 3d67ec142099196df17a633da63e772fbe33b4fb Mon Sep 17 00:00:00 2001
From: Paul Eggert <eggert@cs.ucla.edu>
Date: Wed, 17 Oct 2018 17:55:43 -0700
Subject: [PATCH] Bring back nocombreloc if dumping
Without this patch, Emacs dumps core on Fedora 28 x86-64
when configured via "CC='gcc -m32' --enable-gcc-warnings
--without-imagemagick --without-gif --with-modules
PKG_CONFIG_LIBDIR=/usr/lib/pkgconfig:/usr/share/pkgconfig".
and then when run normally in a windowing system.
'make check' and 'emacs -nw' work OK even without the patch.
* configure.ac (LD_SWITCH_SYSTEM_TEMACS): Prepend
-znocombreloc if supported and if dumping. This mostly
reverts 2018-06-15T21:37:39!eggert@cs.ucla.edu "Remove old
combreloc hack".
---
configure.ac | 33 +++++++++++++++++++++++++++++++++
etc/PROBLEMS | 12 ++++++++++++
2 files changed, 45 insertions(+)
diff --git a/configure.ac b/configure.ac
index bfd9d5d177..3a61090902 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1336,6 +1336,37 @@ AC_DEFUN
ac_link="$ac_link $NON_GCC_LINK_TEST_OPTIONS"
fi
+dnl On some platforms using GNU ld, linking temacs needs -znocombreloc.
+dnl Although this has something to do with dumping, the details are unknown.
+dnl If the flag is used but not needed,
+dnl Emacs should still work (albeit a bit more slowly),
+dnl so use the flag everywhere that it is supported.
+dnl When testing whether the flag works, treat GCC specially
+dnl since it just gives a non-fatal 'unrecognized option'
+dnl if not built to support GNU ld.
+if test "$GCC" = yes; then
+ LDFLAGS_NOCOMBRELOC="-Wl,-znocombreloc"
+else
+ LDFLAGS_NOCOMBRELOC="-znocombreloc"
+fi
+
+AC_CACHE_CHECK([for -znocombreloc], [emacs_cv_znocombreloc],
+ [if test "$CANNOT_DUMP" = "yes"; then
+ emacs_cv_znocombreloc='not needed'
+ else
+ save_LDFLAGS=$LDFLAGS
+ LDFLAGS="$LDFLAGS $LDFLAGS_NOCOMBRELOC"
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])],
+ [emacs_cv_znocombreloc=yes], [emacs_cv_znocombreloc=no])
+ LDFLAGS=$save_LDFLAGS
+ fi])
+
+case $emacs_cv_znocombreloc in
+ no*)
+ LDFLAGS_NOCOMBRELOC= ;;
+esac
+
+
AC_CACHE_CHECK([whether addresses are sanitized],
[emacs_cv_sanitize_address],
[AC_COMPILE_IFELSE(
@@ -5346,6 +5377,8 @@ AC_DEFUN
esac
fi
+LD_SWITCH_SYSTEM_TEMACS="$LDFLAGS_NOCOMBRELOC $LD_SWITCH_SYSTEM_TEMACS"
+
AC_SUBST(LD_SWITCH_SYSTEM_TEMACS)
## Common for all window systems
diff --git a/etc/PROBLEMS b/etc/PROBLEMS
index eba3420fcb..6805e8733d 100644
--- a/etc/PROBLEMS
+++ b/etc/PROBLEMS
@@ -192,6 +192,18 @@ Upgrading to a newer version of Exceed has been reported to prevent
these crashes. You should consider switching to a free X server, such
as Xming or Cygwin/X.
+** Emacs crashes with SIGSEGV in XtInitializeWidgetClass.
+
+It crashes on X, but runs fine when called with option "-nw".
+
+This has been observed when Emacs is linked with GNU ld but without passing
+the -z nocombreloc flag. Emacs normally knows to pass the -z nocombreloc
+flag when needed, so if you come across a situation where the flag is
+necessary but missing, please report it via M-x report-emacs-bug.
+
+On platforms such as Solaris, you can also work around this problem by
+configuring your compiler to use the native linker instead of GNU ld.
+
** When Emacs is compiled with Gtk+, closing a display kills Emacs.
There is a long-standing bug in GTK that prevents it from recovering
--
2.17.2
^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: recent master core dumps building on FreeBSD i386
2018-10-18 1:09 ` Paul Eggert
@ 2018-10-18 13:28 ` Eli Zaretskii
2018-10-18 15:40 ` Joseph Mingrone
1 sibling, 0 replies; 16+ messages in thread
From: Eli Zaretskii @ 2018-10-18 13:28 UTC (permalink / raw)
To: Paul Eggert; +Cc: emacs-devel
> Cc: emacs-devel@gnu.org
> From: Paul Eggert <eggert@cs.ucla.edu>
> Date: Wed, 17 Oct 2018 18:09:39 -0700
>
> I hope the portable dumper will be merged soon. Could you please
> remind me what the remaining trouble spots are with pdumper, i.e.,
> the issues that are preventing merging that branch in?
This question seems to pop up every 3 months, and somehow people think
I remember the answer by heart ;-)
Here's what I found in the archives:
http://lists.gnu.org/archive/html/emacs-devel/2018-03/msg00924.html
http://lists.gnu.org/archive/html/emacs-devel/2018-03/msg00929.html
Note that the master branch acquired several fundamentally new
features in the meantime, such as bignums, Lisp-objects-as-pointers,
and changes in misc objects, which AFAIU will need pdumper support, so
merging the branch now will need more work than you see in the above 2
messages.
Thanks.
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: recent master core dumps building on FreeBSD i386
2018-10-18 1:09 ` Paul Eggert
2018-10-18 13:28 ` Eli Zaretskii
@ 2018-10-18 15:40 ` Joseph Mingrone
2018-10-18 15:56 ` Eli Zaretskii
2018-10-18 16:02 ` Eli Zaretskii
1 sibling, 2 replies; 16+ messages in thread
From: Joseph Mingrone @ 2018-10-18 15:40 UTC (permalink / raw)
To: Paul Eggert; +Cc: Eli Zaretskii, emacs-devel
[-- Attachment #1: Type: text/plain, Size: 3220 bytes --]
Paul Eggert <eggert@cs.ucla.edu> writes:
> On 10/17/18 9:10 AM, Eli Zaretskii wrote:
>>> As far as I can tell, the core dump began with f5896e2.
>> This is unexpected. Can you run the offending command under GDB and
>> show the backtrace from the crash, please?
> Quite possibly this is yet another obscure bug involving dumping. I hope the portable dumper will be merged soon. Could you please remind me what the remaining trouble spots are with pdumper, i.e., the
> issues that are preventing merging that branch in?
> Anyway, I struggled a bit with Joseph's report (trying lots of ways to build Emacs master on Fedora 28) and managed to reproduce a similar problem that does indeed involve dumping. I installed into Emacs
> master the attached patch, which fixed that bug for me. Joseph, please try the latest master, and if that doesn't work then GDB may well be your friend (though it may not be; dumping leads to reaaaally
> obscure problems).
The core dump still occurs with that commit (e511b9d). With `CFLAGS+=-O0 -ggdb` the build completed without problems. With just `CFLAGS+=-ggdb` it did core dump. A back trace is below.
root@11i386-default:/wrkdirs/usr/ports/editors/emacs-devel/work-full/emacs-e511b9d/src # /usr/local/bin/gdb ./temacs
GNU gdb (GDB) 8.2 [GDB v8.2 for FreeBSD]
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "i386-portbld-freebsd11.2".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from ./temacs...done.
SIGINT is used by the debugger.
Are you sure you want to change it? (y or n) [answered Y; input not from terminal]
Environment variable "DISPLAY" not defined.
TERM = screen-256color
Breakpoint 1 at 0x81599de: file emacs.c, line 370.
Temporary breakpoint 2 at 0x8177f95: file sysdep.c, line 1080.
(gdb) run --batch --no-build-details --load loadup bootstrap
Starting program: /wrkdirs/usr/ports/editors/emacs-devel/work-full/emacs-e511b9d/src/temacs --batch --no-build-details --load loadup bootstrap
./lisp.h:1170: Emacs fatal error: assertion failed: TAGGEDP (a, type) && XUNTAG (a, type, char) == ptr
Breakpoint 1, terminate_due_to_signal (sig=6, backtrace_limit=2147483647) at emacs.c:370
370 signal (sig, SIG_DFL);
(gdb) bt
#0 terminate_due_to_signal (sig=6, backtrace_limit=2147483647) at emacs.c:370
#1 0x081b6b7b in die (msg=0x8280b68 "TAGGEDP (a, type) && XUNTAG (a, type, char) == ptr", file=0x828071a "./lisp.h", line=1170) at alloc.c:7096
#2 0x08249a00 in make_lisp_ptr (type=Lisp_Vectorlike, ptr=<optimized out>) at ./lisp.h:1170
#3 syms_of_threads () at thread.c:1133
#4 0x0815b280 in main (argc=<optimized out>, argv=0xffffda6c) at emacs.c:1630
(gdb)
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 962 bytes --]
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: recent master core dumps building on FreeBSD i386
2018-10-18 15:40 ` Joseph Mingrone
@ 2018-10-18 15:56 ` Eli Zaretskii
2018-10-18 16:18 ` Eli Zaretskii
2018-10-18 16:02 ` Eli Zaretskii
1 sibling, 1 reply; 16+ messages in thread
From: Eli Zaretskii @ 2018-10-18 15:56 UTC (permalink / raw)
To: Joseph Mingrone; +Cc: eggert, emacs-devel
> From: Joseph Mingrone <jrm@ftfl.ca>
> Cc: Eli Zaretskii <eliz@gnu.org>, emacs-devel@gnu.org
> Date: Thu, 18 Oct 2018 12:40:06 -0300
>
> (gdb) run --batch --no-build-details --load loadup bootstrap
> Starting program: /wrkdirs/usr/ports/editors/emacs-devel/work-full/emacs-e511b9d/src/temacs --batch --no-build-details --load loadup bootstrap
>
> ./lisp.h:1170: Emacs fatal error: assertion failed: TAGGEDP (a, type) && XUNTAG (a, type, char) == ptr
>
> Breakpoint 1, terminate_due_to_signal (sig=6, backtrace_limit=2147483647) at emacs.c:370
> 370 signal (sig, SIG_DFL);
> (gdb) bt
> #0 terminate_due_to_signal (sig=6, backtrace_limit=2147483647) at emacs.c:370
> #1 0x081b6b7b in die (msg=0x8280b68 "TAGGEDP (a, type) && XUNTAG (a, type, char) == ptr", file=0x828071a "./lisp.h", line=1170) at alloc.c:7096
> #2 0x08249a00 in make_lisp_ptr (type=Lisp_Vectorlike, ptr=<optimized out>) at ./lisp.h:1170
> #3 syms_of_threads () at thread.c:1133
> #4 0x0815b280 in main (argc=<optimized out>, argv=0xffffda6c) at emacs.c:1630
> (gdb)
Alignment again? It does here:
XSETTHREAD (Vmain_thread, &main_thread);
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: recent master core dumps building on FreeBSD i386
2018-10-18 15:40 ` Joseph Mingrone
2018-10-18 15:56 ` Eli Zaretskii
@ 2018-10-18 16:02 ` Eli Zaretskii
2018-10-18 17:53 ` Paul Eggert
2018-10-18 19:04 ` Joseph Mingrone
1 sibling, 2 replies; 16+ messages in thread
From: Eli Zaretskii @ 2018-10-18 16:02 UTC (permalink / raw)
To: Joseph Mingrone; +Cc: eggert, emacs-devel
> From: Joseph Mingrone <jrm@ftfl.ca>
> Date: Thu, 18 Oct 2018 12:40:06 -0300
> Cc: Eli Zaretskii <eliz@gnu.org>, emacs-devel@gnu.org
>
> ./lisp.h:1170: Emacs fatal error: assertion failed: TAGGEDP (a, type) && XUNTAG (a, type, char) == ptr
>
> Breakpoint 1, terminate_due_to_signal (sig=6, backtrace_limit=2147483647) at emacs.c:370
> 370 signal (sig, SIG_DFL);
> (gdb) bt
> #0 terminate_due_to_signal (sig=6, backtrace_limit=2147483647) at emacs.c:370
> #1 0x081b6b7b in die (msg=0x8280b68 "TAGGEDP (a, type) && XUNTAG (a, type, char) == ptr", file=0x828071a "./lisp.h", line=1170) at alloc.c:7096
> #2 0x08249a00 in make_lisp_ptr (type=Lisp_Vectorlike, ptr=<optimized out>) at ./lisp.h:1170
Can you please repeat this experiment, and then, when it crashes, do
this:
(gdb) source ./.gdbinit
(gdb) frame 2
(gdb) p/x a
(gdb) xtype
and show us the results?
Thanks.
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: recent master core dumps building on FreeBSD i386
2018-10-18 15:56 ` Eli Zaretskii
@ 2018-10-18 16:18 ` Eli Zaretskii
0 siblings, 0 replies; 16+ messages in thread
From: Eli Zaretskii @ 2018-10-18 16:18 UTC (permalink / raw)
To: jrm, eggert; +Cc: emacs-devel
> Date: Thu, 18 Oct 2018 18:56:06 +0300
> From: Eli Zaretskii <eliz@gnu.org>
> Cc: eggert@cs.ucla.edu, emacs-devel@gnu.org
>
> It does here:
>
> XSETTHREAD (Vmain_thread, &main_thread);
Argh, I meant "dies".
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: recent master core dumps building on FreeBSD i386
2018-10-18 16:02 ` Eli Zaretskii
@ 2018-10-18 17:53 ` Paul Eggert
2018-10-18 19:09 ` Joseph Mingrone
2018-10-19 1:15 ` Joseph Mingrone
2018-10-18 19:04 ` Joseph Mingrone
1 sibling, 2 replies; 16+ messages in thread
From: Paul Eggert @ 2018-10-18 17:53 UTC (permalink / raw)
To: Eli Zaretskii, Joseph Mingrone; +Cc: emacs-devel
[-- Attachment #1: Type: text/plain, Size: 1115 bytes --]
On 10/18/18 9:02 AM, Eli Zaretskii wrote:
> Can you please repeat this experiment, and then, when it crashes, do
> this:
>
> (gdb) source ./.gdbinit
> (gdb) frame 2
> (gdb) p/x a
> (gdb) xtype
>
> and show us the results?
Also, please try these GDB commands when debugging ./temacs:
b syms_of_threads
r -Q
p &main_thread
disas syms_of_threads
p &Vmain_thread
I'm attaching the output of these commands on Fedora 28 x86-64 compiled
with 'gcc -m32 -march=native -g3 -O2' (AMD Phenom II X4 910e). Evidently
your compiler (clang?) is not inlining make_lisp_ptr, but it's still
useful to know what it's up to. I see that GCC optimizes away not only
the call to make_lisp_ptr, but also the runtime check 'TAGGEDP (a, type)
&& XUNTAG (a, type, char) == ptr', I guess because GCC knows that
main_thread is properly aligned so TAGGEDP must succeed here. clang
isn't smart enough to do this sort of optimization (at least on Fedora)
so if you're using clang that might partly explain the problem.
Also, please investigate what the macro GCALIGNED_STRUCT expands to. You
can use 'gcc -E' to do that.
[-- Attachment #2: gdb.txt --]
[-- Type: text/plain, Size: 4494 bytes --]
(gdb) b syms_of_threads
Breakpoint 1 at 0x8245e40: file thread.c, line 1097.
(gdb) r -Q
Starting program: /home/eggert/src/gnu/emacs/master-tmp/src/temacs -Q
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".
Breakpoint 1, syms_of_threads () at thread.c:1097
(gdb) p &main_thread
$1 = (struct thread_state *) 0x85f2920 <main_thread>
(gdb) disas syms_of_threads
Dump of assembler code for function syms_of_threads:
=> 0x08245e40 <+0>: push %ebx
0x08245e41 <+1>: sub $0x14,%esp
0x08245e44 <+4>: push $0x8597340
0x08245e49 <+9>: call 0x8203e00 <defsubr>
0x08245e4e <+14>: movl $0x8597320,(%esp)
0x08245e55 <+21>: call 0x8203e00 <defsubr>
0x08245e5a <+26>: movl $0x8597300,(%esp)
0x08245e61 <+33>: call 0x8203e00 <defsubr>
0x08245e66 <+38>: movl $0x85972e0,(%esp)
0x08245e6d <+45>: call 0x8203e00 <defsubr>
0x08245e72 <+50>: movl $0x85972c0,(%esp)
0x08245e79 <+57>: call 0x8203e00 <defsubr>
0x08245e7e <+62>: movl $0x85972a0,(%esp)
0x08245e85 <+69>: call 0x8203e00 <defsubr>
0x08245e8a <+74>: movl $0x8597260,(%esp)
0x08245e91 <+81>: call 0x8203e00 <defsubr>
0x08245e96 <+86>: movl $0x8597280,(%esp)
0x08245e9d <+93>: call 0x8203e00 <defsubr>
0x08245ea2 <+98>: movl $0x8597240,(%esp)
0x08245ea9 <+105>: call 0x8203e00 <defsubr>
0x08245eae <+110>: movl $0x8597460,(%esp)
0x08245eb5 <+117>: call 0x8203e00 <defsubr>
0x08245eba <+122>: movl $0x8597440,(%esp)
0x08245ec1 <+129>: call 0x8203e00 <defsubr>
0x08245ec6 <+134>: movl $0x8597420,(%esp)
0x08245ecd <+141>: call 0x8203e00 <defsubr>
0x08245ed2 <+146>: movl $0x8597400,(%esp)
0x08245ed9 <+153>: call 0x8203e00 <defsubr>
0x08245ede <+158>: movl $0x85973e0,(%esp)
0x08245ee5 <+165>: call 0x8203e00 <defsubr>
0x08245eea <+170>: movl $0x85973c0,(%esp)
0x08245ef1 <+177>: call 0x8203e00 <defsubr>
0x08245ef6 <+182>: movl $0x85973a0,(%esp)
0x08245efd <+189>: call 0x8203e00 <defsubr>
0x08245f02 <+194>: movl $0x8597380,(%esp)
0x08245f09 <+201>: call 0x8203e00 <defsubr>
0x08245f0e <+206>: movl $0x8597360,(%esp)
0x08245f15 <+213>: call 0x8203e00 <defsubr>
0x08245f1a <+218>: movl $0x8597220,(%esp)
0x08245f21 <+225>: call 0x8203e00 <defsubr>
0x08245f26 <+230>: movl $0x85f28e8,(%esp)
0x08245f2d <+237>: call 0x81b17a0 <staticpro>
0x08245f32 <+242>: pop %edx
0x08245f33 <+243>: pop %ecx
0x08245f34 <+244>: push $0xd
0x08245f36 <+246>: push $0x82acace
0x08245f3b <+251>: movl $0x0,0x85f28e8
0x08245f45 <+261>: call 0x81ff540 <intern_c_string_1>
0x08245f4a <+266>: mov %eax,%ebx
0x08245f4c <+268>: pop %eax
0x08245f4d <+269>: pop %edx
0x08245f4e <+270>: push $0xe
0x08245f50 <+272>: push $0x82acadc
0x08245f55 <+277>: call 0x81ff540 <intern_c_string_1>
0x08245f5a <+282>: add $0xc,%esp
0x08245f5d <+285>: push $0x0
0x08245f5f <+287>: push %ebx
0x08245f60 <+288>: push %eax
0x08245f61 <+289>: call 0x81b9d00 <Fdefalias>
0x08245f66 <+294>: pop %ecx
0x08245f67 <+295>: pop %ebx
0x08245f68 <+296>: push $0x7
0x08245f6a <+298>: push $0x82acb0d
0x08245f6f <+303>: call 0x81ff540 <intern_c_string_1>
0x08245f74 <+308>: pop %edx
0x08245f75 <+309>: pop %ecx
0x08245f76 <+310>: push $0x0
0x08245f78 <+312>: push %eax
0x08245f79 <+313>: call 0x81e15e0 <Fprovide>
0x08245f7e <+318>: add $0xc,%esp
0x08245f81 <+321>: push $0x85df124
0x08245f86 <+326>: push $0x82acaeb
0x08245f8b <+331>: push $0x85f28e0
0x08245f90 <+336>: call 0x82040e0 <defvar_lisp>
0x08245f95 <+341>: add $0x10,%esp
0x08245f98 <+344>: cmpb $0x0,0x85d64e0
0x08245f9f <+351>: movl $0x85f2925,0x85df124
0x08245fa9 <+361>: jne 0x8245fbc <syms_of_threads+380>
0x08245fab <+363>: mov 0x85f2920,%eax
0x08245fb0 <+368>: and $0x7f000000,%eax
0x08245fb5 <+373>: cmp $0x54000000,%eax
0x08245fba <+378>: jne 0x8245fc1 <syms_of_threads+385>
0x08245fbc <+380>: add $0x8,%esp
0x08245fbf <+383>: pop %ebx
0x08245fc0 <+384>: ret
0x08245fc1 <+385>: push %eax
0x08245fc2 <+386>: push $0x46d
0x08245fc7 <+391>: push $0x82acbfb
0x08245fcc <+396>: push $0x82ac968
0x08245fd1 <+401>: call 0x81b1820 <die>
End of assembler dump.
(gdb) p &Vmain_thread
$2 = (Lisp_Object *) 0x85df124 <globals+740>
(gdb)
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: recent master core dumps building on FreeBSD i386
2018-10-18 16:02 ` Eli Zaretskii
2018-10-18 17:53 ` Paul Eggert
@ 2018-10-18 19:04 ` Joseph Mingrone
1 sibling, 0 replies; 16+ messages in thread
From: Joseph Mingrone @ 2018-10-18 19:04 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: eggert, emacs-devel
[-- Attachment #1: Type: text/plain, Size: 8522 bytes --]
Eli Zaretskii <eliz@gnu.org> writes:
>> From: Joseph Mingrone <jrm@ftfl.ca>
>> Date: Thu, 18 Oct 2018 12:40:06 -0300
>> Cc: Eli Zaretskii <eliz@gnu.org>, emacs-devel@gnu.org
>> ./lisp.h:1170: Emacs fatal error: assertion failed: TAGGEDP (a, type) && XUNTAG (a, type, char) == ptr
>> Breakpoint 1, terminate_due_to_signal (sig=6, backtrace_limit=2147483647) at emacs.c:370
>> 370 signal (sig, SIG_DFL);
>> (gdb) bt
>> #0 terminate_due_to_signal (sig=6, backtrace_limit=2147483647) at emacs.c:370
>> #1 0x081b6b7b in die (msg=0x8280b68 "TAGGEDP (a, type) && XUNTAG (a, type, char) == ptr", file=0x828071a "./lisp.h", line=1170) at alloc.c:7096
>> #2 0x08249a00 in make_lisp_ptr (type=Lisp_Vectorlike, ptr=<optimized out>) at ./lisp.h:1170
> Can you please repeat this experiment, and then, when it crashes, do
> this:
> (gdb) source ./.gdbinit
> (gdb) frame 2
> (gdb) p/x a
> (gdb) xtype
> and show us the results?
> Thanks.
root@11i386-default:/wrkdirs/usr/ports/editors/emacs-devel/work-full/emacs-e511b9d/src # /usr/local/bin/gdb ./temacs
GNU gdb (GDB) 8.2 [GDB v8.2 for FreeBSD]
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "i386-portbld-freebsd11.2".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from ./temacs...done.
SIGINT is used by the debugger.
Are you sure you want to change it? (y or n) [answered Y; input not from terminal]
Environment variable "DISPLAY" not defined.
TERM = screen-256color
Breakpoint 1 at 0x81599de: file emacs.c, line 370.
Temporary breakpoint 2 at 0x8177f95: file sysdep.c, line 1080.
(gdb) run --batch --no-build-details --load loadup bootstrap
Starting program: /wrkdirs/usr/ports/editors/emacs-devel/work-full/emacs-e511b9d/src/temacs --batch --no-build-details --load loadup bootstrap
./lisp.h:1170: Emacs fatal error: assertion failed: TAGGEDP (a, type) && XUNTAG (a, type, char) == ptr
Breakpoint 1, terminate_due_to_signal (sig=6, backtrace_limit=2147483647) at emacs.c:370
370 signal (sig, SIG_DFL);
(gdb) source ./.gdbinit
SIGINT is used by the debugger.
Are you sure you want to change it? (y or n) [answered Y; input not from terminal]
Redefine command "xgetptr"? (y or n) [answered Y; input not from terminal]
Redefine command "xgetint"? (y or n) [answered Y; input not from terminal]
Redefine command "xgettype"? (y or n) [answered Y; input not from terminal]
Redefine command "xgetsym"? (y or n) [answered Y; input not from terminal]
Redefine command "xsymname"? (y or n) [answered Y; input not from terminal]
Redefine command "pr"? (y or n) [answered Y; input not from terminal]
Redefine command "pp"? (y or n) [answered Y; input not from terminal]
Redefine command "pv"? (y or n) [answered Y; input not from terminal]
Redefine command "xfmt"? (y or n) [answered Y; input not from terminal]
Redefine command "ppt"? (y or n) [answered Y; input not from terminal]
Redefine command "pitmethod"? (y or n) [answered Y; input not from terminal]
Redefine command "pitx"? (y or n) [answered Y; input not from terminal]
Redefine command "pit"? (y or n) [answered Y; input not from terminal]
Redefine command "prowx"? (y or n) [answered Y; input not from terminal]
Redefine command "prow"? (y or n) [answered Y; input not from terminal]
Redefine command "pcursorx"? (y or n) [answered Y; input not from terminal]
Redefine command "pcursor"? (y or n) [answered Y; input not from terminal]
Redefine command "pwinx"? (y or n) [answered Y; input not from terminal]
Redefine command "pwin"? (y or n) [answered Y; input not from terminal]
Redefine command "pbiditype"? (y or n) [answered Y; input not from terminal]
Redefine command "pgx"? (y or n) [answered Y; input not from terminal]
Redefine command "pg"? (y or n) [answered Y; input not from terminal]
Redefine command "pgi"? (y or n) [answered Y; input not from terminal]
Redefine command "pgn"? (y or n) [answered Y; input not from terminal]
Redefine command "pgrowx"? (y or n) [answered Y; input not from terminal]
Redefine command "pgrow"? (y or n) [answered Y; input not from terminal]
Redefine command "pgrowit"? (y or n) [answered Y; input not from terminal]
Redefine command "prowlims"? (y or n) [answered Y; input not from terminal]
Redefine command "pmtxrows"? (y or n) [answered Y; input not from terminal]
Redefine command "xtype"? (y or n) [answered Y; input not from terminal]
Redefine command "pvectype"? (y or n) [answered Y; input not from terminal]
Redefine command "xvectype"? (y or n) [answered Y; input not from terminal]
Redefine command "pvecsize"? (y or n) [answered Y; input not from terminal]
Redefine command "xvecsize"? (y or n) [answered Y; input not from terminal]
Redefine command "xint"? (y or n) [answered Y; input not from terminal]
Redefine command "xptr"? (y or n) [answered Y; input not from terminal]
Redefine command "xmarker"? (y or n) [answered Y; input not from terminal]
Redefine command "xoverlay"? (y or n) [answered Y; input not from terminal]
--Type <RET> for more, q to quit, c to continue without paging--
Redefine command "xsymbol"? (y or n) [answered Y; input not from terminal]
Redefine command "xstring"? (y or n) [answered Y; input not from terminal]
Redefine command "xvector"? (y or n) [answered Y; input not from terminal]
Redefine command "xprocess"? (y or n) [answered Y; input not from terminal]
Redefine command "xframe"? (y or n) [answered Y; input not from terminal]
Redefine command "xcompiled"? (y or n) [answered Y; input not from terminal]
Redefine command "xwindow"? (y or n) [answered Y; input not from terminal]
Redefine command "xwinconfig"? (y or n) [answered Y; input not from terminal]
Redefine command "xsubr"? (y or n) [answered Y; input not from terminal]
Redefine command "xchartable"? (y or n) [answered Y; input not from terminal]
Redefine command "xsubchartable"? (y or n) [answered Y; input not from terminal]
Redefine command "xboolvector"? (y or n) [answered Y; input not from terminal]
Redefine command "xbuffer"? (y or n) [answered Y; input not from terminal]
Redefine command "xhashtable"? (y or n) [answered Y; input not from terminal]
Redefine command "xcons"? (y or n) [answered Y; input not from terminal]
Redefine command "nextcons"? (y or n) [answered Y; input not from terminal]
Redefine command "xcar"? (y or n) [answered Y; input not from terminal]
Redefine command "xcdr"? (y or n) [answered Y; input not from terminal]
Redefine command "xlist"? (y or n) [answered Y; input not from terminal]
Redefine command "xfloat"? (y or n) [answered Y; input not from terminal]
Redefine command "xscrollbar"? (y or n) [answered Y; input not from terminal]
Redefine command "xpr"? (y or n) [answered Y; input not from terminal]
Redefine command "xprintstr"? (y or n) [answered Y; input not from terminal]
Redefine command "xprintsym"? (y or n) [answered Y; input not from terminal]
Redefine command "xcoding"? (y or n) [answered Y; input not from terminal]
Redefine command "xcharset"? (y or n) [answered Y; input not from terminal]
Redefine command "xfontset"? (y or n) [answered Y; input not from terminal]
Redefine command "xfont"? (y or n) [answered Y; input not from terminal]
Redefine command "xbacktrace"? (y or n) [answered Y; input not from terminal]
Redefine command "xprintbytestr"? (y or n) [answered Y; input not from terminal]
Redefine command "xwhichsymbols"? (y or n) [answered Y; input not from terminal]
Redefine command "hookpost-backtrace"? (y or n) [answered Y; input not from terminal]
Redefine command "ff"? (y or n) [answered Y; input not from terminal]
Environment variable "DISPLAY" not defined.
TERM = screen-256color
Breakpoint 3 at 0x81599de: file emacs.c, line 370.
Temporary breakpoint 4 at 0x8177f95: file sysdep.c, line 1080.
(gdb) frame 2
#2 0x08249a00 in make_lisp_ptr (type=Lisp_Vectorlike, ptr=<optimized out>) at ./lisp.h:1170
1170 eassert (TAGGEDP (a, type) && XUNTAG (a, type, char) == ptr);
(gdb) p/x a
$1 = <optimized out>
(gdb) xtype
value has been optimized out
(gdb)
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 962 bytes --]
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: recent master core dumps building on FreeBSD i386
2018-10-18 17:53 ` Paul Eggert
@ 2018-10-18 19:09 ` Joseph Mingrone
2018-10-18 19:16 ` Paul Eggert
2018-10-19 1:15 ` Joseph Mingrone
1 sibling, 1 reply; 16+ messages in thread
From: Joseph Mingrone @ 2018-10-18 19:09 UTC (permalink / raw)
To: Paul Eggert; +Cc: Eli Zaretskii, emacs-devel
[-- Attachment #1: Type: text/plain, Size: 8517 bytes --]
Paul Eggert <eggert@cs.ucla.edu> writes:
> On 10/18/18 9:02 AM, Eli Zaretskii wrote:
>> Can you please repeat this experiment, and then, when it crashes, do
>> this:
>> (gdb) source ./.gdbinit
>> (gdb) frame 2
>> (gdb) p/x a
>> (gdb) xtype
>> and show us the results?
> Also, please try these GDB commands when debugging ./temacs:
> b syms_of_threads
> r -Q
> p &main_thread
> disas syms_of_threads
> p &Vmain_thread
> I'm attaching the output of these commands on Fedora 28 x86-64 compiled with 'gcc -m32 -march=native -g3 -O2' (AMD Phenom II X4 910e). Evidently your compiler (clang?) is not inlining make_lisp_ptr, but
> it's still useful to know what it's up to. I see that GCC optimizes away not only the call to make_lisp_ptr, but also the runtime check 'TAGGEDP (a, type) && XUNTAG (a, type, char) == ptr', I guess because
> GCC knows that main_thread is properly aligned so TAGGEDP must succeed here. clang isn't smart enough to do this sort of optimization (at least on Fedora) so if you're using clang that might partly explain
> the problem.
root@11i386-default:/wrkdirs/usr/ports/editors/emacs-devel/work-full/emacs-e511b9d/src # /usr/local/bin/gdb ./temacs
GNU gdb (GDB) 8.2 [GDB v8.2 for FreeBSD]
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "i386-portbld-freebsd11.2".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from ./temacs...done.
SIGINT is used by the debugger.
Are you sure you want to change it? (y or n) [answered Y; input not from terminal]
Environment variable "DISPLAY" not defined.
TERM = screen-256color
Breakpoint 1 at 0x81599de: file emacs.c, line 370.
Temporary breakpoint 2 at 0x8177f95: file sysdep.c, line 1080.
(gdb) b syms_of_threads
Breakpoint 3 at 0x8249851: file thread.c, line 1098.
(gdb) r -Q
Starting program: /wrkdirs/usr/ports/editors/emacs-devel/work-full/emacs-e511b9d/src/temacs -Q
Breakpoint 3, syms_of_threads () at thread.c:1098
1098 defsubr (&Smake_thread);
(gdb) p &main_thread
$1 = (struct thread_state *) 0x8554d0c <main_thread>
(gdb) disas syms_of_threads
Dump of assembler code for function syms_of_threads:
0x08249840 <+0>: push %ebp
0x08249841 <+1>: mov %esp,%ebp
0x08249843 <+3>: push %esi
0x08249844 <+4>: push $0x8506838
0x08249849 <+9>: call 0x8202e90 <defsubr>
0x0824984e <+14>: add $0x4,%esp
=> 0x08249851 <+17>: push $0x8506898
0x08249856 <+22>: call 0x8202e90 <defsubr>
0x0824985b <+27>: add $0x4,%esp
0x0824985e <+30>: push $0x8506858
0x08249863 <+35>: call 0x8202e90 <defsubr>
0x08249868 <+40>: add $0x4,%esp
0x0824986b <+43>: push $0x85068b8
0x08249870 <+48>: call 0x8202e90 <defsubr>
0x08249875 <+53>: add $0x4,%esp
0x08249878 <+56>: push $0x85068d8
0x0824987d <+61>: call 0x8202e90 <defsubr>
0x08249882 <+66>: add $0x4,%esp
0x08249885 <+69>: push $0x85068f8
0x0824988a <+74>: call 0x8202e90 <defsubr>
0x0824988f <+79>: add $0x4,%esp
0x08249892 <+82>: push $0x8506918
0x08249897 <+87>: call 0x8202e90 <defsubr>
0x0824989c <+92>: add $0x4,%esp
0x0824989f <+95>: push $0x8506938
0x082498a4 <+100>: call 0x8202e90 <defsubr>
0x082498a9 <+105>: add $0x4,%esp
0x082498ac <+108>: push $0x8506878
0x082498b1 <+113>: call 0x8202e90 <defsubr>
0x082498b6 <+118>: add $0x4,%esp
0x082498b9 <+121>: push $0x8506958
0x082498be <+126>: call 0x8202e90 <defsubr>
0x082498c3 <+131>: add $0x4,%esp
0x082498c6 <+134>: push $0x8506978
0x082498cb <+139>: call 0x8202e90 <defsubr>
0x082498d0 <+144>: add $0x4,%esp
0x082498d3 <+147>: push $0x8506998
0x082498d8 <+152>: call 0x8202e90 <defsubr>
0x082498dd <+157>: add $0x4,%esp
--Type <RET> for more, q to quit, c to continue without paging--
0x082498e0 <+160>: push $0x85069b8
0x082498e5 <+165>: call 0x8202e90 <defsubr>
0x082498ea <+170>: add $0x4,%esp
0x082498ed <+173>: push $0x85069d8
0x082498f2 <+178>: call 0x8202e90 <defsubr>
0x082498f7 <+183>: add $0x4,%esp
0x082498fa <+186>: push $0x85069f8
0x082498ff <+191>: call 0x8202e90 <defsubr>
0x08249904 <+196>: add $0x4,%esp
0x08249907 <+199>: push $0x8506a18
0x0824990c <+204>: call 0x8202e90 <defsubr>
0x08249911 <+209>: add $0x4,%esp
0x08249914 <+212>: push $0x8506a38
0x08249919 <+217>: call 0x8202e90 <defsubr>
0x0824991e <+222>: add $0x4,%esp
0x08249921 <+225>: push $0x8506a58
0x08249926 <+230>: call 0x8202e90 <defsubr>
0x0824992b <+235>: add $0x4,%esp
0x0824992e <+238>: push $0x8506a78
0x08249933 <+243>: call 0x8202e90 <defsubr>
0x08249938 <+248>: add $0x4,%esp
0x0824993b <+251>: push $0x8554dc0
0x08249940 <+256>: call 0x81bad60 <staticpro>
0x08249945 <+261>: add $0x4,%esp
0x08249948 <+264>: movl $0x0,0x8554dc0
0x08249952 <+274>: push $0xe
0x08249954 <+276>: push $0x82ab272
0x08249959 <+281>: call 0x8202460 <intern_c_string_1>
0x0824995e <+286>: add $0x8,%esp
0x08249961 <+289>: mov %eax,%esi
0x08249963 <+291>: push $0xd
0x08249965 <+293>: push $0x82ab281
0x0824996a <+298>: call 0x8202460 <intern_c_string_1>
0x0824996f <+303>: add $0x8,%esp
0x08249972 <+306>: push $0x0
0x08249974 <+308>: push %eax
0x08249975 <+309>: push %esi
0x08249976 <+310>: call 0x81c0930 <Fdefalias>
0x0824997b <+315>: add $0xc,%esp
0x0824997e <+318>: push $0x7
--Type <RET> for more, q to quit, c to continue without paging--
0x08249980 <+320>: push $0x82ab691
0x08249985 <+325>: call 0x8202460 <intern_c_string_1>
0x0824998a <+330>: add $0x8,%esp
0x0824998d <+333>: push $0x0
0x0824998f <+335>: push %eax
0x08249990 <+336>: call 0x81e4ad0 <Fprovide>
0x08249995 <+341>: add $0x8,%esp
0x08249998 <+344>: push $0x8557a54
0x0824999d <+349>: push $0x82ab28f
0x082499a2 <+354>: push $0x8554dc8
0x082499a7 <+359>: call 0x82030f0 <defvar_lisp>
0x082499ac <+364>: add $0xc,%esp
0x082499af <+367>: cmpb $0x0,0x8557ef0
0x082499b6 <+374>: je 0x82499c4 <syms_of_threads+388>
0x082499b8 <+376>: movl $0x8554d11,0x8557a54
0x082499c2 <+386>: jmp 0x82499e9 <syms_of_threads+425>
0x082499c4 <+388>: mov $0x8554d14,%eax
0x082499c9 <+393>: test $0x7,%al
0x082499cb <+395>: jne 0x82499ec <syms_of_threads+428>
0x082499cd <+397>: movl $0x8554d11,0x8557a54
0x082499d7 <+407>: mov $0x7f000000,%eax
0x082499dc <+412>: and 0x8554d0c,%eax
0x082499e2 <+418>: cmp $0x54000000,%eax
0x082499e7 <+423>: jne 0x8249a00 <syms_of_threads+448>
0x082499e9 <+425>: pop %esi
0x082499ea <+426>: pop %ebp
0x082499eb <+427>: ret
0x082499ec <+428>: push $0x492
0x082499f1 <+433>: push $0x828071a
0x082499f6 <+438>: push $0x8280b68
0x082499fb <+443>: call 0x81b6b50 <die>
0x08249a00 <+448>: push $0x46d
0x08249a05 <+453>: push $0x82ab73e
0x08249a0a <+458>: push $0x82ab29b
0x08249a0f <+463>: call 0x81b6b50 <die>
End of assembler dump.
(gdb) p &Vmain_thread
No symbol "Vmain_thread" in current context.
(gdb) quit
A debugging session is active.
Inferior 1 [process 86154] will be killed.
Quit anyway? (y or n) y
root@11i386-default:/wrkdirs/usr/ports/editors/emacs-devel/work-full/emacs-e511b9d/src # CC --version
FreeBSD clang version 6.0.0 (tags/RELEASE_600/final 326565) (based on LLVM 6.0.0)
Target: i386-unknown-freebsd11.2
Thread model: posix
InstalledDir: /usr/bin
> Also, please investigate what the macro GCALIGNED_STRUCT expands to. You can use 'gcc -E' to do that.
I'll get back to you with this soon.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 962 bytes --]
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: recent master core dumps building on FreeBSD i386
2018-10-18 19:09 ` Joseph Mingrone
@ 2018-10-18 19:16 ` Paul Eggert
0 siblings, 0 replies; 16+ messages in thread
From: Paul Eggert @ 2018-10-18 19:16 UTC (permalink / raw)
To: Joseph Mingrone; +Cc: Eli Zaretskii, emacs-devel
On 10/18/18 12:09 PM, Joseph Mingrone wrote:
> (gdb) p &main_thread
> $1 = (struct thread_state *) 0x8554d0c <main_thread>
main_thread is not properly aligned; its address is a multiple of 4, but
it should be a multiple of 8. That's the problem. Somehow
GCALIGNED_STRUCT is not working on your platform.
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: recent master core dumps building on FreeBSD i386
2018-10-18 17:53 ` Paul Eggert
2018-10-18 19:09 ` Joseph Mingrone
@ 2018-10-19 1:15 ` Joseph Mingrone
2018-10-19 16:28 ` Paul Eggert
1 sibling, 1 reply; 16+ messages in thread
From: Joseph Mingrone @ 2018-10-19 1:15 UTC (permalink / raw)
To: Paul Eggert; +Cc: Eli Zaretskii, emacs-devel
[-- Attachment #1: Type: text/plain, Size: 1637 bytes --]
Paul Eggert <eggert@cs.ucla.edu> writes:
> On 10/18/18 9:02 AM, Eli Zaretskii wrote:
>> Can you please repeat this experiment, and then, when it crashes, do
>> this:
>> (gdb) source ./.gdbinit
>> (gdb) frame 2
>> (gdb) p/x a
>> (gdb) xtype
>> and show us the results?
> Also, please try these GDB commands when debugging ./temacs:
> b syms_of_threads
> r -Q
> p &main_thread
> disas syms_of_threads
> p &Vmain_thread
> I'm attaching the output of these commands on Fedora 28 x86-64 compiled with 'gcc -m32 -march=native -g3 -O2' (AMD Phenom II X4 910e). Evidently your compiler (clang?) is not inlining make_lisp_ptr, but
> it's still useful to know what it's up to. I see that GCC optimizes away not only the call to make_lisp_ptr, but also the runtime check 'TAGGEDP (a, type) && XUNTAG (a, type, char) == ptr', I guess because
> GCC knows that main_thread is properly aligned so TAGGEDP must succeed here. clang isn't smart enough to do this sort of optimization (at least on Fedora) so if you're using clang that might partly explain
> the problem.
> Also, please investigate what the macro GCALIGNED_STRUCT expands to. You can use 'gcc -E' to do that.
Is it still helpful for me to investigate what GCALIGNED_STRUCT expands to? If so, could elaborate on how I can get this?
Paul Eggert <eggert@cs.ucla.edu> writes:
> main_thread is not properly aligned; its address is a multiple of 4, but it should be a multiple of 8. That's the problem. Somehow GCALIGNED_STRUCT is not working on your platform.
Is there anything else helpful for me to investigate or do you recommend that I report this problem elsewhere?
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 962 bytes --]
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: recent master core dumps building on FreeBSD i386
2018-10-19 1:15 ` Joseph Mingrone
@ 2018-10-19 16:28 ` Paul Eggert
2018-10-19 19:06 ` Joseph Mingrone
0 siblings, 1 reply; 16+ messages in thread
From: Paul Eggert @ 2018-10-19 16:28 UTC (permalink / raw)
To: Joseph Mingrone; +Cc: Eli Zaretskii, emacs-devel
[-- Attachment #1: Type: text/plain, Size: 987 bytes --]
On 10/18/18 6:15 PM, Joseph Mingrone wrote:
> Is it still helpful for me to investigate what GCALIGNED_STRUCT expands to? If so, could elaborate on how I can get this?
To get the expansion (but see below first), put the following into a
file src/t.c:
#include <config.h>
#include <lisp.h>
"GCALIGNED_STRUCT" GCALIGNED_STRUCT
and then run 'cd src; cc -E -I. -I../lib t.c | tail -n1'. You probably
need to adjust that command line to match the way you're building Emacs.
My output with current master on Fedora x86-64 is:
"GCALIGNED_STRUCT" __attribute__ ((aligned (8)))
However, in thinking about this some more I do see a problem that could
explain your symptoms, a problem that resulted from a merge from
emacs-26 that collided with changes in the master without Git (or me)
noticing the collision. I installed the attached patch into master to
fix it. Please try this patch first, and we can worry about
GCALIGNED_STRUCT only if this patch does not fix things for you.
[-- Attachment #2: 0001-Fix-struct-thread-alignment-on-FreeBSD-x86.txt --]
[-- Type: text/plain, Size: 9704 bytes --]
From 1b28be70c4fcb7145a1c9c76023638e26146315f Mon Sep 17 00:00:00 2001
From: Paul Eggert <eggert@cs.ucla.edu>
Date: Fri, 19 Oct 2018 09:06:52 -0700
Subject: [PATCH] Fix struct thread alignment on FreeBSD x86
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Problem reported by Joseph Mingrone in:
https://lists.gnu.org/r/emacs-devel/2018-10/msg00238.html
While we’re at it, apply a similar fix to struct Lisp_Subr; this
removes the need for GCALIGNED_STRUCT_MEMBER and thus can shrink
struct Lisp_Subr a bit.
* configure.ac (HAVE_STRUCT_ATTRIBUTE_ALIGNED): Bring back this macro.
Although used only for performance (not to actually align
structures), we might as well take advantage of it.
* src/lisp.h (GCALIGNED_STRUCT_MEMBER): Remove; all uses removed.
(union Aligned_Lisp_Subr): New type, like struct Lisp_Subr but aligned.
* src/lisp.h (XSUBR, DEFUN):
* src/lread.c (defsubr): Use it. All callers changed.
* src/thread.c (union aligned_thread_state): New type.
(main_thread): Now of this type, so it’s aligned.
All uses changed.
* src/xmenu.c (syms_of_xmenu) [USE_GTK || USE_X_TOOLKIT]:
Adjust to union Aligned_Lisp_Subr change.
---
configure.ac | 16 ++++++++++++++++
src/lisp.h | 37 +++++++++++++++++++------------------
src/lread.c | 3 ++-
src/thread.c | 47 +++++++++++++++++++++++++++--------------------
| 2 +-
5 files changed, 65 insertions(+), 40 deletions(-)
diff --git a/configure.ac b/configure.ac
index 3a61090902..50e3333528 100644
--- a/configure.ac
+++ b/configure.ac
@@ -5207,6 +5207,22 @@ AC_DEFUN
fi
AC_SUBST(LIBXMENU)
+AC_CACHE_CHECK([for struct alignment],
+ [emacs_cv_struct_alignment],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([[#include <stddef.h>
+ struct s { char c; } __attribute__ ((aligned (8)));
+ struct t { char c; struct s s; };
+ char verify[offsetof (struct t, s) == 8 ? 1 : -1];
+ ]])],
+ [emacs_cv_struct_alignment=yes],
+ [emacs_cv_struct_alignment=no])])
+if test "$emacs_cv_struct_alignment" = yes; then
+ AC_DEFINE([HAVE_STRUCT_ATTRIBUTE_ALIGNED], 1,
+ [Define to 1 if 'struct __attribute__ ((aligned (N)))' aligns the
+ structure to an N-byte boundary.])
+fi
+
if test "${GNU_MALLOC}" = "yes" ; then
AC_DEFINE(GNU_MALLOC, 1,
[Define to 1 if you want to use the GNU memory allocator.])
diff --git a/src/lisp.h b/src/lisp.h
index 145901dff5..eb6762678c 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -229,7 +229,7 @@ extern bool suppress_checking EXTERNALLY_VISIBLE;
USE_LSB_TAG not only requires the least 3 bits of pointers returned by
malloc to be 0 but also needs to be able to impose a mult-of-8 alignment
on some non-GC Lisp_Objects, all of which are aligned via
- GCALIGNED_UNION_MEMBER, GCALIGNED_STRUCT_MEMBER, and GCALIGNED_STRUCT. */
+ GCALIGNED_UNION_MEMBER. */
enum Lisp_Bits
{
@@ -284,15 +284,14 @@ error !;
# define GCALIGNMENT 1
#endif
-/* If a struct is always allocated by the GC and is therefore always
- GC-aligned, put GCALIGNED_STRUCT after its closing '}'; this can
- help the compiler generate better code.
+/* To cause a union to have alignment of at least GCALIGNMENT, put
+ GCALIGNED_UNION_MEMBER in its member list.
- To cause a union to have alignment of at least GCALIGNMENT, put
- GCALIGNED_UNION_MEMBER in its member list. Similarly for a struct
- and GCALIGNED_STRUCT_MEMBER, although this may make the struct a
- bit bigger on non-GCC platforms. Any struct using
- GCALIGNED_STRUCT_MEMBER should also use GCALIGNED_STRUCT.
+ If a struct is always GC-aligned (either by the GC, or via
+ allocation in a containing union that has GCALIGNED_UNION_MEMBER)
+ and does not contain a GC-aligned struct or union, putting
+ GCALIGNED_STRUCT after its closing '}' can help the compiler
+ generate better code.
Although these macros are reasonably portable, they are not
guaranteed on non-GCC platforms, as C11 does not require support
@@ -306,10 +305,8 @@ error !;
#define GCALIGNED_UNION_MEMBER char alignas (GCALIGNMENT) gcaligned;
#if HAVE_STRUCT_ATTRIBUTE_ALIGNED
-# define GCALIGNED_STRUCT_MEMBER
# define GCALIGNED_STRUCT __attribute__ ((aligned (GCALIGNMENT)))
#else
-# define GCALIGNED_STRUCT_MEMBER GCALIGNED_UNION_MEMBER
# define GCALIGNED_STRUCT
#endif
#define GCALIGNED(type) (alignof (type) % GCALIGNMENT == 0)
@@ -1970,9 +1967,13 @@ struct Lisp_Subr
const char *symbol_name;
const char *intspec;
EMACS_INT doc;
- GCALIGNED_STRUCT_MEMBER
} GCALIGNED_STRUCT;
-verify (GCALIGNED (struct Lisp_Subr));
+union Aligned_Lisp_Subr
+ {
+ struct Lisp_Subr s;
+ GCALIGNED_UNION_MEMBER
+ };
+verify (GCALIGNED (union Aligned_Lisp_Subr));
INLINE bool
SUBRP (Lisp_Object a)
@@ -1984,7 +1985,7 @@ INLINE struct Lisp_Subr *
XSUBR (Lisp_Object a)
{
eassert (SUBRP (a));
- return XUNTAG (a, Lisp_Vectorlike, struct Lisp_Subr);
+ return &XUNTAG (a, Lisp_Vectorlike, union Aligned_Lisp_Subr)->s;
}
enum char_table_specials
@@ -2952,15 +2953,15 @@ CHECK_FIXNUM_CDR (Lisp_Object x)
/* This version of DEFUN declares a function prototype with the right
arguments, so we can catch errors with maxargs at compile-time. */
#define DEFUN(lname, fnname, sname, minargs, maxargs, intspec, doc) \
- static struct Lisp_Subr sname = \
- { { PVEC_SUBR << PSEUDOVECTOR_AREA_BITS }, \
+ static union Aligned_Lisp_Subr sname = \
+ {{{ PVEC_SUBR << PSEUDOVECTOR_AREA_BITS }, \
{ .a ## maxargs = fnname }, \
- minargs, maxargs, lname, intspec, 0}; \
+ minargs, maxargs, lname, intspec, 0}}; \
Lisp_Object fnname
/* defsubr (Sname);
is how we define the symbol for function `name' at start-up time. */
-extern void defsubr (struct Lisp_Subr *);
+extern void defsubr (union Aligned_Lisp_Subr *);
enum maxargs
{
diff --git a/src/lread.c b/src/lread.c
index 62616cb681..5f3871436d 100644
--- a/src/lread.c
+++ b/src/lread.c
@@ -4409,8 +4409,9 @@ init_obarray (void)
}
\f
void
-defsubr (struct Lisp_Subr *sname)
+defsubr (union Aligned_Lisp_Subr *aname)
{
+ struct Lisp_Subr *sname = &aname->s;
Lisp_Object sym, tem;
sym = intern_c_string (sname->symbol_name);
XSETPVECTYPE (sname, PVEC_SUBR);
diff --git a/src/thread.c b/src/thread.c
index 3674af0e47..6612697b95 100644
--- a/src/thread.c
+++ b/src/thread.c
@@ -27,11 +27,18 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */
#include "syssignal.h"
#include "keyboard.h"
-static struct thread_state main_thread;
+union aligned_thread_state
+{
+ struct thread_state s;
+ GCALIGNED_UNION_MEMBER
+};
+verify (GCALIGNED (union aligned_thread_state));
+
+static union aligned_thread_state main_thread;
-struct thread_state *current_thread = &main_thread;
+struct thread_state *current_thread = &main_thread.s;
-static struct thread_state *all_threads = &main_thread;
+static struct thread_state *all_threads = &main_thread.s;
static sys_mutex_t global_lock;
@@ -113,7 +120,7 @@ maybe_reacquire_global_lock (void)
/* SIGINT handler is always run on the main thread, see
deliver_process_signal, so reflect that in our thread-tracking
variables. */
- current_thread = &main_thread;
+ current_thread = &main_thread.s;
if (current_thread->not_holding_lock)
{
@@ -659,7 +666,7 @@ mark_threads (void)
void
unmark_main_thread (void)
{
- main_thread.header.size &= ~ARRAY_MARK_FLAG;
+ main_thread.s.header.size &= ~ARRAY_MARK_FLAG;
}
\f
@@ -1043,23 +1050,23 @@ thread_check_current_buffer (struct buffer *buffer)
static void
init_main_thread (void)
{
- main_thread.header.size
+ main_thread.s.header.size
= PSEUDOVECSIZE (struct thread_state, m_stack_bottom);
- XSETPVECTYPE (&main_thread, PVEC_THREAD);
- main_thread.m_last_thing_searched = Qnil;
- main_thread.m_saved_last_thing_searched = Qnil;
- main_thread.name = Qnil;
- main_thread.function = Qnil;
- main_thread.result = Qnil;
- main_thread.error_symbol = Qnil;
- main_thread.error_data = Qnil;
- main_thread.event_object = Qnil;
+ XSETPVECTYPE (&main_thread.s, PVEC_THREAD);
+ main_thread.s.m_last_thing_searched = Qnil;
+ main_thread.s.m_saved_last_thing_searched = Qnil;
+ main_thread.s.name = Qnil;
+ main_thread.s.function = Qnil;
+ main_thread.s.result = Qnil;
+ main_thread.s.error_symbol = Qnil;
+ main_thread.s.error_data = Qnil;
+ main_thread.s.event_object = Qnil;
}
bool
main_thread_p (void *ptr)
{
- return ptr == &main_thread;
+ return ptr == &main_thread.s;
}
bool
@@ -1080,11 +1087,11 @@ void
init_threads (void)
{
init_main_thread ();
- sys_cond_init (&main_thread.thread_condvar);
+ sys_cond_init (&main_thread.s.thread_condvar);
sys_mutex_init (&global_lock);
sys_mutex_lock (&global_lock);
- current_thread = &main_thread;
- main_thread.thread_id = sys_thread_self ();
+ current_thread = &main_thread.s;
+ main_thread.s.thread_id = sys_thread_self ();
}
void
@@ -1130,7 +1137,7 @@ syms_of_threads (void)
DEFVAR_LISP ("main-thread", Vmain_thread,
doc: /* The main thread of Emacs. */);
#ifdef THREADS_ENABLED
- XSETTHREAD (Vmain_thread, &main_thread);
+ XSETTHREAD (Vmain_thread, &main_thread.s);
#else
Vmain_thread = Qnil;
#endif
--git a/src/xmenu.c b/src/xmenu.c
index 10e882af43..31034f7112 100644
--- a/src/xmenu.c
+++ b/src/xmenu.c
@@ -2420,6 +2420,6 @@ syms_of_xmenu (void)
#if defined (USE_GTK) || defined (USE_X_TOOLKIT)
defsubr (&Sx_menu_bar_open_internal);
Ffset (intern_c_string ("accelerate-menu"),
- intern_c_string (Sx_menu_bar_open_internal.symbol_name));
+ intern_c_string (Sx_menu_bar_open_internal.s.symbol_name));
#endif
}
--
2.17.2
^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: recent master core dumps building on FreeBSD i386
2018-10-19 16:28 ` Paul Eggert
@ 2018-10-19 19:06 ` Joseph Mingrone
0 siblings, 0 replies; 16+ messages in thread
From: Joseph Mingrone @ 2018-10-19 19:06 UTC (permalink / raw)
To: Paul Eggert; +Cc: Eli Zaretskii, emacs-devel
[-- Attachment #1: Type: text/plain, Size: 1341 bytes --]
Paul Eggert <eggert@cs.ucla.edu> writes:
> On 10/18/18 6:15 PM, Joseph Mingrone wrote:
>> Is it still helpful for me to investigate what GCALIGNED_STRUCT expands to? If so, could elaborate on how I can get this?
> To get the expansion (but see below first), put the following into a file src/t.c:
> #include <config.h>
> #include <lisp.h>
> "GCALIGNED_STRUCT" GCALIGNED_STRUCT
> and then run 'cd src; cc -E -I. -I../lib t.c | tail -n1'. You probably need to adjust that command line to match the way you're building Emacs. My output with current master on Fedora x86-64 is:
> "GCALIGNED_STRUCT" __attribute__ ((aligned (8)))
> However, in thinking about this some more I do see a problem that could explain your symptoms, a problem that resulted from a merge from emacs-26 that collided with changes in the master without Git (or
> me) noticing the collision. I installed the attached patch into master to fix it. Please try this patch first, and we can worry about GCALIGNED_STRUCT only if this patch does not fix things for you.
Hi Paul,
That works.
http://pkg.awarnach.mathstat.dal.ca/data/11i386-default/2018-10-19_14h24m35s/logs/emacs-devel-27.0.50.20181018,2.log
The FreeBSD emacs-devel package is updated, so this can get wider testing.
https://svnweb.freebsd.org/ports?view=revision&revision=482447
Thank you.
--
Joseph
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 962 bytes --]
^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2018-10-19 19:06 UTC | newest]
Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-10-16 15:53 recent master core dumps building on FreeBSD i386 Joseph Mingrone
2018-10-17 1:27 ` Joseph Mingrone
2018-10-17 16:10 ` Eli Zaretskii
2018-10-18 1:09 ` Paul Eggert
2018-10-18 13:28 ` Eli Zaretskii
2018-10-18 15:40 ` Joseph Mingrone
2018-10-18 15:56 ` Eli Zaretskii
2018-10-18 16:18 ` Eli Zaretskii
2018-10-18 16:02 ` Eli Zaretskii
2018-10-18 17:53 ` Paul Eggert
2018-10-18 19:09 ` Joseph Mingrone
2018-10-18 19:16 ` Paul Eggert
2018-10-19 1:15 ` Joseph Mingrone
2018-10-19 16:28 ` Paul Eggert
2018-10-19 19:06 ` Joseph Mingrone
2018-10-18 19:04 ` Joseph Mingrone
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.