RFR(xs): 8147510: [windows] no text locations shown for register info in hs-err file

Ioi Lam ioi.lam at oracle.com
Fri Jan 29 18:45:26 UTC 2016


Thanks Thomas, looks good!

- Ioi

On 1/29/16 12:53 AM, Thomas Stüfe wrote:
> Hi Ioi,
>
> Your suggestion makes sense, I changed the fix accordingly.
>
> New webrev: 
> http://cr.openjdk.java.net/~stuefe/webrevs/8147510-windows-register-info-print-location/webrev.02/webrev/ 
> <http://cr.openjdk.java.net/%7Estuefe/webrevs/8147510-windows-register-info-print-location/webrev.02/webrev/>
>
> Kind Regards, Thomas
>
>
> On Fri, Jan 29, 2016 at 12:32 AM, Ioi Lam <ioi.lam at oracle.com 
> <mailto:ioi.lam at oracle.com>> wrote:
>
>     Hi Thomas,
>
>     Thanks for taking my suggestion :-)
>
>     To make the intention of the truncation check clearer, how about
>     reorganizing the code to:
>
>       if (os::dll_address_to_library_name(addr, buf, sizeof(buf),
>     &offset)) {
>         st->print(PTR_FORMAT " ", addr);
>         if (strlen(buf) < sizeof(buf)-1) {
>           char* p = strrchr(buf, '\\');
>           if (p) {
>             st->print("%s", p + 1);
>           } else {
>             st->print("%s", buf);
>           }else {
>             // The library name is probably truncated. Let's omit the
>     library name.
>             // See also JDK-8147512.
>           }
>     }
>
>     I'd say 'probably' because the name could be exactly 255
>     characters long ...
>
>     Thanks
>     - Ioi
>
>
>
>     On 1/28/16 5:01 AM, Thomas Stüfe wrote:
>>     Hi Ioi,
>>
>>     thanks a lot for the review!
>>
>>     You are right, displaying the function name is more useful. I
>>     wanted to postpone this until I could start
>>     https://bugs.openjdk.java.net/browse/JDK-8147512, but now I took
>>     your suggestion and implemented this anyway.
>>
>>     See here new webrev:
>>
>>     http://cr.openjdk.java.net/~stuefe/webrevs/8147510-windows-register-info-print-location/webrev.01/webrev
>>     <http://cr.openjdk.java.net/%7Estuefe/webrevs/8147510-windows-register-info-print-location/webrev.01/webrev>
>>
>>     Notes:
>>     -I decided to cut off the path for libraries to make the printout
>>     easier to the eye; also, in the DLL-section we print out all DLLs
>>     including paths.
>>     -There is no clean way to handle truncation of long library
>>     paths, so I decided to at least detect truncation and if it
>>     happens to not print the library at all. I want to avoid large
>>     on-stack buffers, therefore I keep the result buffer relativly
>>     small (256 bytes). A better approach would be to - if os::find is
>>     used from error handling - hand down the error handling scratch
>>     buffer like we do in many other cases. But this is beyond the
>>     scope for this small fix.
>>
>>     New printout looks like this:
>>
>>      35 Register to memory mapping:
>>      36
>>      37 RIP=0x000000006ddd6a43 jvm.dll::crash_with_segfault + 0x13
>>      38 RAX=0xabc0000000000abc is an unknown value
>>
>>     Kind Regards, Thomas
>>
>>
>>
>>     On Thu, Jan 28, 2016 at 7:42 AM, Ioi Lam <ioi.lam at oracle.com
>>     <mailto:ioi.lam at oracle.com>> wrote:
>>
>>         Hi Thomas,
>>
>>         5269 bool os::find(address addr, outputStream* st) {
>>         5270   int offset = -1;
>>         5271   char buf[255];
>>         5272   if (os::dll_address_to_library_name(addr, buf,
>>         sizeof(buf), &offset)) {
>>         5273     st->print_cr("%s + %x", buf, offset);
>>         5274     return true;
>>         5275   }
>>         5276   return false;
>>         5277 }
>>
>>
>>         Have you tried calling os::dll_address_to_function_name as
>>         well so you can get the function name?
>>
>>         I noticed that the Linux version of os::find contains code
>>         for printing out the function name, but couldn't find an
>>         hs_err file where that code is actually used:
>>
>>         bool os::find(address addr, outputStream* st) {
>>             ...
>>             if (dlinfo.dli_fname != NULL) {
>>               st->print(" in %s", dlinfo.dli_fname);
>>             }
>>
>>
>>         Thanks
>>         - Ioi
>>
>>
>>         On 1/19/16 11:53 PM, Thomas Stüfe wrote:
>>
>>             May I please have a review and a sponsor?
>>
>>             Thank you!
>>
>>             On Sat, Jan 16, 2016 at 10:42 AM, Thomas Stüfe
>>             <thomas.stuefe at gmail.com <mailto:thomas.stuefe at gmail.com>>
>>             wrote:
>>
>>                 Hi,
>>
>>                 could I please have reviews and a sponsor for this
>>                 small fix:
>>
>>                 Bug: https://bugs.openjdk.java.net/browse/JDK-8147510
>>                 Webrev:
>>                 http://cr.openjdk.java.net/~stuefe/webrevs/8147510-windows-register-info-print-location/webrev.00/
>>                 <http://cr.openjdk.java.net/%7Estuefe/webrevs/8147510-windows-register-info-print-location/webrev.00/>
>>
>>                 When we print register to memory info in hs-err file,
>>                 text addresses are
>>                 not resolved on windows like on other platforms:
>>
>>                 "RCX=0x000000005efa0000 is an unknown value"
>>
>>                 This fix changes this (the same way it is implemented
>>                 on other platforms):
>>
>>                 "RCX=C:\d031900\openjdk\jdk9-hs-rt\output\images\jdk\bin\server\jvm.dll
>>                 +
>>                 0"
>>
>>                 Please note that this printout and the code behind it
>>                 could be improved
>>                 and cleaned up a lot. For instance, I know that using
>>                 an on-stack buffer in
>>                 os::find() is not the best implementation here. But I
>>                 wanted a minimal
>>                 change. For the follow-up work, I opened a new bug:
>>                 https://bugs.openjdk.java.net/browse/JDK-8147512.
>>
>>                 Thanks & Regards, Thomas
>>
>>
>>
>>
>>
>>
>
>



More information about the hotspot-runtime-dev mailing list