rose00 (owner)

Revisions

gist: 144362 Download_button fork
public
Public Clone URL: git://gist.github.com/144362.git
Embed All Files: show embed
ThrowBug code paths #
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
--------
gamma -XX:+PrintAssembly -Xbatch -XX:+PrintCompilation -XX:+EnableMethodHandles -cp $BUGDIR ThrowBug
VM option '+PrintAssembly'
VM option '+PrintCompilation'
VM option '+EnableMethodHandles'
OpenJDK Server VM warning: JSR 292 invokedynamic is disabled in this JVM. Use -XX:+EnableInvokeDynamic to enable.
  1 !b ThrowBug::catcher (18 bytes)
Loaded disassembler from hsdis-i386.dylib
Decoding compiled method 0x090d44c8:
Code:
[Disassembling for mach='i386(base-hsdis)']
[Entry Point]
[Verified Entry Point]
  0x090d45a0: mov [esp-0x4000], eax
  0x090d45a7: push ebp
  0x090d45a8: sub esp, 0x00000018 ;*synchronization entry
                                        ; - ThrowBug::catcher@-1 (line 33)
  0x090d45ae: mov ebx, 0x00000154
  0x090d45b3: mov ecx, [ebx+0x101B6C20] ; {oop('ThrowBug')}
  0x090d45b9: mov ebp, esp
  0x090d45bb: call 0x090ab060 ; OopMap{off=32}
                                        ;*invokevirtual invoke
                                        ; - ThrowBug::catcher@3 (line 33)
                                        ; {optimized virtual_call}
  0x090d45c0: mov esp, ebp ;*invokevirtual invoke
                                        ; - ThrowBug::catcher@3 (line 33)
  0x090d45c2: add esp, 0x00000018
  0x090d45c5: pop ebp
  0x090d45c6: test [0x4C000], eax ; {poll_return}
  0x090d45cc: ret
  0x090d45cd: mov ebx, 0x00000158
  0x090d45d2: inc [ebx+0x101B6C20] ;*putstatic catches
                                        ; - ThrowBug::catcher@13 (line 35)
                                        ; {oop('ThrowBug')}
  0x090d45d8: mov eax, 0x00000000
  0x090d45dd: jmp 0x090d45c2
  0x090d45df: hlt
[Stub Code]
  0x090d45e0: mov ebx, 0x00000000 ; {no_reloc}
  0x090d45e5: jmp 0x090d45e5 ; {runtime_call}
[Exception Handler]
  0x090d45ea: jmp 0x090d2c60 ; {runtime_call}
  0x090d45ef: push 0x090d45ef ; {section_word}
  0x090d45f4: jmp 0x090abb80 ; {runtime_call}
[Constants]
  0x090d45f9: int3
  0x090d45fa: int3
  0x090d45fb: int3
  2 b ThrowBug::thrower (4 bytes)
Decoding compiled method 0x090d46c8:
Code:
[Disassembling for mach='i386(base-hsdis)']
[Entry Point]
[Verified Entry Point]
  0x090d47a0: push ebp
  0x090d47a1: sub esp, 8 ;*synchronization entry
                                        ; - ThrowBug::thrower@-1 (line 26)
  0x090d47a7: mov ebx, 0x00000150
  0x090d47ac: mov ecx, [ebx+0x101B6C20] ;*getstatic blintz
                                        ; - ThrowBug::thrower@0 (line 26)
                                        ; {oop('ThrowBug')}
  0x090d47b2: add esp, 8
  0x090d47b5: pop ebp
  0x090d47b6: jmp 0x090d4020 ; {runtime_call}
  0x090d47bb: hlt
  0x090d47bc: hlt
  0x090d47bd: hlt
  0x090d47be: hlt
  0x090d47bf: hlt
[Exception Handler]
[Stub Code]
  0x090d47c0: jmp 0x090d2c60 ; {no_reloc}
  0x090d47c5: push 0x090d47c5 ; {section_word}
  0x090d47ca: jmp 0x090abb80 ; {runtime_call}
[Constants]
  0x090d47cf: int3
*** MH ret @0x090d45c0: c483e58b
*** MH ret @0x090d45c0: c483e58b
*** MH ret @0x090d45c0: c483e58b
*** MH ret @0x090d45c0: c483e58b
Segmentation fault
 
