all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* 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 +++++++++++++++++++++++++++--------------------
 src/xmenu.c  |  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
diff --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.