From owner-freebsd-current@FreeBSD.ORG Fri Aug 27 19:37:26 2010 Return-Path: Delivered-To: freebsd-current@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id F037610656A5 for ; Fri, 27 Aug 2010 19:37:25 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from mail.zoral.com.ua (mx0.zoral.com.ua [91.193.166.200]) by mx1.freebsd.org (Postfix) with ESMTP id 5BBAF8FC08 for ; Fri, 27 Aug 2010 19:37:24 +0000 (UTC) Received: from deviant.kiev.zoral.com.ua (root@deviant.kiev.zoral.com.ua [10.1.1.148]) by mail.zoral.com.ua (8.14.2/8.14.2) with ESMTP id o7RJbLVj074811 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Fri, 27 Aug 2010 22:37:21 +0300 (EEST) (envelope-from kostikbel@gmail.com) Received: from deviant.kiev.zoral.com.ua (kostik@localhost [127.0.0.1]) by deviant.kiev.zoral.com.ua (8.14.4/8.14.4) with ESMTP id o7RJbKJD036350; Fri, 27 Aug 2010 22:37:20 +0300 (EEST) (envelope-from kostikbel@gmail.com) Received: (from kostik@localhost) by deviant.kiev.zoral.com.ua (8.14.4/8.14.4/Submit) id o7RJbKXc036349; Fri, 27 Aug 2010 22:37:20 +0300 (EEST) (envelope-from kostikbel@gmail.com) X-Authentication-Warning: deviant.kiev.zoral.com.ua: kostik set sender to kostikbel@gmail.com using -f Date: Fri, 27 Aug 2010 22:37:20 +0300 From: Kostik Belousov To: Fabian Keil Message-ID: <20100827193720.GB2396@deviant.kiev.zoral.com.ua> References: <20100827182108.12764ff4@r500.local> <20100827190407.GA2396@deviant.kiev.zoral.com.ua> <20100827212534.5960efdf@r500.local> Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="ph+hsrg5jWGcqD/d" Content-Disposition: inline In-Reply-To: <20100827212534.5960efdf@r500.local> User-Agent: Mutt/1.4.2.3i X-Virus-Scanned: clamav-milter 0.95.2 at skuns.kiev.zoral.com.ua X-Virus-Status: Clean X-Spam-Status: No, score=-2.2 required=5.0 tests=ALL_TRUSTED,AWL,BAYES_50, DNS_FROM_OPENWHOIS autolearn=no version=3.2.5 X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on skuns.kiev.zoral.com.ua Cc: freebsd-current@freebsd.org Subject: Re: emacs aborting on exit with recent lib/libc/stdlib/atexit.c changes X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 27 Aug 2010 19:37:26 -0000 --ph+hsrg5jWGcqD/d Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Fri, Aug 27, 2010 at 09:25:34PM +0200, Fabian Keil wrote: > Kostik Belousov wrote: >=20 > > On Fri, Aug 27, 2010 at 06:21:08PM +0200, Fabian Keil wrote: > > > The recent lib/libc/stdlib/atexit.c changes broke emacs (23.2_2,2) for > > > me. It aborts on exit (C-x C-c) after receiving SIGBUS: > > >=20 > > > fk@r500 ~ $gdb emacs > > > GNU gdb 6.1.1 [FreeBSD] > > > Copyright 2004 Free Software Foundation, Inc. > > > GDB is free software, covered by the GNU General Public License, and > > > you are welcome to change it and/or distribute copies of it under > > > certain conditions. Type "show copying" to see the conditions. > > > There is absolutely no warranty for GDB. Type "show warranty" for > > > details. This GDB was configured as "amd64-marcel-freebsd"... > > > (gdb) run > > > Starting program: /usr/local/bin/emacs=20 > > > [New LWP 100281] > > > [New Thread 1260600 (LWP 100281)] > > >=20 > > > Program received signal SIGBUS, Bus error. > > > [Switching to Thread 1260600 (LWP 100281)] > > > 0x00000008045c432d in __elf_phdr_match_addr () from /lib/libc.so.7 > > > (gdb) where > > > #0 0x00000008045c432d in __elf_phdr_match_addr () from /lib/libc.so.7 > > > #1 0x0000000803038abb in __pthread_cxa_finalize () > > > from /lib/libthr.so.3 #2 0x00000008045bdfa7 in __cxa_finalize () > > > from /lib/libc.so.7 #3 0x00000008045682c7 in exit () > > > from /lib/libc.so.7 #4 0x0000000000556817 in Fkill_emacs (arg=3DCould > > > not find the frame base for "Fkill_emacs". ) at emacs.c:2146 > > > #5 0x0000000000600ec0 in Ffuncall (nargs=3D1, args=3D0x7fffffffc880)= at > > > eval.c:3024 #6 0x0000000000658d47 in Fbyte_code (bytestr=3D8602321, > > > vector=3D8602357, maxdepth=3D20) at bytecode.c:680 #7 0x000000000060= 17e6 > > > in funcall_lambda (fun=3D8602229, nargs=3D0, arg_vector=3D0x7fffffffc= dc8) at > > > eval.c:3211 #8 0x00000000006011e0 in Ffuncall (nargs=3D1, > > > args=3D0x7fffffffcdc0) at eval.c:3070 #9 0x0000000000658d47 in > > > Fbyte_code (bytestr=3D9558105, vector=3D9558141, maxdepth=3D20) at > > > bytecode.c:680 #10 0x00000000006017e6 in funcall_lambda (fun=3D955802= 9, > > > nargs=3D1, arg_vector=3D0x7fffffffd358) at eval.c:3211 #11 > > > 0x00000000006011e0 in Ffuncall (nargs=3D2, args=3D0x7fffffffd350) at > > > eval.c:3070 #12 0x00000000005fb954 in Fcall_interactively > > > (function=3D11961778, record_flag=3D11544578, keys=3D20138021) at > > > callint.c:869 #13 0x0000000000600f36 in Ffuncall (nargs=3D4, > > > args=3D0x7fffffffd760) at eval.c:3030 #14 0x00000000006008fd in call3 > > > (fn=3D11756290, arg1=3D11961778, arg2=3D11544578, arg3=3D20138021) at > > > eval.c:2850 #15 0x000000000056b7ac in Fcommand_execute (cmd=3D1196177= 8, > > > record_flag=3D11544578, keys=3D20138021, special=3D11544674) at > > > keyboard.c:10507 #16 0x000000000055cc69 in read_char (commandflag=3D1, > > > nmaps=3D2, maps=3D0x7fffffffdb70, prev_event=3D11544578, > > > used_mouse_menu=3D0x7fffffffded4, end_time=3D0x0) at keyboard.c:3166 = #17 > > > 0x000000000056880e in read_key_sequence (keybuf=3D0x7fffffffe280, > > > bufsize=3D30, prompt=3D11544578, dont_downcase_last=3D0, > > > can_return_switch_frame=3D1, fix_current_buffer=3D1) at keyboard.c:95= 12 > > > #18 0x0000000000558a33 in command_loop_1 () at keyboard.c:1643 #19 > > > 0x00000000005fe0aa in internal_condition_case (bfun=3D0x5586a0 > > > , handlers=3D11629954, hfun=3D0x557f90 ) at > > > eval.c:1490 #20 0x000000000055836a in command_loop_2 () at > > > keyboard.c:1360 #21 0x00000000005fda2c in internal_catch > > > (tag=3D11621170, func=3D0x558350 , arg=3D11544578) at > > > eval.c:1226 #22 0x0000000000558320 in command_loop () at > > > keyboard.c:1339 #23 0x0000000000557a85 in recursive_edit_1 () at > > > keyboard.c:954 #24 0x0000000000557c45 in Frecursive_edit () at > > > keyboard.c:1016 #25 0x00000000005560b8 in main (argc=3D1, > > > argv=3D0x7fffffffe840) at emacs.c:1833 > > >=20 > > > Reverting to lib/libc/stdlib/atexit.c 1.9 gets it working again, > > > using 1.11 brings back the crashes. I didn't csup between those > > > versions and thus don't have 1.10 in git, but given that it's a > > > style change it shouldn't matter. > > >=20 > > > I'm using amd64 and so far I only noticed the problem with emacs. > > >=20 > > > Is anyone else seeing this? > > Reverting the atexit change might cover the issue in some other place. > > Please build and install rtld, libc and libthr with symbolic > > debug information. On of the way to do this is to: > > cd /usr/src/libexec/rtld-elf > > make obj && make depend && make all install DEBUG_FLAGS=3D-g > > cd ../../lib/libc > > make obj && make depend && make all install DEBUG_FLAGS=3D-g > > cd ../../lib/libthr > > make obj && make depend && make all install DEBUG_FLAGS=3D-g > >=20 > > Then, reproduce the crash and get "bt full" output from the > > core. I may need some further information after that. >=20 > #0 0x00000008045dd44c in kill () at kill.S:3 > 3 RSYSCALL(kill) > [New Thread 1260600 (LWP 100244)] > (gdb) bt full > #0 0x00000008045dd44c in kill () at kill.S:3 > No locals. > #1 0x00000000005545c0 in fatal_error_signal (sig=3D10) at emacs.c:402 > No locals. > #2 > No symbol table info available. > #3 __elf_phdr_match_addr (phdr_info=3D0x7fffffffcf90, addr=3D0x69ba20) a= t /usr/src/lib/libc/gen/elf_utils.c:39 > i =3D 109 > #4 0x0000000803038fdb in __pthread_cxa_finalize (phdr_info=3D0x7fffffffc= f90) at /usr/src/lib/libthr/thread/thr_fork.c:109 > af =3D (struct pthread_atfork *) 0xe1e7c0 > af1 =3D (struct pthread_atfork *) 0x0 > #5 0x00000008045be0a7 in __cxa_finalize (dso=3D0x0) at /usr/src/lib/libc= /stdlib/atexit.c:204 > phdr_info =3D {dlpi_addr =3D 0, dlpi_name =3D 0x7fffffffd080 "`??= ??\177", dlpi_phdr =3D 0x7fffffffe848, dlpi_phnum =3D 59448, dlpi_adds =3D = 0, dlpi_subs =3D 34367899629,=20 > dlpi_tls_modid =3D 15046784, dlpi_tls_data =3D 0x12c2538} > p =3D (struct atexit *) 0x0 > fn =3D {fn_type =3D 1, fn_ptr =3D {std_func =3D 0x8007ccff0 , cxa_func =3D 0x8007ccff0 }, fn_arg =3D 0x0, fn_dso =3D 0= x0} > n =3D -1 > has_phdr =3D 0 > #6 0x00000008045683c7 in exit (status=3D0) at /usr/src/lib/libc/stdlib/e= xit.c:67 > No locals. > #7 0x0000000000556817 in Fkill_emacs (arg=3DCould not find the frame bas= e for "Fkill_emacs". > ) at emacs.c:2146 > gcpro1 =3D Could not find the frame base for "Fkill_emacs". > Current language: auto; currently asm >=20 > Fabian Ewww. Please try this. diff --git a/lib/libc/stdlib/atexit.c b/lib/libc/stdlib/atexit.c index 97cf234..511172a 100644 --- a/lib/libc/stdlib/atexit.c +++ b/lib/libc/stdlib/atexit.c @@ -200,6 +200,6 @@ __cxa_finalize(void *dso) if (dso =3D=3D NULL) _MUTEX_DESTROY(&atexit_mutex); =20 - if (&__pthread_cxa_finalize !=3D NULL) + if (has_phdr && &__pthread_cxa_finalize !=3D NULL) __pthread_cxa_finalize(&phdr_info); } --ph+hsrg5jWGcqD/d Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.10 (FreeBSD) iEYEARECAAYFAkx4E/AACgkQC3+MBN1Mb4hRkwCgiKCncmQ+62WXLYrJy32VtoWd ZpgAoK2x3pi9/bsNXn2vaj0FioqN9Rsu =ML/C -----END PGP SIGNATURE----- --ph+hsrg5jWGcqD/d--