Decoding RuntimeStub - _rethrow_Java 0x090d3fc8
[Disassembling for mach='i386(base-hsdis)']
  0x090d4020: push ebp
  0x090d4021: sub esp, 0x00000028
  0x090d4027: push [esp+0x2C]
  0x090d402b: pop [esp+0xC]
  0x090d402f: mov ebx, esp
  0x090d4031: shr ebx, 0x0000000c
  0x090d4034: mov ebx, [ebx*4+0x4D57E20]
  0x090d403b: mov [ebx+0x118], esp
  0x090d4041: mov [esp+0x10], ebx
  0x090d4045: mov [esp], ecx
  0x090d4048: mov [esp+0x4], ebx
  0x090d404c: push [esp+0xC]
  0x090d4050: pop [esp+0x8]
  0x090d4054: call 0x04a3ffe0
  0x090d4059: mov ecx, eax
  0x090d405b: mov ebp, [esp+0x10]
  0x090d405f: mov [ebp+0x118], 0x00000000
  0x090d4069: mov ebx, ebp
  0x090d406b: mov [ebx+0x11C], 0x00000000
  0x090d4075: mov eax, [ebx+0x144]
  0x090d407b: mov [ebx+0x144], 0x00000000
  0x090d4085: mov ebp, [ebx+0x4]
  0x090d4088: test ebp, ebp
  0x090d408a: jnz 0x090d4093
  0x090d408c: add esp, 0x00000028
  0x090d408f: pop ebp
  0x090d4090: pop edx
  0x090d4091: jmp ecx
  0x090d4093: mov ecx, Stub::forward exception
  0x090d4098: mov ebx, 0x00000000
  0x090d409d: add esp, 0x00000028
  0x090d40a0: pop ebp
  0x090d40a1: jmp ecx
  0x090d40a3: int3
 
