Menu

#83 SIGBUS BUS_ADRALN on HP-UX 11.31 IA64

open
None
5
2015-02-19
2011-12-17
No

TkTreeCtrl 2.4.1 *sometimes* crashes with a SIGBUS in TreeItem_CreateHeader() at generic/tkTreeItem.c:10130. Environment is a HP-UX 11i v3 (11.31) ia64. It was compiled against Tcl/Tk 8.5.11 with HP C/aC++ B3910B A.06.25 [Nov 30 2009].

GDB ouput:
Program terminated with signal 10, Bus error.
BUS_ADRALN - Invalid address alignment. Please refer to the following link that helps in handling unaligned data: http://docs.hp.com/en/7730/newhelp0610/pragmas.htm#pragma-pack-ex3
#0 0x40000000001ee5a0:1 in TreeItem_CreateHeader (tree=0x6000000000e01300)
at /.../tktreectrl/generic/tkTreeItem.c:10130
(gdb) bt 3
#0 0x40000000001ee5a0:1 in TreeItem_CreateHeader (tree=0x6000000000e01300)
at /.../tktreectrl/generic/tkTreeItem.c:10130
#1 0x40000000001c0610:0 in TreeHeader_InitWidget (tree=0x6000000000e01300)
at /.../tktreectrl/generic/tkTreeHeader.c:3283
#2 0x4000000000152ce0:0 in TreeObjCmd (clientData=0x0,
interp=0x600000000005ddf0, objc=2, objv=0x6000000000073230)
at /.../tktreectrl/generic/tkTreeCtrl.c:489
(More stack frames follow...)
(gdb) print item
$1 = 0x6000000000e025ec
(gdb) print *item
$2 = {id = 0, depth = 0, fixedHeight = 0, numChildren = 0, index = 0,
indexVis = -1, state = 0, parent = 0x0, firstChild = 0x0, lastChild = 0x0,
prevSibling = 0x0, nextSibling = 0x0, dInfo = 0x0, rInfo = 0x0,
columns = 0x0, spans = 0x0, spanAlloc = 0, flags = 34, tagInfo = 0x0,
header = 0x0}
(gdb) print header
$3 = 0x6000000000e046f0
(gdb) print *header
$4 = {tree = 0x6000000000e01300, item = 0x6000000000e025ec, columnDrag = {
enable = 1, draw = 1}}
(gdb) print &item->header
$6 = (struct TreeHeader_ **) 0x6000000000e02664
(gdb) disas $pc-16*8 $pc+15*4
Dump of assembler code from 0x40000000001ee520:0 to 0x40000000001ee5d0:0:
;;; File: /.../tktreectrl/generic/tkTreeItem.c
;;; Line: 10122
0x40000000001ee520:0 <TreeItem_CreateHeader>:
alloc r38=ar.pfs,0,8,4,0 MMI
0x40000000001ee520:1 <TreeItem_CreateHeader+0x1>:
nop.m 0x0
0x40000000001ee520:2 <TreeItem_CreateHeader+0x2>:
mov r39=rp
0x40000000001ee530:0 <TreeItem_CreateHeader+0x10>:
mov r37=gp MMI,
0x40000000001ee530:1 <TreeItem_CreateHeader+0x11>:
mov r33=r32
;;; Line: 10126
0x40000000001ee530:2 <TreeItem_CreateHeader+0x12>:
mov r41=1;;
0x40000000001ee540:0 <TreeItem_CreateHeader+0x20>:
mov r40=r33 MMB,
0x40000000001ee540:1 <TreeItem_CreateHeader+0x21>:
nop.m 0x0
0x40000000001ee540:2 <TreeItem_CreateHeader+0x22>:
br.call.dptk.many rp=Item_Alloc+0x0;;
0x40000000001ee550:0 <TreeItem_CreateHeader+0x30>:
mov r34=ret0 MI,I
;;; Line: 10127
0x40000000001ee550:1 <TreeItem_CreateHeader+0x31>:
mov r40=r33;;
0x40000000001ee550:2 <TreeItem_CreateHeader+0x32>:
mov r41=r34
0x40000000001ee560:0 <TreeItem_CreateHeader+0x40>:
nop.m 0x0 MMB,
0x40000000001ee560:1 <TreeItem_CreateHeader+0x41>:
nop.m 0x0
0x40000000001ee560:2 <TreeItem_CreateHeader+0x42>:
br.call.dptk.many rp=TreeHeader_CreateWithItem+0x0;;
0x40000000001ee570:0 <TreeItem_CreateHeader+0x50>:
mov gp=r37 MI,I
0x40000000001ee570:1 <TreeItem_CreateHeader+0x51>:
mov r36=ret0;;
;;; Line: 10128
0x40000000001ee570:2 <TreeItem_CreateHeader+0x52>:
cmp.ne p6=r0,r36
0x40000000001ee580:0 <TreeItem_CreateHeader+0x60>:
nop.m 0x0 MMB,
0x40000000001ee580:1 <TreeItem_CreateHeader+0x61>:
nop.m 0x0
0x40000000001ee580:2 <TreeItem_CreateHeader+0x62>:
(p6) br.cond.dptk.many TreeItem_CreateHeader+0x80;;
0x40000000001ee590:0 <TreeItem_CreateHeader+0x70>:
nop.m 0x0 MMB,
0x40000000001ee590:1 <TreeItem_CreateHeader+0x71>:
nop.m 0x0
0x40000000001ee590:2 <TreeItem_CreateHeader+0x72>:
br.cond.dptk.many TreeItem_CreateHeader+0x80;;
;;; Line: 10130
0x40000000001ee5a0:0 <TreeItem_CreateHeader+0x80>:
adds ret1=120,r34;; M,MI
0x40000000001ee5a0:1 <TreeItem_CreateHeader+0x81>:
st8 [ret1]=r36
;;; Line: 10133
0x40000000001ee5a0:2 <TreeItem_CreateHeader+0x82>:
adds ret1=0x3e0,r33
0x40000000001ee5b0:0 <TreeItem_CreateHeader+0x90>:
mov r43=0 MMI,
0x40000000001ee5b0:1 <TreeItem_CreateHeader+0x91>:
mov r40=r33
0x40000000001ee5b0:2 <TreeItem_CreateHeader+0x92>:
mov r41=r34;;
0x40000000001ee5c0:0 <TreeItem_CreateHeader+0xa0>:
ld4 r42=[ret1] MMB,
0x40000000001ee5c0:1 <TreeItem_CreateHeader+0xa1>:
nop.m 0x0
0x40000000001ee5c0:2 <TreeItem_CreateHeader+0xa2>:
br.call.dptk.many rp=Item_CreateColumn+0x0;;
End of assembler dump.

