Not sure about the offset since I have not yet seen your testcase. However, 
based on what  you have described, I created a testcase and it seems both 
DTrace and dbx print the correct address of the function pointer without any 
offset!

%cat ufunc.d
#!/usr/sbin/dtrace -s
pid$target:$1::entry
{
    @func[probefunc, arg0, arg1] = count();
}

% cat b.c
#include <stdio.h>
int funcp(int i) {
   i = 512;
   return i;
}
int funca(int i, int (*funcp)(int)) {
   int j, k;
   j = i;
   j++;
   k = funcp(i);
   return 0;
}

main() {
  float f = 5.0f;
  int i = 99;
  funca(i, funcp);
  i = 4;
}


%dtrace -s ufunc.d -c ./b.out b.out
dtrace: script 'ufunc.d' matched 4 probes
dtrace: pid 4512 has exited

  __fsr                                                -2748792236224           
     0                1
  funca                                                            99          
4197408                1
  funcp                                                            99          
4197408                1


% dbx b.out
For information about new features see `help changes'
To remove this message, put `dbxenv suppress_startup_message 7.6' in your .dbxrc
Reading b.out
Reading ld.so.1
Reading libc.so.1
(dbx) stop in funca
(2) stop in funca
(dbx) run
Running: b.out
(process id 4518)
stopped in funca at line 8 in file "b.c"
    8      j = i;

(dbx) p -flx 4197408
0x400c20

(dbx) p funcp
funcp = 0x400c20 = &funcp(int i)

(dbx) p funca
funca = &funca(int i, int (*funcp)(int)) at 0x400c50

(dbx) where
=>[1] funca(i = 99, funcp = 0x400c20 = &funcp(int i)), line 8 in "b.c"
  [2] main(), line 17 in "b.c"

(dbx) dis funca
0x0000000000400c50: funca       :       pushq    %rbp
0x0000000000400c51: funca+0x0001:       movq     %rsp,%rbp
0x0000000000400c54: funca+0x0004:       subq     $0x0000000000000020,%rsp
0x0000000000400c58: funca+0x0008:       movl     %edi,0xfffffffffffffffc(%rbp)
0x0000000000400c5b: funca+0x000b:       movq     %rsi,0xfffffffffffffff0(%rbp)
0x0000000000400c5f: funca+0x000f:       movl     0xfffffffffffffffc(%rbp),%eax
0x0000000000400c62: funca+0x0012:       movl     %eax,0xffffffffffffffe8(%rbp)
0x0000000000400c65: funca+0x0015:       movl     0xffffffffffffffe8(%rbp),%eax
0x0000000000400c68: funca+0x0018:       addl     $0x0000000000000001,%eax
0x0000000000400c6b: funca+0x001b:       movl     %eax,0xffffffffffffffe8(%rbp)

(dbx) p -flx $rsi
$rsi = 0x400c20

(dbx) dis 0x400c20
0x0000000000400c20: funcp       :       pushq    %rbp
0x0000000000400c21: funcp+0x0001:       movq     %rsp,%rbp
0x0000000000400c24: funcp+0x0004:       subq     $0x0000000000000020,%rsp
0x0000000000400c28: funcp+0x0008:       movl     %edi,0xfffffffffffffffc(%rbp)
0x0000000000400c2b: funcp+0x000b:       movl     
$0x0000000000000200,0xfffffffffffffffc(%rbp)
0x0000000000400c32: funcp+0x0012:       movl     0xfffffffffffffffc(%rbp),%eax
0x0000000000400c35: funcp+0x0015:       movl     %eax,0xffffffffffffffec(%rbp)
0x0000000000400c38: funcp+0x0018:       jmp      funcp+0x20     [ 0x400c40, .+8 
]
0x0000000000400c3a: funcp+0x001a:       nop
0x0000000000400c3c: funcp+0x001c:       jmp      funcp+0x20     [ 0x400c40, .+4 
]
(dbx)


--
This message posted from opensolaris.org
_______________________________________________
dtrace-discuss mailing list
[email protected]

Reply via email to