Mercurial > hg > truffle
annotate src/share/vm/compiler/disassembler.hpp @ 9126:bc26f978b0ce
HotSpotResolvedObjectType: implement hasFinalizeSubclass() correctly
don't use the (wrong) cached value, but ask the runtime on each request.
Fixes regression on xml.* benchmarks @ specjvm2008. The problem was:
After the constructor of Object was deoptimized due to an assumption violation,
it was recompiled again after some time. However, on recompilation, the value
of hasFinalizeSubclass for the class was not updated and it was compiled again
with a, now wrong, assumption, which then triggers deoptimization again.
This was repeated until it hit the recompilation limit (defined by
PerMethodRecompilationCutoff), and therefore only executed by the interpreter
from now on, causing the performance regression.
author | Bernhard Urban <bernhard.urban@jku.at> |
---|---|
date | Mon, 15 Apr 2013 19:54:58 +0200 |
parents | a5de0cc2f91c |
children | de6a9e811145 bdd155477289 |
rev | line source |
---|---|
100
c7c777385a15
6667042: PrintAssembly option does not work without special plugin
jrose
parents:
diff
changeset
|
1 /* |
6782 | 2 * Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved. |
100
c7c777385a15
6667042: PrintAssembly option does not work without special plugin
jrose
parents:
diff
changeset
|
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
c7c777385a15
6667042: PrintAssembly option does not work without special plugin
jrose
parents:
diff
changeset
|
4 * |
c7c777385a15
6667042: PrintAssembly option does not work without special plugin
jrose
parents:
diff
changeset
|
5 * This code is free software; you can redistribute it and/or modify it |
c7c777385a15
6667042: PrintAssembly option does not work without special plugin
jrose
parents:
diff
changeset
|
6 * under the terms of the GNU General Public License version 2 only, as |
c7c777385a15
6667042: PrintAssembly option does not work without special plugin
jrose
parents:
diff
changeset
|
7 * published by the Free Software Foundation. |
c7c777385a15
6667042: PrintAssembly option does not work without special plugin
jrose
parents:
diff
changeset
|
8 * |
c7c777385a15
6667042: PrintAssembly option does not work without special plugin
jrose
parents:
diff
changeset
|
9 * This code is distributed in the hope that it will be useful, but WITHOUT |
c7c777385a15
6667042: PrintAssembly option does not work without special plugin
jrose
parents:
diff
changeset
|
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
c7c777385a15
6667042: PrintAssembly option does not work without special plugin
jrose
parents:
diff
changeset
|
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
c7c777385a15
6667042: PrintAssembly option does not work without special plugin
jrose
parents:
diff
changeset
|
12 * version 2 for more details (a copy is included in the LICENSE file that |
c7c777385a15
6667042: PrintAssembly option does not work without special plugin
jrose
parents:
diff
changeset
|
13 * accompanied this code). |
c7c777385a15
6667042: PrintAssembly option does not work without special plugin
jrose
parents:
diff
changeset
|
14 * |
c7c777385a15
6667042: PrintAssembly option does not work without special plugin
jrose
parents:
diff
changeset
|
15 * You should have received a copy of the GNU General Public License version |
c7c777385a15
6667042: PrintAssembly option does not work without special plugin
jrose
parents:
diff
changeset
|
16 * 2 along with this work; if not, write to the Free Software Foundation, |
c7c777385a15
6667042: PrintAssembly option does not work without special plugin
jrose
parents:
diff
changeset
|
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
c7c777385a15
6667042: PrintAssembly option does not work without special plugin
jrose
parents:
diff
changeset
|
18 * |
1552
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
100
diff
changeset
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
100
diff
changeset
|
20 * or visit www.oracle.com if you need additional information or have any |
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
100
diff
changeset
|
21 * questions. |
100
c7c777385a15
6667042: PrintAssembly option does not work without special plugin
jrose
parents:
diff
changeset
|
22 * |
c7c777385a15
6667042: PrintAssembly option does not work without special plugin
jrose
parents:
diff
changeset
|
23 */ |
c7c777385a15
6667042: PrintAssembly option does not work without special plugin
jrose
parents:
diff
changeset
|
24 |
1972 | 25 #ifndef SHARE_VM_COMPILER_DISASSEMBLER_HPP |
26 #define SHARE_VM_COMPILER_DISASSEMBLER_HPP | |
27 | |
6796
b31471cdc53e
7200163: add CodeComments functionality to assember stubs
kvn
parents:
3960
diff
changeset
|
28 #include "asm/codeBuffer.hpp" |
1972 | 29 #include "runtime/globals.hpp" |
30 #ifdef TARGET_OS_FAMILY_linux | |
31 # include "os_linux.inline.hpp" | |
32 #endif | |
33 #ifdef TARGET_OS_FAMILY_solaris | |
34 # include "os_solaris.inline.hpp" | |
35 #endif | |
36 #ifdef TARGET_OS_FAMILY_windows | |
37 # include "os_windows.inline.hpp" | |
38 #endif | |
3960 | 39 #ifdef TARGET_OS_FAMILY_bsd |
40 # include "os_bsd.inline.hpp" | |
41 #endif | |
1972 | 42 |
100
c7c777385a15
6667042: PrintAssembly option does not work without special plugin
jrose
parents:
diff
changeset
|
43 class decode_env; |
c7c777385a15
6667042: PrintAssembly option does not work without special plugin
jrose
parents:
diff
changeset
|
44 |
c7c777385a15
6667042: PrintAssembly option does not work without special plugin
jrose
parents:
diff
changeset
|
45 // The disassembler prints out assembly code annotated |
c7c777385a15
6667042: PrintAssembly option does not work without special plugin
jrose
parents:
diff
changeset
|
46 // with Java specific information. |
c7c777385a15
6667042: PrintAssembly option does not work without special plugin
jrose
parents:
diff
changeset
|
47 |
c7c777385a15
6667042: PrintAssembly option does not work without special plugin
jrose
parents:
diff
changeset
|
48 class Disassembler { |
c7c777385a15
6667042: PrintAssembly option does not work without special plugin
jrose
parents:
diff
changeset
|
49 friend class decode_env; |
c7c777385a15
6667042: PrintAssembly option does not work without special plugin
jrose
parents:
diff
changeset
|
50 private: |
c7c777385a15
6667042: PrintAssembly option does not work without special plugin
jrose
parents:
diff
changeset
|
51 // this is the type of the dll entry point: |
6933
3d701c802d01
8000489: older builds of hsdis don't work anymore after 6879063
minqi
parents:
6806
diff
changeset
|
52 typedef void* (*decode_func_virtual)(uintptr_t start_va, uintptr_t end_va, |
6782 | 53 unsigned char* buffer, uintptr_t length, |
100
c7c777385a15
6667042: PrintAssembly option does not work without special plugin
jrose
parents:
diff
changeset
|
54 void* (*event_callback)(void*, const char*, void*), |
c7c777385a15
6667042: PrintAssembly option does not work without special plugin
jrose
parents:
diff
changeset
|
55 void* event_stream, |
c7c777385a15
6667042: PrintAssembly option does not work without special plugin
jrose
parents:
diff
changeset
|
56 int (*printf_callback)(void*, const char*, ...), |
c7c777385a15
6667042: PrintAssembly option does not work without special plugin
jrose
parents:
diff
changeset
|
57 void* printf_stream, |
6933
3d701c802d01
8000489: older builds of hsdis don't work anymore after 6879063
minqi
parents:
6806
diff
changeset
|
58 const char* options, |
3d701c802d01
8000489: older builds of hsdis don't work anymore after 6879063
minqi
parents:
6806
diff
changeset
|
59 int newline); |
3d701c802d01
8000489: older builds of hsdis don't work anymore after 6879063
minqi
parents:
6806
diff
changeset
|
60 // this is the type of the dll entry point for old version: |
3d701c802d01
8000489: older builds of hsdis don't work anymore after 6879063
minqi
parents:
6806
diff
changeset
|
61 typedef void* (*decode_func)(void* start_va, void* end_va, |
3d701c802d01
8000489: older builds of hsdis don't work anymore after 6879063
minqi
parents:
6806
diff
changeset
|
62 void* (*event_callback)(void*, const char*, void*), |
3d701c802d01
8000489: older builds of hsdis don't work anymore after 6879063
minqi
parents:
6806
diff
changeset
|
63 void* event_stream, |
3d701c802d01
8000489: older builds of hsdis don't work anymore after 6879063
minqi
parents:
6806
diff
changeset
|
64 int (*printf_callback)(void*, const char*, ...), |
3d701c802d01
8000489: older builds of hsdis don't work anymore after 6879063
minqi
parents:
6806
diff
changeset
|
65 void* printf_stream, |
100
c7c777385a15
6667042: PrintAssembly option does not work without special plugin
jrose
parents:
diff
changeset
|
66 const char* options); |
c7c777385a15
6667042: PrintAssembly option does not work without special plugin
jrose
parents:
diff
changeset
|
67 // points to the library. |
c7c777385a15
6667042: PrintAssembly option does not work without special plugin
jrose
parents:
diff
changeset
|
68 static void* _library; |
c7c777385a15
6667042: PrintAssembly option does not work without special plugin
jrose
parents:
diff
changeset
|
69 // bailout |
c7c777385a15
6667042: PrintAssembly option does not work without special plugin
jrose
parents:
diff
changeset
|
70 static bool _tried_to_load_library; |
c7c777385a15
6667042: PrintAssembly option does not work without special plugin
jrose
parents:
diff
changeset
|
71 // points to the decode function. |
6933
3d701c802d01
8000489: older builds of hsdis don't work anymore after 6879063
minqi
parents:
6806
diff
changeset
|
72 static decode_func_virtual _decode_instructions_virtual; |
100
c7c777385a15
6667042: PrintAssembly option does not work without special plugin
jrose
parents:
diff
changeset
|
73 static decode_func _decode_instructions; |
c7c777385a15
6667042: PrintAssembly option does not work without special plugin
jrose
parents:
diff
changeset
|
74 // tries to load library and return whether it succedded. |
c7c777385a15
6667042: PrintAssembly option does not work without special plugin
jrose
parents:
diff
changeset
|
75 static bool load_library(); |
c7c777385a15
6667042: PrintAssembly option does not work without special plugin
jrose
parents:
diff
changeset
|
76 |
c7c777385a15
6667042: PrintAssembly option does not work without special plugin
jrose
parents:
diff
changeset
|
77 // Machine dependent stuff |
1972 | 78 #ifdef TARGET_ARCH_x86 |
79 # include "disassembler_x86.hpp" | |
80 #endif | |
81 #ifdef TARGET_ARCH_sparc | |
82 # include "disassembler_sparc.hpp" | |
83 #endif | |
84 #ifdef TARGET_ARCH_zero | |
85 # include "disassembler_zero.hpp" | |
86 #endif | |
2192
b92c45f2bc75
7016023: Enable building ARM and PPC from src/closed repository
bobv
parents:
1972
diff
changeset
|
87 #ifdef TARGET_ARCH_arm |
b92c45f2bc75
7016023: Enable building ARM and PPC from src/closed repository
bobv
parents:
1972
diff
changeset
|
88 # include "disassembler_arm.hpp" |
b92c45f2bc75
7016023: Enable building ARM and PPC from src/closed repository
bobv
parents:
1972
diff
changeset
|
89 #endif |
b92c45f2bc75
7016023: Enable building ARM and PPC from src/closed repository
bobv
parents:
1972
diff
changeset
|
90 #ifdef TARGET_ARCH_ppc |
b92c45f2bc75
7016023: Enable building ARM and PPC from src/closed repository
bobv
parents:
1972
diff
changeset
|
91 # include "disassembler_ppc.hpp" |
b92c45f2bc75
7016023: Enable building ARM and PPC from src/closed repository
bobv
parents:
1972
diff
changeset
|
92 #endif |
1972 | 93 |
100
c7c777385a15
6667042: PrintAssembly option does not work without special plugin
jrose
parents:
diff
changeset
|
94 |
c7c777385a15
6667042: PrintAssembly option does not work without special plugin
jrose
parents:
diff
changeset
|
95 public: |
c7c777385a15
6667042: PrintAssembly option does not work without special plugin
jrose
parents:
diff
changeset
|
96 static bool can_decode() { |
6933
3d701c802d01
8000489: older builds of hsdis don't work anymore after 6879063
minqi
parents:
6806
diff
changeset
|
97 return (_decode_instructions_virtual != NULL) || |
3d701c802d01
8000489: older builds of hsdis don't work anymore after 6879063
minqi
parents:
6806
diff
changeset
|
98 (_decode_instructions != NULL) || |
3d701c802d01
8000489: older builds of hsdis don't work anymore after 6879063
minqi
parents:
6806
diff
changeset
|
99 load_library(); |
100
c7c777385a15
6667042: PrintAssembly option does not work without special plugin
jrose
parents:
diff
changeset
|
100 } |
c7c777385a15
6667042: PrintAssembly option does not work without special plugin
jrose
parents:
diff
changeset
|
101 static void decode(CodeBlob *cb, outputStream* st = NULL); |
c7c777385a15
6667042: PrintAssembly option does not work without special plugin
jrose
parents:
diff
changeset
|
102 static void decode(nmethod* nm, outputStream* st = NULL); |
8767
a5de0cc2f91c
8008555: Debugging code in compiled method sometimes leaks memory
roland
parents:
6933
diff
changeset
|
103 static void decode(address begin, address end, outputStream* st = NULL, CodeStrings c = CodeStrings()); |
100
c7c777385a15
6667042: PrintAssembly option does not work without special plugin
jrose
parents:
diff
changeset
|
104 }; |
1972 | 105 |
106 #endif // SHARE_VM_COMPILER_DISASSEMBLER_HPP |