Re: __cyg_profile_func_enter is not called with correct address ?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



thank you very much. that is correct.

2009/3/6 robert song <robertsong.linux@xxxxxxxxx>:
> 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.
>>>>>
>>>>>
>>>
>>>
>>
>


[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux