Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 1 Dec 2009 16:31:50 -0600 (CST)
From:      "Sean C. Farley" <scf@FreeBSD.org>
To:        Kostik Belousov <kostikbel@gmail.com>
Cc:        freebsd-current@FreeBSD.org
Subject:   Re: core dump in cvsup caused by _once()?
Message-ID:  <alpine.BSF.2.00.0912011604140.19118@thor.farley.org>
In-Reply-To: <20091201204154.GC2368@deviant.kiev.zoral.com.ua>
References:  <20091128111501.34a7a2a4@ernst.jennejohn.org> <200912011009.59961.jhb@freebsd.org> <alpine.BSF.2.00.0912011253540.14916@thor.farley.org> <20091201204154.GC2368@deviant.kiev.zoral.com.ua>

next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, 1 Dec 2009, Kostik Belousov wrote:

> On Tue, Dec 01, 2009 at 12:59:25PM -0600, Sean C. Farley wrote:
>> On Tue, 1 Dec 2009, John Baldwin wrote:
>>> On Saturday 28 November 2009 5:15:01 am Gary Jennejohn wrote:
>>>> Since I installed a new world and kernel on November 26 I'm seeing 
>>>> core dumps with cvsup, even though I reinstalled cvsup yesterday.

I just want to note that Gary and my problems may not necessarily be related.
They just happened in the same program package (cvsup).  His is with cvsup and
mine is with cvsupd.  However, both look related since they are getting SIGILL
and are calling time functions in libc.

>> BTW, I noticed the m3 call ThreadPosix__DetermineContext(), yet 
>> cvsupd is not linked against a thread library.  The amd64 binary is 
>> linked to libz, libm and libc.  The i386 binary links against those 
>> as well as libutil and libmd.
>
> Could you, please, also recompile rtld with debugging symbols ?
>
> SIGILL might be generated by kernel when signal frame cannot be copied 
> out to usermode stack. Check out the registers content and size of 
> stack too.

In what detail and how to print with gdb, do you need the registers and stack
size?  Here are the registers for frame #1.
(gdb) info registers
rax            0x4      4
rbx            0x8005ef230      34365960752
rcx            0x71bfc8 7454664
rdx            0x71bb40 7453504
rsi            0x2      2
rdi            0xb      11
rbp            0x4a9    0x4a9
rsp            0x71c038 0x71c038
r8             0x8005ef230      34365960752
r9             0x1      1
r10            0x0      0
r11            0x985    2437
r12            0x8005ed600      34365953536
r13            0x0      0
r14            0x800941c08      34369444872
r15            0x80094b88d      34369484941
rip            0x8005c167b      0x8005c167b <find_symdef+315>
eflags         0x10216  66070
cs             0x43     67
ss             0x3b     59
ds             0x0      0
es             0x0      0
fs             0x0      0
gs             0x0      0

