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]