I am just guessing, but the pointer of item + the offset of item->header / 8 is not at 8 byte boundary (is this correct?):

% expr {(0x6000000000e025ec + 120) / 8.0}
8.646911284569715e+17

-- Matthias

Discussion

  • Tim Baker

    Tim Baker - 2011-12-18
    • assigned_to: nobody --> treectrl
     
  • Tim Baker

    Tim Baker - 2011-12-18

    It seems the allocator implemented by treectrl isn't going to work on that platform.
    It may just require that the TreeItem be 16-byte-aligned rather than 8 as it is now,
    but I'm not sure.

    Can you comment out line 72 in tkTreeCtrl.h and see if that fixes the problem?
    /* #define ALLOC_HAX */

     
  • Tim Baker

    Tim Baker - 2012-06-14

    I guessed this was the result of new structs introduced with the header code exposing a bug in the memory allocator. I revised the memory allocator based on the newer Tcl allocator in TclAlloc.c. Hopefully this fixes the issue.

     
  • Matthias Kraft

    Matthias Kraft - 2013-02-19

    Is the fix in an already released version?

    I am asking, because I am using 2.4.1 right now and just got a core dump from a SIGBUS sent in which happened on a Solaris 11.1 system. I haven't had the chance to look deeper into it, but the first few lines of the stack trace suggest it is crashing at the same location.

     
  • Tim Baker

    Tim Baker - 2013-02-19

    Could you try this release candidate for 2.4.2? I contains a possible fix for this issue.

    https://dl.dropbox.com/u/13095836/tktreectrl-2.4.2.tar.gz

     

Log in to post a comment.