Adam Leventhal wrote:
 > On Mon, Sep 17, 2007 at 06:45:58PM +0800, xiong xiaoyi wrote:
 >> Hi  experts,
 >>
 >> I have a simple problem on mdb debugging, I use mdb to debug a core,
 >>
 >>> $C
 >> ffbfde18 libc.so.1`realfree+0x40(90c58, ef012eef, ff000000, a90fc, 0,
 >> ff362a00)
 >> ffbfde78 libc.so.1`cleanfree+0x58 (0, 4, ff01b6b8, ff012620, a885c, 1)
 >> ffbfded8 libc.so.1`_malloc_unlocked+0x104(8, ef012eec, 90c50, ef012eef,
 >> 1c00,
 >> ff19e5c0)
 >> ffbfdf38 libc.so.1`malloc+0x48(8, 1cc4, 1, ff012620, a9824, ff01ca2c)
 >> ffbfdf98 libc.so.1`calloc+0x58 (8, 8, 8, 10, 30, 30)
 >> ffbfdff8 libnsl.so.1`thr_get_storage+0x40(ff22e440, 8, 5ce70, 59c2c, 
0, 0)
 >>
 >> In above stack, it prints function's argument, but the number of the
 >> arguments is not same as the function definition.
 >> For example, in mdb, we get:
 >>
 >>        ffbfdf38 libc.so.1`malloc+0x48(8, 1cc4, 1, ff012620, a9824, 
ff01ca2c)
 >>
 >> But the molloc definition is :
 >>
 >>        malloc(size_t size)
 >>
 >> So from the mdb output above, how can I know what's the size in malloc?
 >> Thanks in advance.
 >
 > This question is probably more appropriate for mdb-discuss, but to 
answer:
 >
 > On SPARC we always give you the values of the 8 input registers in order
 > from 0 to 7. You should just pay attention to the first value in this 
case.

   Keep in mind that the registers listed in the stack trace are the %i
   registers stored at the point the next function was called (in this
   case, at malloc+0x48).  You will need to verify (with ::dis) that the
   register you're interested in hasn't been modified since the top of
   the function.  If it has, you'll either need to find where the
   argument was stashed, or reconstruct the argument using the caller's
   stack frame and the code around calloc+0x58.

   Dave

_______________________________________________
opensolaris-code mailing list
[email protected]
http://mail.opensolaris.org/mailman/listinfo/opensolaris-code

Reply via email to