Hello, everyone. It is another question, now I used kview to test, by rebuilding it in the kdegraphics-3.5.4 with -finstrument-functions option. But I found that in libkdeinit_kview.so, one function can have multiply profiling entry, for example, kdemain function (located in kdegraphics-3.5.4/kview/main.cpp) has three _cyg_profile_func_{enter,exit} pairs. the return address after these entries are located at: kdegraphics-3.5.4/kview/main.cpp:39 /usr/lib/qt-3.3/include/qapplication.h:501 kdegraphics-3.5.4/kview/main.cpp:45 I don't know why this happens, and can anyone help me ? objdump content is below: 00016da0 <kdemain>: 16da0: 55 push %ebp 16da1: 89 e5 mov %esp,%ebp 16da3: 57 push %edi 16da4: bf 01 00 00 00 mov $0x1,%edi 16da9: 56 push %esi 16daa: 53 push %ebx 16dab: e8 67 33 ff ff call a117 <__i686.get_pc_thunk.bx> 16db0: 81 c3 80 35 00 00 add $0x3580,%ebx 16db6: 81 ec 9c 01 00 00 sub $0x19c,%esp 16dbc: 8b 45 04 mov 0x4(%ebp),%eax 16dbf: 89 44 24 04 mov %eax,0x4(%esp) 16dc3: 8b 83 9c ff ff ff mov 0xffffff9c(%ebx),%eax 16dc9: 89 04 24 mov %eax,(%esp) 16dcc: e8 43 28 ff ff call 9614 <__cyg_profile_func_enter <at> plt> 16dd1: 8d 83 f9 db ff ff lea 0xffffdbf9(%ebx),%eax 16dd7: 89 44 24 24 mov %eax,0x24(%esp) 16ddb: 8d 83 bc dc ff ff lea 0xffffdcbc(%ebx),%eax 16de1: 89 44 24 18 mov %eax,0x18(%esp) 16de5: 8d 83 e0 dc ff ff lea 0xffffdce0(%ebx),%eax 16deb: 89 44 24 10 mov %eax,0x10(%esp) 16def: 8d 83 0d dc ff ff lea 0xffffdc0d(%ebx),%eax 16df5: 89 44 24 0c mov %eax,0xc(%esp) 16df9: 8d 83 d0 ce ff ff lea 0xffffced0(%ebx),%eax 16dff: 8d 95 6c ff ff ff lea 0xffffff6c(%ebp),%edx 16e05: 89 44 24 08 mov %eax,0x8(%esp) 16e09: 8d 83 28 dc ff ff lea 0xffffdc28(%ebx),%eax 16e0f: 89 95 84 fe ff ff mov %edx,0xfffffe84(%ebp) 16e15: 89 14 24 mov %edx,(%esp) 16e18: 89 44 24 04 mov %eax,0x4(%esp) 16e1c: c7 44 24 20 00 00 00 movl $0x0,0x20(%esp) 16e23: 00 16e24: c7 44 24 1c 00 00 00 movl $0x0,0x1c(%esp) 16e2b: 00 16e2c: c7 44 24 14 01 00 00 movl $0x1,0x14(%esp) 16e33: 00 16e34: e8 ab 28 ff ff call 96e4 <_ZN10KAboutDataC1EPKcS1_S1_S1_iS1_S1_S1_S1_ <at> plt> 16e39: 8d 83 2e dc ff ff lea 0xffffdc2e(%ebx),%eax 16e3f: 89 44 24 0c mov %eax,0xc(%esp) 16e43: 8d 83 3c dc ff ff lea 0xffffdc3c(%ebx),%eax 16e49: 89 44 24 08 mov %eax,0x8(%esp) 16e4d: 8d 83 47 dc ff ff lea 0xffffdc47(%ebx),%eax 16e53: 89 44 24 04 mov %eax,0x4(%esp) 16e57: 8b 85 84 fe ff ff mov 0xfffffe84(%ebp),%eax 16e5d: c7 44 24 10 00 00 00 movl $0x0,0x10(%esp) 16e64: 00 16e65: 89 04 24 mov %eax,(%esp) 16e68: e8 17 23 ff ff call 9184 <_ZN10KAboutData9addAuthorEPKcS1_S1_S1_ <at> plt> 16e6d: 8b 95 84 fe ff ff mov 0xfffffe84(%ebp),%edx 16e73: 8d 83 56 dc ff ff lea 0xffffdc56(%ebx),%eax 16e79: 89 44 24 0c mov %eax,0xc(%esp) 16e7d: 8d 83 62 dc ff ff lea 0xffffdc62(%ebx),%eax 16e83: 89 44 24 08 mov %eax,0x8(%esp) 16e87: 8d 83 71 dc ff ff lea 0xffffdc71(%ebx),%eax 16e8d: 89 44 24 04 mov %eax,0x4(%esp) 16e91: 89 14 24 mov %edx,(%esp) 16e94: c7 44 24 10 00 00 00 movl $0x0,0x10(%esp) 16e9b: 00 16e9c: e8 e3 22 ff ff call 9184 <_ZN10KAboutData9addAuthorEPKcS1_S1_S1_ <at> plt> 16ea1: 8d 83 83 dc ff ff lea 0xffffdc83(%ebx),%eax 16ea7: 89 44 24 0c mov %eax,0xc(%esp) 16eab: 8d 83 94 dc ff ff lea 0xffffdc94(%ebx),%eax 16eb1: 89 44 24 04 mov %eax,0x4(%esp) 16eb5: 8b 85 84 fe ff ff mov 0xfffffe84(%ebp),%eax 16ebb: c7 44 24 10 00 00 00 movl $0x0,0x10(%esp) 16ec2: 00 16ec3: c7 44 24 08 00 00 00 movl $0x0,0x8(%esp) 16eca: 00 16ecb: 89 04 24 mov %eax,(%esp) 16ece: e8 b1 22 ff ff call 9184 <_ZN10KAboutData9addAuthorEPKcS1_S1_S1_ <at> plt> 16ed3: 8b 45 0c mov 0xc(%ebp),%eax 16ed6: 8b 95 84 fe ff ff mov 0xfffffe84(%ebp),%edx 16edc: c7 44 24 0c 00 00 00 movl $0x0,0xc(%esp) 16ee3: 00 16ee4: 89 44 24 04 mov %eax,0x4(%esp) 16ee8: 8b 45 08 mov 0x8(%ebp),%eax 16eeb: 89 54 24 08 mov %edx,0x8(%esp) 16eef: 89 04 24 mov %eax,(%esp) 16ef2: e8 fd 26 ff ff call 95f4 <_ZN12KCmdLineArgs4initEiPPcPK10KAboutDatab <at> plt> 16ef7: 8d 83 b4 03 00 00 lea 0x3b4(%ebx),%eax 16efd: 89 04 24 mov %eax,(%esp) 16f00: c7 44 24 0c 00 00 00 movl $0x0,0xc(%esp) 16f07: 00 16f08: c7 44 24 08 00 00 00 movl $0x0,0x8(%esp) 16f0f: 00 16f10: c7 44 24 04 00 00 00 movl $0x0,0x4(%esp) 16f17: 00 16f18: e8 c7 2c ff ff call 9be4 <_ZN12KCmdLineArgs17addCmdLineOptionsEPK15KCmdLineOptionsPKcS4_S4_ <at> plt> 16f1d: 8d 85 a0 fe ff ff lea 0xfffffea0(%ebp),%eax 16f23: 89 85 80 fe ff ff mov %eax,0xfffffe80(%ebp) 16f29: 89 04 24 mov %eax,(%esp) 16f2c: c7 44 24 08 01 00 00 movl $0x1,0x8(%esp) 16f33: 00 16f34: c7 44 24 04 01 00 00 movl $0x1,0x4(%esp) 16f3b: 00 16f3c: e8 23 24 ff ff call 9364 <_ZN12KApplicationC1Ebb <at> plt> 16f41: 8b 93 9c ff ff ff mov 0xffffff9c(%ebx),%edx 16f47: 8b 45 04 mov 0x4(%ebp),%eax 16f4a: 89 14 24 mov %edx,(%esp) 16f4d: 89 44 24 04 mov %eax,0x4(%esp) 16f51: e8 be 26 ff ff call 9614 <__cyg_profile_func_enter <at> plt> 16f56: 8b 45 04 mov 0x4(%ebp),%eax 16f59: 89 44 24 04 mov %eax,0x4(%esp) 16f5d: 8b 83 9c ff ff ff mov 0xffffff9c(%ebx),%eax 16f63: 89 04 24 mov %eax,(%esp) 16f66: e8 a9 26 ff ff call 9614 <__cyg_profile_func_enter <at> plt> 16f6b: 8b 93 9c ff ff ff mov 0xffffff9c(%ebx),%edx 16f71: 8b 45 04 mov 0x4(%ebp),%eax 16f74: 0f b6 b5 e4 fe ff ff movzbl 0xfffffee4(%ebp),%esi 16f7b: 89 14 24 mov %edx,(%esp) 16f7e: 89 44 24 04 mov %eax,0x4(%esp) 16f82: e8 0d 2b ff ff call 9a94 <__cyg_profile_func_exit <at> plt> 16f87: 8b 45 04 mov 0x4(%ebp),%eax 16f8a: 89 44 24 04 mov %eax,0x4(%esp) 16f8e: 8b 83 9c ff ff ff mov 0xffffff9c(%ebx),%eax 16f94: 89 04 24 mov %eax,(%esp) 16f97: e8 f8 2a ff ff call 9a94 <__cyg_profile_func_exit <at> plt> 16f9c: 89 f2 mov %esi,%edx 16f9e: 84 d2 test %dl,%dl 16fa0: 75 34 jne 16fd6 <kdemain+0x236> 16fa2: e9 86 00 00 00 jmp 1702d <kdemain+0x28d> 16fa7: c7 04 24 00 01 00 00 movl $0x100,(%esp) 16fae: 66 90 xchg %ax,%ax 16fb0: e8 1f 29 ff ff call 98d4 <_Znwj <at> plt> 16fb5: 89 c6 mov %eax,%esi 16fb7: 89 04 24 mov %eax,(%esp) 16fba: e8 65 28 ff ff call 9824 <_ZN5KViewC1Ev <at> plt> 16fbf: 89 7c 24 04 mov %edi,0x4(%esp) 16fc3: 83 c7 01 add $0x1,%edi 16fc6: c7 44 24 08 01 00 00 movl $0x1,0x8(%esp) 16fcd: 00 16fce: 89 34 24 mov %esi,(%esp) 16fd1: e8 1e 30 ff ff call 9ff4 <_ZN11KMainWindow7restoreEib <at> plt> 16fd6: 89 3c 24 mov %edi,(%esp) 16fd9: e8 16 29 ff ff call 98f4 <_ZN11KMainWindow13canBeRestoredEi <at> plt> 16fde: 84 c0 test %al,%al 16fe0: 75 c5 jne 16fa7 <kdemain+0x207> 16fe2: 8b 85 80 fe ff ff mov 0xfffffe80(%ebp),%eax 16fe8: 89 04 24 mov %eax,(%esp) 16feb: e8 74 2c ff ff call 9c64 <_ZN12QApplication4execEv <at> plt> 16ff0: 8b 95 80 fe ff ff mov 0xfffffe80(%ebp),%edx 16ff6: 89 14 24 mov %edx,(%esp) 16ff9: 89 c6 mov %eax,%esi 16ffb: e8 04 2d ff ff call 9d04 <_ZN12KApplicationD1Ev <at> plt> 17000: 8b 85 84 fe ff ff mov 0xfffffe84(%ebp),%eax 17006: 89 04 24 mov %eax,(%esp) 17009: e8 56 27 ff ff call 9764 <_ZN10KAboutDataD1Ev <at> plt> 1700e: 8b 45 04 mov 0x4(%ebp),%eax 17011: 8b 93 9c ff ff ff mov 0xffffff9c(%ebx),%edx 17017: 89 44 24 04 mov %eax,0x4(%esp) 1701b: 89 14 24 mov %edx,(%esp) 1701e: e8 71 2a ff ff call 9a94 <__cyg_profile_func_exit <at> plt> 17023: 8d 65 f4 lea 0xfffffff4(%ebp),%esp 17026: 89 f0 mov %esi,%eax 17028: 5b pop %ebx 17029: 5e pop %esi 1702a: 5f pop %edi 1702b: 5d pop %ebp 1702c: c3 ret 1702d: c7 04 24 00 00 00 00 movl $0x0,(%esp) 17034: e8 8b 27 ff ff call 97c4 <_ZN12KCmdLineArgs10parsedArgsEPKc <at> plt> 17039: c7 04 24 00 01 00 00 movl $0x100,(%esp) 17040: 89 85 8c fe ff ff mov %eax,0xfffffe8c(%ebp) 17046: e8 89 28 ff ff call 98d4 <_Znwj <at> plt> 1704b: 89 85 90 fe ff ff mov %eax,0xfffffe90(%ebp) 17051: 89 04 24 mov %eax,(%esp) 17054: e8 cb 27 ff ff call 9824 <_ZN5KViewC1Ev <at> plt> 17059: 8b 95 90 fe ff ff mov 0xfffffe90(%ebp),%edx 1705f: 8b 02 mov (%edx),%eax 17061: 89 14 24 mov %edx,(%esp) 17064: ff 90 bc 00 00 00 call *0xbc(%eax) 1706a: 8b 85 8c fe ff ff mov 0xfffffe8c(%ebp),%eax 17070: 89 04 24 mov %eax,(%esp) 17073: e8 6c 27 ff ff call 97e4 <_ZNK12KCmdLineArgs5countEv <at> plt> 17078: 85 c0 test %eax,%eax 1707a: 0f 8e dd 00 00 00 jle 1715d <kdemain+0x3bd> 17080: 8d 83 a3 dc ff ff lea 0xffffdca3(%ebx),%eax 17086: 8d 7d f0 lea 0xfffffff0(%ebp),%edi 17089: 89 44 24 04 mov %eax,0x4(%esp) 1708d: 8d 75 a0 lea 0xffffffa0(%ebp),%esi 17090: 89 3c 24 mov %edi,(%esp) 17093: e8 9c 22 ff ff call 9334 <_ZN7QStringC1EPKc <at> plt> 17098: 8b 95 8c fe ff ff mov 0xfffffe8c(%ebp),%edx 1709e: 89 34 24 mov %esi,(%esp) 170a1: c7 44 24 08 00 00 00 movl $0x0,0x8(%esp) 170a8: 00 170a9: 89 54 24 04 mov %edx,0x4(%esp) 170ad: e8 92 2d ff ff call 9e44 <_ZNK12KCmdLineArgs3urlEi <at> plt> 170b2: 83 ec 04 sub $0x4,%esp 170b5: 89 7c 24 04 mov %edi,0x4(%esp) 170b9: 89 34 24 mov %esi,(%esp) 170bc: e8 03 21 ff ff call 91c4 <_ZNK4KURLeqERK7QString <at> plt> 170c1: 89 34 24 mov %esi,(%esp) 170c4: 88 85 8b fe ff ff mov %al,0xfffffe8b(%ebp) 170ca: e8 55 2e ff ff call 9f24 <_ZN4KURLD1Ev <at> plt> 170cf: 8b 45 04 mov 0x4(%ebp),%eax 170d2: 89 44 24 04 mov %eax,0x4(%esp) 170d6: 8b 83 9c ff ff ff mov 0xffffff9c(%ebx),%eax 170dc: 89 04 24 mov %eax,(%esp) 170df: e8 30 25 ff ff call 9614 <__cyg_profile_func_enter <at> plt> 170e4: 8b 75 f0 mov 0xfffffff0(%ebp),%esi 170e7: 8b 45 04 mov 0x4(%ebp),%eax 170ea: 8b 93 9c ff ff ff mov 0xffffff9c(%ebx),%edx 170f0: 89 44 24 04 mov %eax,0x4(%esp) 170f4: 89 14 24 mov %edx,(%esp) 170f7: e8 18 25 ff ff call 9614 <__cyg_profile_func_enter <at> plt> 170fc: 8b 3e mov (%esi),%edi 170fe: 83 ef 01 sub $0x1,%edi 17101: 89 3e mov %edi,(%esi) 17103: 8b 45 04 mov 0x4(%ebp),%eax 17106: 89 44 24 04 mov %eax,0x4(%esp) 1710a: 8b 83 9c ff ff ff mov 0xffffff9c(%ebx),%eax 17110: 89 04 24 mov %eax,(%esp) 17113: e8 7c 29 ff ff call 9a94 <__cyg_profile_func_exit <at> plt> 17118: 85 ff test %edi,%edi 1711a: 75 15 jne 17131 <kdemain+0x391> 1711c: 8b 83 98 ff ff ff mov 0xffffff98(%ebx),%eax 17122: 8b 55 f0 mov 0xfffffff0(%ebp),%edx 17125: 3b 10 cmp (%eax),%edx 17127: 74 08 je 17131 <kdemain+0x391> 17129: 89 14 24 mov %edx,(%esp) 1712c: e8 e3 2b ff ff call 9d14 <_ZN11QStringData10deleteSelfEv <at> plt> 17131: 8b 45 04 mov 0x4(%ebp),%eax 17134: 8b 93 9c ff ff ff mov 0xffffff9c(%ebx),%edx 1713a: 89 44 24 04 mov %eax,0x4(%esp) 1713e: 89 14 24 mov %edx,(%esp) 17141: e8 4e 29 ff ff call 9a94 <__cyg_profile_func_exit <at> plt> 17146: 80 bd 8b fe ff ff 00 cmpb $0x0,0xfffffe8b(%ebp) 1714d: 74 21 je 17170 <kdemain+0x3d0> 1714f: 8b 85 90 fe ff ff mov 0xfffffe90(%ebp),%eax 17155: 89 04 24 mov %eax,(%esp) 17158: e8 17 23 ff ff call 9474 <_ZN5KView13loadFromStdinEv <at> plt> 1715d: 8b 95 8c fe ff ff mov 0xfffffe8c(%ebp),%edx 17163: 89 14 24 mov %edx,(%esp) 17166: e8 89 25 ff ff call 96f4 <_ZN12KCmdLineArgs5clearEv <at> plt> 1716b: e9 72 fe ff ff jmp 16fe2 <kdemain+0x242> 17170: 8b 95 8c fe ff ff mov 0xfffffe8c(%ebp),%edx 17176: 8d 75 c8 lea 0xffffffc8(%ebp),%esi 17179: 89 34 24 mov %esi,(%esp) 1717c: c7 44 24 08 00 00 00 movl $0x0,0x8(%esp) 17183: 00 17184: 89 54 24 04 mov %edx,0x4(%esp) 17188: e8 b7 2c ff ff call 9e44 <_ZNK12KCmdLineArgs3urlEi <at> plt> 1718d: 8b 85 90 fe ff ff mov 0xfffffe90(%ebp),%eax 17193: 83 ec 04 sub $0x4,%esp 17196: 89 74 24 04 mov %esi,0x4(%esp) 1719a: 89 04 24 mov %eax,(%esp) 1719d: e8 b2 25 ff ff call 9754 <_ZN5KView4loadERK4KURL <at> plt> 171a2: 89 34 24 mov %esi,(%esp) 171a5: e8 7a 2d ff ff call 9f24 <_ZN4KURLD1Ev <at> plt> 171aa: eb b1 jmp 1715d <kdemain+0x3bd> 171ac: 90 nop 171ad: 90 nop 171ae: 90 nop 171af: 90 nop Best Wishes, robert 2009/2/27 robert song <robertsong.linux@xxxxxxxxx>: > 2009/2/27 Andrew Haley <aph@xxxxxxxxxx>: >> robert song wrote: >>> Andrew, thank you for your reply. >>> Well, the source file can be modified to solve the problem, but I want >>> to use one tool to record every address of the running applications >>> built with -finstrument-sections option, without modifying the >>> application source code itself. >> >> Try this: >> >> void >> __cyg_profile_func_enter (void *this_fn, void *call_site) >> { >> Dl_info info; >> dladdr(__builtin_return_address(0), &info); >> > > It is a good idea to use __builtin_return_address(0) which will be located > between the caller funtion start and end address. > > Thank you very much. > > besh wishes, > robert > >> printf ("addr:%lx %p:%s\n", this_fn, info.dli_saddr, info.dli_sname); >> } >> >> Link with -ldl. >> >> >>> But now the address sometimes may be the PLT address of the application, >>> and I don't have a good idea to deal with the problem. >>> >>> If the real address can be got in the __cyg_profile_func_enter() >>> function in some way, it will be helpful to analyse. >>> >>> 2009/2/26 Andrew Haley <aph@xxxxxxxxxx>: >>>> The shared library loader is trying to make the code as efficient as possible. >>>> When you take the address of a symbol in main, the loader is forced to fix up >>>> the reloc with a pointer into the PLT. This happens because at the time the >>>> fixup is made, the symbol foo has not been resolved: it'll only be resolved >>>> later when the first call to foo happens. So, we have to use the PLT address >>>> because we don't yet know where foo is. >>>> >>>> Because of C's rule that the address of a function must be unique, every subsequent >>>> reference to that symbol will return the PLT address, including the one used >>>> in the call to __cyg_profile_func_enter(). >>>> >>>> You can get around this by compiling main with -fpic and not globally initializing >>>> ptr. >>>> >>>> void *ptr; >>>> >>>> int >>>> main (int argc, char *argv[]) >>>> { >>>> ptr = foo; >>>> >>>> cc -fpic -finstrument-functions -g -o main main.c tracer.c foo.so -Wl,-rpath `pwd` >>>> >>>> $ ./main >>>> addr:40073c >>>> addr:110634 >>>> addr:110634 >>>> addr:11066b >>>> addr:11066b >>>> addr:40073c >>>> >>>> Andrew. >>>> >>>> >> >> >