New stack trace with more debugging:
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"...
Core was generated by `cvsupd'.
Program terminated with signal 4, Illegal instruction.
Reading symbols from /lib/libz.so.5...done.
Loaded symbols for /lib/libz.so.5
Reading symbols from /lib/libm.so.5...done.
Loaded symbols for /lib/libm.so.5
Reading symbols from /usr/FreeBSD/branches/stable/8/src/lib/libc/libc.so.7...done.
Loaded symbols for /usr/FreeBSD/branches/stable/8/src/lib/libc/libc.so.7
Reading symbols from /libexec/ld-elf.so.1...done.
Loaded symbols for /libexec/ld-elf.so.1
#0  symlook_default (name=0xb <Address 0xb out of bounds>, hash=2, refobj=0x71bb40, defobj_out=0x71bfc8, ventry=0x8005ef230, flags=1) at rtld.c:2611
2611	{
(gdb) where
#0  symlook_default (name=0xb <Address 0xb out of bounds>, hash=2, refobj=0x71bb40, defobj_out=0x71bfc8, ventry=0x8005ef230, flags=1) at rtld.c:2611
#1  0x00000008005c167b in find_symdef (symnum=1193, refobj=0x8005ed600, defobj_out=0x71c0a0, flags=1, cache=0x0) at rtld.c:1206
#2  0x00000008005c1753 in _rtld_bind (obj=0x8005ed600, reloff=Variable "reloff" is not available.
) at rtld.c:578
#3  0x00000008005be8cd in _rtld_bind_start () at /usr/FreeBSD/branches/stable/8/src/libexec/rtld-elf/amd64/rtld_start.S:99
#4  0x0000000000000985 in ?? ()
#5  0x0000000000000000 in ?? ()
#6  0x0000000000000006 in ?? ()
#7  0x0000000000000043 in ?? ()
#8  0x000000000072aba8 in ?? ()
#9  0x0000000800a368e1 in _nsyycheck () from /usr/FreeBSD/branches/stable/8/src/lib/libc/libc.so.7
#10 0x000000000072abbb in ?? ()
#11 0x0000000000008000 in ?? ()
#12 0x000000000072abbe in ?? ()
#13 0x0000000000000216 in ?? ()
#14 0x0000000000000000 in ?? ()
#15 0x00000008005ed600 in ?? ()
#16 0x0000000000000161 in ?? ()
#17 0x0000000800a09049 in tzload (name=0x800a368e1 "posixrules", sp=0x7353b8, doextend=0) at /usr/FreeBSD/branches/stable/8/src/lib/libc/stdtime/localtime.c:422
#18 0x0000000800a08a1e in tzparse (name=0x72b1cd "CDT,M3.2.0,M11.1.0", sp=0x7353b8, lastditch=Variable "lastditch" is not available.
) at /usr/FreeBSD/branches/stable/8/src/lib/libc/stdtime/localtime.c:1003
#19 0x0000000800a096f6 in tzload (name=Variable "name" is not available.
) at /usr/FreeBSD/branches/stable/8/src/lib/libc/stdtime/localtime.c:580
#20 0x0000000800a09a86 in tzsetwall_basic (rdlocked=1) at /usr/FreeBSD/branches/stable/8/src/lib/libc/stdtime/localtime.c:1229
#21 0x0000000800a09deb in mktime (tmp=0x739ff8) at /usr/FreeBSD/branches/stable/8/src/lib/libc/stdtime/localtime.c:2119
#22 0x00000000004ae085 in Date__ToTime (M3_D5xROs_d=0x5eed80) at DateBsd.m3:77
#23 0x00000000004709dc in TimeStamp__Init () at TimeStamp.m3:46
#24 0x0000000000470aa2 in TimeStamp__New (M3_CD9pHn__result=0x73a1c8) at TimeStamp.m3:60
#25 0x000000000046fc1e in Random__RandomSeed () at Random.m3:67
#26 0x000000000046fab2 in Random__Init (M3_B04YLH_t=0x756d88, M3_AicXUJ_fixed=0 '\0') at Random.m3:42
#27 0x000000000044b9d5 in SortedRCSDeltaTbl__Init (M3_EKdMGR_tbl=0x756d48) at SortedTable.mg:106
#28 0x0000000000450d99 in RCSFile__Init (M3_BcmbT8_rf=0x756be0, M3_Bjvku1_desc=0x756c90) at RCSFile.m3:483
#29 0x00000000004510c2 in RCSFile__OpenReadonly (M3_Bd56fi_p=0x756a88) at RCSFile.m3:574
#30 0x000000000046305f in Attic__RCSFileOpenReadonly (M3_DMtSqf_path=0x73b3f8) at Attic.m3:120
#31 0x00000000004166bc in RCSComp__CheckoutSend (M3_BQOzaz_self=0x65a610, M3_CzVV2w_sfr=0x65e300, M3_Bd56fi_name=0x7569c8, M3_Bd56fi_tag=0x651a00, M3_Bd56fi_date=0x651a00,
     M3_AicXUJ_deleteIfDead=0 '\0', M3_AicXUJ_isFixup=0 '\0') at RCSComp.m3:1715
#32 0x000000000040d08a in RCSComp__CompCollection (M3_BQOzaz_self=0x65a610, M3_CzVV2w_sfr=0x65e300) at RCSComp.m3:238
#33 0x000000000040c4d8 in RCSComp__CompBatch (M3_BQOzaz_self=0x65a610) at RCSComp.m3:155
#34 0x000000000040bc90 in RCSComp__Apply (M3_BQOzaz_self=0x65a610) at RCSComp.m3:78
#35 0x00000000004a7240 in ThreadPosix__DetermineContext (M3_AJWxb1_oldSP=0x35) at ThreadPosix.m3:1127
#36 0x0000000000689058 in ?? ()
#37 0x00007fffffffe0a0 in ?? ()
#38 0x000000000049c68c in RTMisc__Align (M3_AJWxb1_a=Cannot access memory at address 0x64c
) at RTMisc.m3:31
Previous frame inner to this frame (corrupt stack?)
(gdb) frame 0
#0  symlook_default (name=0xb <Address 0xb out of bounds>, hash=2, refobj=0x71bb40, defobj_out=0x71bfc8, ventry=0x8005ef230, flags=1) at rtld.c:2611
2611	{
(gdb) l
2606	 * defining object via the reference parameter DEFOBJ_OUT.
2607	 */
2608	static const Elf_Sym *
2609	symlook_default(const char *name, unsigned long hash, const Obj_Entry *refobj,
2610	    const Obj_Entry **defobj_out, const Ver_Entry *ventry, int flags)
2611	{
2612	    DoneList donelist;
2613	    const Elf_Sym *def;
2614	    const Elf_Sym *symp;
2615	    const Obj_Entry *obj;
(gdb) x/i $rip
0x8005c0e30 <symlook_default+32>:	mov    %rdi,0xffffffffffffffa0(%rbp)
(gdb) quit

Here is information from frame #1.
(gdb) frame 1
#1  0x00000008005c167b in find_symdef (symnum=1193, refobj=0x8005ed600, defobj_out=0x71c0a0, flags=1, cache=0x0) at rtld.c:1206
1206            def = symlook_default(name, hash, refobj, &defobj, ventry, flags);
(gdb) info frame
Stack level 1, frame at 0x71c098:
  rip = 0x8005c167b in find_symdef (rtld.c:1206); saved rip 0x8005c1753
  called by frame at 0x71c0d8, caller of frame at 0x71c038
  source language c.
  Arglist at 0x71c030, args: symnum=1193, refobj=0x8005ed600, defobj_out=0x71c0a0, flags=1, cache=0x0
  Locals at 0x71c030, Previous frame's sp is 0x71c098
  Saved registers:
   rbx at 0x71c060, rbp at 0x71c068, r12 at 0x71c070, r13 at 0x71c078, r14 at 0x71c080, r15 at 0x71c088, rip at 0x71c090

I find this interesting.  The call to strcat() on the preceding line worked.
(gdb) p name
$2 = 0x80094b88d "strcat"

Sean
-- 
scf@FreeBSD.org



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?alpine.BSF.2.00.0912011604140.19118>