Mercurial > hg > graal-jvmci-8
comparison src/os/solaris/vm/dtraceJSDT_solaris.cpp @ 6605:4ee06e614636
7116786: RFE: Detailed information on VerifyErrors
Summary: Provide additional detail in VerifyError messages
Reviewed-by: sspitsyn, acorn
author | kamg |
---|---|
date | Mon, 06 Aug 2012 15:54:45 -0400 |
parents | 1d1603768966 |
children | da91efe96a93 |
comparison
equal
deleted
inserted
replaced
6604:c3c2141203e7 | 6605:4ee06e614636 |
---|---|
1 /* | 1 /* |
2 * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. | 2 * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * | 4 * |
5 * This code is free software; you can redistribute it and/or modify it | 5 * This code is free software; you can redistribute it and/or modify it |
6 * under the terms of the GNU General Public License version 2 only, as | 6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
624 tty->print_cr("// [Section #%d]", i); | 624 tty->print_cr("// [Section #%d]", i); |
625 printDOFSection(dof, sec); | 625 printDOFSection(dof, sec); |
626 } | 626 } |
627 } | 627 } |
628 | 628 |
629 /** | |
630 * This prints out hex data in a 'windbg' or 'xxd' form, where each line is: | |
631 * <hex-address>: 8 * <hex-halfword> <ascii translation> | |
632 * example: | |
633 * 0000000: 7f44 4f46 0102 0102 0000 0000 0000 0000 .DOF............ | |
634 * 0000010: 0000 0000 0000 0040 0000 0020 0000 0005 .......@... .... | |
635 * 0000020: 0000 0000 0000 0040 0000 0000 0000 015d .......@.......] | |
636 * ... | |
637 */ | |
638 static void printDOFRawData(void* dof) { | |
639 size_t size = ((dof_hdr_t*)dof)->dofh_loadsz; | |
640 size_t limit = (size + 16) / 16 * 16; | |
641 for (size_t i = 0; i < limit; ++i) { | |
642 if (i % 16 == 0) { | |
643 tty->print("%07x:", i); | |
644 } | |
645 if (i % 2 == 0) { | |
646 tty->print(" "); | |
647 } | |
648 if (i < size) { | |
649 tty->print("%02x", ((unsigned char*)dof)[i]); | |
650 } else { | |
651 tty->print(" "); | |
652 } | |
653 if ((i + 1) % 16 == 0) { | |
654 tty->print(" "); | |
655 for (size_t j = 0; j < 16; ++j) { | |
656 size_t idx = i + j - 15; | |
657 char c = ((char*)dof)[idx]; | |
658 if (idx < size) { | |
659 tty->print("%c", c >= 32 && c <= 126 ? c : '.'); | |
660 } | |
661 } | |
662 tty->print_cr(""); | |
663 } | |
664 } | |
665 tty->print_cr(""); | |
666 } | |
667 | |
668 static void printDOFHelper(dof_helper_t* helper) { | 629 static void printDOFHelper(dof_helper_t* helper) { |
669 tty->print_cr("// dof_helper_t {"); | 630 tty->print_cr("// dof_helper_t {"); |
670 tty->print_cr("// dofhp_mod = \"%s\"", helper->dofhp_mod); | 631 tty->print_cr("// dofhp_mod = \"%s\"", helper->dofhp_mod); |
671 tty->print_cr("// dofhp_addr = 0x%016llx", helper->dofhp_addr); | 632 tty->print_cr("// dofhp_addr = 0x%016llx", helper->dofhp_addr); |
672 tty->print_cr("// dofhp_dof = 0x%016llx", helper->dofhp_dof); | 633 tty->print_cr("// dofhp_dof = 0x%016llx", helper->dofhp_dof); |
673 printDOF((void*)helper->dofhp_dof); | 634 printDOF((void*)helper->dofhp_dof); |
674 tty->print_cr("// }"); | 635 tty->print_cr("// }"); |
675 printDOFRawData((void*)helper->dofhp_dof); | 636 size_t len = ((dof_hdr_t*)helper)->dofh_loadsz; |
637 tty->print_data((void*)helper->dofhp_dof, len, true); | |
676 } | 638 } |
677 | 639 |
678 #else // ndef HAVE_DTRACE_H | 640 #else // ndef HAVE_DTRACE_H |
679 | 641 |
680 // Get here if we're not building on at least Solaris 10 | 642 // Get here if we're not building on at least Solaris 10 |