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

Ioi Lam ioi.lam at oracle.com
Thu Jan 28 23:32:56 UTC 2016


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