StubRoutines::forward exception [0x090002c0, 0x0900032a[ (106 bytes)
[Disassembling for mach='i386(base-hsdis)']
  0x090002c0: mov ecx, esp
  0x090002c2: shr ecx, 0x0000000c
  0x090002c5: mov ecx, [ecx*4+0x4D57E20]
  0x090002cc: cmp [ecx+0x4], 0x00000000
  0x090002d3: jnz 0x090002ea
  0x090002d9: push 0x04c68dd0
  0x090002de: call 0x090002e3
  0x090002e3: pusha
  0x090002e4: call 0x0439b874
  0x090002e9: hlt
  0x090002ea: mov eax, [esp]
  ;; call exception_handler_for_return_address
  0x090002ed: push eax
  0x090002ee: call 0x04a4bcc8
  0x090002f3: add esp, 4
  0x090002f6: mov ebx, eax
  0x090002f8: mov ecx, esp
  0x090002fa: shr ecx, 0x0000000c
  0x090002fd: mov ecx, [ecx*4+0x4D57E20]
  0x09000304: pop edx
  0x09000305: mov eax, [ecx+0x4]
  0x09000308: mov [ecx+0x4], 0x00000000
  0x0900030f: test eax, eax
  0x09000311: jnz 0x09000328
  0x09000317: push 0x04c68e38
  0x0900031c: call 0x09000321
  0x09000321: pusha
  0x09000322: call 0x0439b874
  0x09000327: hlt
  0x09000328: jmp ebx
 
--------
 
 
--------
gamma -XX:+PrintAssembly -Xbatch -XX:+PrintCompilation -XX:+EnableMethodHandles -cp $BUGDIR ThrowBug
VM option '+PrintAssembly'
VM option '+PrintCompilation'
VM option '+EnableMethodHandles'
OpenJDK Server VM warning: JSR 292 invokedynamic is disabled in this JVM. Use -XX:+EnableInvokeDynamic to enable.
  1 !b ThrowBug::catcher (18 bytes)
Could not load hsdis-i386.dylib; library not loadable; PrintAssembly is disabled
PrintAssembly request changed to PrintOptoAssembly
{method}
 - klass: {other class}
 - method holder: 'ThrowBug'
 - constants: 0x04b7a7d0{constant pool}
 - access: 0x81000008 static
 - name: 'catcher'
 - signature: '(Ljava/dyn/MethodHandle;)Ljava/lang/Object;'
 - max stack: 2
 - max locals: 2
 - size of params: 1
 - method size: 20
 - vtable index: -2
 - i2i entry: 0x0900b840
 - adapter: 0x0010fb78
 - compiled entry 0x090b2da8
 - code size: 18
 - code start: 0x101b6b08
 - code end (excl): 0x101b6b1a
 - method data: 0x101cb528
 - checked ex length: 0
 - linenumber start: 0x101b6b1a
 - localvar length: 0
#
# java/lang/Object * ( java/dyn/MethodHandle * )
#
#r000 ecx : parm 0: java/dyn/MethodHandle *
# -- Old esp -- Framesize: 32 --
#r045 esp+28: return address
#r044 esp+24: pad2, in_preserve
#r043 esp+20: pad2, in_preserve
#r042 esp+16: Fixed slot 0
#r049 esp+12: spill
#r048 esp+ 8: outgoing argument
#r047 esp+ 4: outgoing argument
#r046 esp+ 0: outgoing argument
#
abababab N1: # B1 <- B2 Freq: 1
abababab
000 B1: # B3 B2 <- BLOCK HEAD IS JUNK Freq: 1
000 # stack bang
PUSHL EBP
SUB ESP,24 # Create frame
00e MOV EBX,#340
013 MOV ECX,[EBX + precise klass ThrowBug: 0x000e50d0:Constant:exact *] ! Field ThrowBug.THROWER
019 CALL,static/MethodHandle java.dyn.MethodHandle::invoke
        # ThrowBug::catcher @ bci:3 L[0]=_ L[1]=_
        # OopMap{off=32}
022
022 B2: # N1 <- B1 B3 Freq: 0.99999
022 ADD ESP,24 # Destroy frame
POPL EBP
TEST PollPage,EAX ! Poll Safepoint
 
02c RET
02c
02d B3: # B2 <- B1 Freq: 1e-05
02d MOV EBX,#344
032 INC [EBX + precise klass ThrowBug: 0x000e50d0:Constant:exact *] ! Field ThrowBug.catches
038 MOV EAX,NULL
03d JMP,s B2
03d
 
  2 b ThrowBug::thrower (4 bytes)
PrintAssembly request changed to PrintOptoAssembly
{method}
 - klass: {other class}
 - method holder: 'ThrowBug'
 - constants: 0x04b7a7d0{constant pool}
 - access: 0x81000008 static
 - name: 'thrower'
 - signature: '()Ljava/lang/Object;'
 - max stack: 1
 - max locals: 0
 - size of params: 0
 - method size: 20
 - vtable index: -2
 - i2i entry: 0x0900b840
 - adapter: 0x0010f9f8
 - compiled entry 0x090aaa25
 - code size: 4
 - code start: 0x101b6a40
 - code end (excl): 0x101b6a44
 - method data: 0x101cb598
 - checked ex length: 1
 - checked ex start: 0x101b6a4c
 - linenumber start: 0x101b6a44
 - localvar length: 0
#
# java/lang/Object * ( )
#
# -- Old esp -- Framesize: 16 --
#r045 esp+12: return address
#r044 esp+ 8: pad2, in_preserve
#r043 esp+ 4: pad2, in_preserve
#r042 esp+ 0: Fixed slot 0
#
abababab N1: # B1 <- B1 Freq: 1
abababab
000 B1: # N1 <- BLOCK HEAD IS JUNK Freq: 1
000 PUSHL EBP
SUB ESP,8 # Create frame
007 MOV EBX,#336
00c MOV ECX,[EBX + precise klass ThrowBug: 0x004f20d0:Constant:exact *] ! Field ThrowBug.blintz
012 ADD ESP,8 # Destroy frame
POPL EBP
 
016 JMP rethrow_stub
016
 
*** MH ret @0x090d45c0: c483e58b
*** MH ret @0x090d45c0: c483e58b
*** MH ret @0x090d45c0: c483e58b
*** MH ret @0x090d45c0: c483e58b
Segmentation fault
 
  1 !b ThrowBug::catcher (18 bytes)
 
Decoding ExceptionBlob@0x090d2c60 0x090d2c08
[Disassembling for mach='i386(base-hsdis)']
  0x090d2c60: push edx
  0x090d2c61: sub esp, 8
  0x090d2c64: mov [esp+0x4], ebp
  0x090d2c68: mov ecx, esp
  0x090d2c6a: shr ecx, 0x0000000c
  0x090d2c6d: mov ecx, [ecx*4+0x4D57E20]
  0x090d2c74: mov [ecx+0x178], eax
  0x090d2c7a: mov [ecx+0x17C], edx
  0x090d2c80: mov [esp], ecx
  0x090d2c83: mov [ecx+0x118], esp
  0x090d2c89: call 0x04a42462
  0x090d2c8e: mov ecx, esp
  0x090d2c90: shr ecx, 0x0000000c
  0x090d2c93: mov ecx, [ecx*4+0x4D57E20]
  0x090d2c9a: mov [ecx+0x118], 0x00000000
  0x090d2ca4: mov ebp, [esp+0x4]
  0x090d2ca8: add esp, 8
  0x090d2cab: pop edx
  0x090d2cac: push eax
  0x090d2cad: mov ecx, esp
  0x090d2caf: shr ecx, 0x0000000c
  0x090d2cb2: mov ecx, [ecx*4+0x4D57E20]
  0x090d2cb9: mov eax, [ecx+0x178]
  0x090d2cbf: mov edx, [ecx+0x17C]
  0x090d2cc5: mov [ecx+0x180], 0x00000000
  0x090d2ccf: mov [ecx+0x17C], 0x00000000
  0x090d2cd9: mov [ecx+0x178], 0x00000000
  0x090d2ce3: pop ecx
  0x090d2ce4: jmp ecx
  0x090d2ce6: int3
  0x090d2ce7: int3