ARM: Fix strange crash while running JCK

Andrew Haley aph at redhat.com
Fri Jan 13 07:23:08 PST 2012


Pavel reported a strange crash when running the JCK: a segfault
happens after the program has been running a long time.

It turns out that there are two bytecode dispatch tables.  One of
these is used for normal dispatch, one of these when there is a
safepoint.  One of these is generated automagically, and one isn't.
If you change bytecode numbering, you also have to change the
manually-generated version of the bytecode table.  I've added comments
to this effect.

The bytecodes were renumbered (at HS19, I think) but the
manually-generated version of the bytecode table wasn't.  The bytecode
that was affected was return_register_finalizer, which is only used in
the method java.lang.Object.<init>().  So, this crash was very rare:
only when moving to a safepoint and executing Object.<init>(), and
only in the interpreter: the JIT wasn't affected.

I've also taken the opportunity to add bytecode numbers as comments to
all the bytecode tables.

Finally, I found another bug in the JIT: if we move to a safepoint we
should process it before unlocking the monitor at the exit of a
synchronized routine.

Andrew.



2012-01-13  Andrew Haley  <aph at redhat.com>

	* arm_port/hotspot/tools/mkbc.c (writeouttable): Add numbering
	comments to bytecode output.
	* arm_port/hotspot/src/cpu/zero/vm/thumb2.cpp (Thumb2_Return):
	Move safepoint before monitor is unlocked.
	* arm_port/hotspot/src/cpu/zero/vm/cppInterpreter_arm.S
	(safe_dispatch_table): Add comment.
	Correct order of do_return_register_finalizer.
	Add numbering comments.
	* arm_port/hotspot/src/cpu/zero/vm/cppInterpreter_arm.S (TRACE):
	New macro.

diff -r 79014132e844 -r fc7a57de5179 arm_port/hotspot/src/cpu/zero/vm/bytecodes_arm.def
--- a/arm_port/hotspot/src/cpu/zero/vm/bytecodes_arm.def	Tue Jan 10 16:47:52 2012 +0000
+++ b/arm_port/hotspot/src/cpu/zero/vm/bytecodes_arm.def	Fri Jan 13 10:07:43 2012 -0500
@@ -29,6 +29,10 @@
 #define FAST_BYTECODES
 #endif

+/*  WARNING: If you change any of these bytecodes, you must also
+    change the safe_dispatch_table in cppInterpreter_arm.S to make it
+    match.  */
+
 nop                  = 0x00, 1
 aconst_null          = 0x01, 1
 iconst_m1            = 0x02, 1
diff -r 79014132e844 -r fc7a57de5179 arm_port/hotspot/src/cpu/zero/vm/cppInterpreter_arm.S
--- a/arm_port/hotspot/src/cpu/zero/vm/cppInterpreter_arm.S	Tue Jan 10 16:47:52 2012 +0000
+++ b/arm_port/hotspot/src/cpu/zero/vm/cppInterpreter_arm.S	Fri Jan 13 10:07:43 2012 -0500
@@ -483,6 +483,19 @@
 	.set	dispatch_state, dispatch_state + 1
 	.endm

+	@ This macro calls a user-supplied my_trace routine.  It
+	@ passes the current JPC as argument zero.  It can be safely
+	@ inserted at any point in the interpreter.
+	.macro TRACE
+	stmfd	sp!, {r0, r1, r2, r3, r4, lr}
+	mrs	r4, cpsr
+	mov	r0, jpc
+	ldr	r2, =my_trace
+	blx	r2
+	msr	cpsr, r4
+	ldmfd	sp!, {r0, r1, r2, r3, r4, lr}	
+	.endm
+	
 	.macro	DISPATCH_FINISH
     .if dispatch_state == 0
 	.error	"DISPATCH_FINISH without a DISPATCH_START or DISPATCH_STATE"
@@ -4753,262 +4766,266 @@

 #ifdef NOTICE_SAFEPOINTS
 safe_dispatch_table:
-	.word	do_nop
-	.word	do_u4const_0
-	.word	do_iconst_N
-	.word	do_iconst_N
-	.word	do_iconst_N
-	.word	do_iconst_N
-	.word	do_iconst_N
-	.word	do_iconst_N
-	.word	do_iconst_N
-	.word	do_u8const_0
-	.word	do_lconst_1
-	.word	do_u4const_0
-	.word	do_fconst_1
-	.word	do_fconst_2
-	.word	do_u8const_0
-	.word	do_dconst_1
-	.word	do_bipush
-	.word	do_sipush
-	.word	do_ldc
-	.word	do_ldc_w
-	.word	do_ldc2_w
-	.word	do_u4load
-	.word	do_u8load
-	.word	do_u4load
-	.word	do_u8load
-	.word	do_u4load
-	.word	do_iload_0
-	.word	do_iload_0
-	.word	do_iload_0
-	.word	do_iload_0
-	.word	do_u8load_0
-	.word	do_u8load_1
-	.word	do_u8load_2
-	.word	do_u8load_3
-	.word	do_fload_0
-	.word	do_fload_0
-	.word	do_fload_0
-	.word	do_fload_0
-	.word	do_u8load_0
-	.word	do_u8load_1
-	.word	do_u8load_2
-	.word	do_u8load_3
-	.word	do_aload_0
-	.word	do_aload_0
-	.word	do_aload_0
-	.word	do_aload_0
-	.word	do_u4aload
-	.word	do_u8aload
-	.word	do_u4aload
-	.word	do_u8aload
-	.word	do_u4aload
-	.word	do_baload
-	.word	do_caload
-	.word	do_saload
-	.word	do_u4store
-	.word	do_u8store
-	.word	do_u4store
-	.word	do_u8store
-	.word	do_u4store
-	.word	do_u4store_0
-	.word	do_u4store_1
-	.word	do_u4store_2
-	.word	do_u4store_3
-	.word	do_u8store_0
-	.word	do_u8store_1
-	.word	do_u8store_2
-	.word	do_u8store_3
-	.word	do_u4store_0
-	.word	do_u4store_1
-	.word	do_u4store_2
-	.word	do_u4store_3
-	.word	do_u8store_0
-	.word	do_u8store_1
-	.word	do_u8store_2
-	.word	do_u8store_3
-	.word	do_u4store_0
-	.word	do_u4store_1
-	.word	do_u4store_2
-	.word	do_u4store_3
-	.word	do_u4astore
-	.word	do_u8astore
-	.word	do_u4astore
-	.word	do_u8astore
-	.word	do_aastore
-	.word	do_bastore
-	.word	do_u2astore
-	.word	do_u2astore
-	.word	do_jpop
-	.word	do_jpop2
-	.word	do_dup
-	.word	do_dup_x1
-	.word	do_dup_x2
-	.word	do_dup2
-	.word	do_dup2_x1
-	.word	do_dup2_x2
-	.word	do_swap
-	.word	do_iadd
-	.word	do_ladd
-	.word	do_fadd
-	.word	do_dadd
-	.word	do_isub
-	.word	do_lsub
-	.word	do_fsub
-	.word	do_dsub
-	.word	do_imul
-	.word	do_lmul
-	.word	do_fmul
-	.word	do_dmul
-	.word	do_idiv
-	.word	do_ldiv
-	.word	do_fdiv
-	.word	do_ddiv
-	.word	do_irem
-	.word	do_lrem
-	.word	do_frem
-	.word	do_drem
-	.word	do_ineg
-	.word	do_lneg
-	.word	do_fneg
-	.word	do_dneg
-	.word	do_ishl
-	.word	do_lshl
-	.word	do_ishr
-	.word	do_lshr
-	.word	do_iushr
-	.word	do_lushr
-	.word	do_iand
-	.word	do_land
-	.word	do_ior
-	.word	do_lor
-	.word	do_ixor
-	.word	do_lxor
-	.word	do_iinc
-	.word	do_i2l
-	.word	do_i2f
-	.word	do_i2d
-	.word	do_l2i
-	.word	do_l2f
-	.word	do_l2d
-	.word	do_f2i
-	.word	do_f2l
-	.word	do_f2d
-	.word	do_d2i
-	.word	do_d2l
-	.word	do_d2f
-	.word	do_i2b
-	.word	do_i2c
-	.word	do_i2s
-	.word	do_lcmp
-	.word	do_fcmpl
-	.word	do_fcmpg
-	.word	do_dcmpl
-	.word	do_dcmpg
-	.word	do_ifeq
-	.word	do_ifne
-	.word	do_iflt
-	.word	do_ifge
-	.word	do_ifgt
-	.word	do_ifle
-	.word	do_if_icmpeq
-	.word	do_if_icmpne
-	.word	do_if_icmplt
-	.word	do_if_icmpge
-	.word	do_if_icmpgt
-	.word	do_if_icmple
-	.word	do_if_icmpeq
-	.word	do_if_icmpne
-	.word	do_goto
-	.word	do_jsr
-	.word	do_ret
-	.word	do_tableswitch
-	.word	do_lookupswitch
-	.word	do_ireturn
-	.word	do_lreturn
-	.word	do_ireturn
-	.word	do_lreturn
-	.word	do_ireturn
-	.word	do_return
-	.word	do_getstatic
-	.word	do_putstatic
-	.word	do_getfield
-	.word	do_putfield
-	.word	do_invokevirtual
-	.word	do_invokespecial
-	.word	do_invokestatic
-	.word	do_invokeinterface
-	.word	do_undefined
-	.word	do_new
-	.word	do_newarray
-	.word	do_anewarray
-	.word	do_arraylength
-	.word	do_athrow
-	.word	do_checkcast
-	.word	do_instanceof
-	.word	do_monitorenter
-	.word	do_monitorexit
-	.word	do_wide
-	.word	do_multianewarray
-	.word	do_ifeq
-	.word	do_ifne
-	.word	do_goto_w
-	.word	do_jsr_w
-	.word	do_breakpoint
-	.word	do_undefined
-	.word	do_bgetfield
-	.word	do_cgetfield
-	.word	do_undefined
-	.word	do_undefined
-	.word	do_igetfield
-	.word	do_lgetfield
-	.word	do_sgetfield
-	.word	do_aputfield
-	.word	do_bputfield
-	.word	do_cputfield
-	.word	do_undefined
-	.word	do_undefined
-	.word	do_iputfield
-	.word	do_lputfield
-	.word	do_undefined
-	.word	do_iaccess_0
-	.word	do_iaccess_0
-	.word	do_iaccess_0
-	.word	do_iaccess_0
-	.word	do_invokeresolved
-	.word	do_invokespecialresolved
-	.word	do_invokestaticresolved
-	.word	do_invokevfinal
-	.word	do_fast_iload_iload
-	.word	do_fast_iload_iload_N
-	.word	do_return_register_finalizer
-	.word	do_undefined
-	.word	do_iload_0_iconst_N
-	.word	do_iload_0_iconst_N
-	.word	do_iload_0_iconst_N
-	.word	do_iload_0_iconst_N
-	.word	do_iload_iconst_N
-	.word	do_iadd_istore_N
-	.word	do_isub_istore_N
-	.word	do_iand_istore_N
-	.word	do_ior_istore_N
-	.word	do_ixor_istore_N
-	.word	do_iadd_u4store
-	.word	do_isub_u4store
-	.word	do_iand_u4store
-	.word	do_ior_u4store
-	.word	do_ixor_u4store
-	.word	do_fast_iload_N_iload
-	.word	do_fast_iload_N_iload
-	.word	do_fast_iload_N_iload
-	.word	do_fast_iload_N_iload
-	.word	do_fast_iload_N_iload_N
-	.word	do_fast_iload_N_iload_N
-	.word	do_fast_iload_N_iload_N
-	.word	do_fast_iload_N_iload_N
-	.word	do_undefined
-	.word	do_undefined
+
+/*  WARNING: If you change any of these bytecodes, you must also
+    change the table in bytecodes_arm.def to make it match.  */
+
+	.word	do_nop	@ 0 0x00
+	.word	do_u4const_0	@ 1 0x01
+	.word	do_iconst_N	@ 2 0x02
+	.word	do_iconst_N	@ 3 0x03
+	.word	do_iconst_N	@ 4 0x04
+	.word	do_iconst_N	@ 5 0x05
+	.word	do_iconst_N	@ 6 0x06
+	.word	do_iconst_N	@ 7 0x07
+	.word	do_iconst_N	@ 8 0x08
+	.word	do_u8const_0	@ 9 0x09
+	.word	do_lconst_1	@ 10 0x0a
+	.word	do_u4const_0	@ 11 0x0b
+	.word	do_fconst_1	@ 12 0x0c
+	.word	do_fconst_2	@ 13 0x0d
+	.word	do_u8const_0	@ 14 0x0e
+	.word	do_dconst_1	@ 15 0x0f
+	.word	do_bipush	@ 16 0x10
+	.word	do_sipush	@ 17 0x11
+	.word	do_ldc	@ 18 0x12
+	.word	do_ldc_w	@ 19 0x13
+	.word	do_ldc2_w	@ 20 0x14
+	.word	do_u4load	@ 21 0x15
+	.word	do_u8load	@ 22 0x16
+	.word	do_u4load	@ 23 0x17
+	.word	do_u8load	@ 24 0x18
+	.word	do_u4load	@ 25 0x19
+	.word	do_iload_0	@ 26 0x1a
+	.word	do_iload_0	@ 27 0x1b
+	.word	do_iload_0	@ 28 0x1c
+	.word	do_iload_0	@ 29 0x1d
+	.word	do_u8load_0	@ 30 0x1e
+	.word	do_u8load_1	@ 31 0x1f
+	.word	do_u8load_2	@ 32 0x20
+	.word	do_u8load_3	@ 33 0x21
+	.word	do_fload_0	@ 34 0x22
+	.word	do_fload_0	@ 35 0x23
+	.word	do_fload_0	@ 36 0x24
+	.word	do_fload_0	@ 37 0x25
+	.word	do_u8load_0	@ 38 0x26
+	.word	do_u8load_1	@ 39 0x27
+	.word	do_u8load_2	@ 40 0x28
+	.word	do_u8load_3	@ 41 0x29
+	.word	do_aload_0	@ 42 0x2a
+	.word	do_aload_0	@ 43 0x2b
+	.word	do_aload_0	@ 44 0x2c
+	.word	do_aload_0	@ 45 0x2d
+	.word	do_u4aload	@ 46 0x2e
+	.word	do_u8aload	@ 47 0x2f
+	.word	do_u4aload	@ 48 0x30
+	.word	do_u8aload	@ 49 0x31
+	.word	do_u4aload	@ 50 0x32
+	.word	do_baload	@ 51 0x33
+	.word	do_caload	@ 52 0x34
+	.word	do_saload	@ 53 0x35
+	.word	do_u4store	@ 54 0x36
+	.word	do_u8store	@ 55 0x37
+	.word	do_u4store	@ 56 0x38
+	.word	do_u8store	@ 57 0x39
+	.word	do_u4store	@ 58 0x3a
+	.word	do_u4store_0	@ 59 0x3b
+	.word	do_u4store_1	@ 60 0x3c
+	.word	do_u4store_2	@ 61 0x3d
+	.word	do_u4store_3	@ 62 0x3e
+	.word	do_u8store_0	@ 63 0x3f
+	.word	do_u8store_1	@ 64 0x40
+	.word	do_u8store_2	@ 65 0x41
+	.word	do_u8store_3	@ 66 0x42
+	.word	do_u4store_0	@ 67 0x43
+	.word	do_u4store_1	@ 68 0x44
+	.word	do_u4store_2	@ 69 0x45
+	.word	do_u4store_3	@ 70 0x46
+	.word	do_u8store_0	@ 71 0x47
+	.word	do_u8store_1	@ 72 0x48
+	.word	do_u8store_2	@ 73 0x49
+	.word	do_u8store_3	@ 74 0x4a
+	.word	do_u4store_0	@ 75 0x4b
+	.word	do_u4store_1	@ 76 0x4c
+	.word	do_u4store_2	@ 77 0x4d
+	.word	do_u4store_3	@ 78 0x4e
+	.word	do_u4astore	@ 79 0x4f
+	.word	do_u8astore	@ 80 0x50
+	.word	do_u4astore	@ 81 0x51
+	.word	do_u8astore	@ 82 0x52
+	.word	do_aastore	@ 83 0x53
+	.word	do_bastore	@ 84 0x54
+	.word	do_u2astore	@ 85 0x55
+	.word	do_u2astore	@ 86 0x56
+	.word	do_jpop	@ 87 0x57
+	.word	do_jpop2	@ 88 0x58
+	.word	do_dup	@ 89 0x59
+	.word	do_dup_x1	@ 90 0x5a
+	.word	do_dup_x2	@ 91 0x5b
+	.word	do_dup2	@ 92 0x5c
+	.word	do_dup2_x1	@ 93 0x5d
+	.word	do_dup2_x2	@ 94 0x5e
+	.word	do_swap	@ 95 0x5f
+	.word	do_iadd	@ 96 0x60
+	.word	do_ladd	@ 97 0x61
+	.word	do_fadd	@ 98 0x62
+	.word	do_dadd	@ 99 0x63
+	.word	do_isub	@ 100 0x64
+	.word	do_lsub	@ 101 0x65
+	.word	do_fsub	@ 102 0x66
+	.word	do_dsub	@ 103 0x67
+	.word	do_imul	@ 104 0x68
+	.word	do_lmul	@ 105 0x69
+	.word	do_fmul	@ 106 0x6a
+	.word	do_dmul	@ 107 0x6b
+	.word	do_idiv	@ 108 0x6c
+	.word	do_ldiv	@ 109 0x6d
+	.word	do_fdiv	@ 110 0x6e
+	.word	do_ddiv	@ 111 0x6f
+	.word	do_irem	@ 112 0x70
+	.word	do_lrem	@ 113 0x71
+	.word	do_frem	@ 114 0x72
+	.word	do_drem	@ 115 0x73
+	.word	do_ineg	@ 116 0x74
+	.word	do_lneg	@ 117 0x75
+	.word	do_fneg	@ 118 0x76
+	.word	do_dneg	@ 119 0x77
+	.word	do_ishl	@ 120 0x78
+	.word	do_lshl	@ 121 0x79
+	.word	do_ishr	@ 122 0x7a
+	.word	do_lshr	@ 123 0x7b
+	.word	do_iushr	@ 124 0x7c
+	.word	do_lushr	@ 125 0x7d
+	.word	do_iand	@ 126 0x7e
+	.word	do_land	@ 127 0x7f
+	.word	do_ior	@ 128 0x80
+	.word	do_lor	@ 129 0x81
+	.word	do_ixor	@ 130 0x82
+	.word	do_lxor	@ 131 0x83
+	.word	do_iinc	@ 132 0x84
+	.word	do_i2l	@ 133 0x85
+	.word	do_i2f	@ 134 0x86
+	.word	do_i2d	@ 135 0x87
+	.word	do_l2i	@ 136 0x88
+	.word	do_l2f	@ 137 0x89
+	.word	do_l2d	@ 138 0x8a
+	.word	do_f2i	@ 139 0x8b
+	.word	do_f2l	@ 140 0x8c
+	.word	do_f2d	@ 141 0x8d
+	.word	do_d2i	@ 142 0x8e
+	.word	do_d2l	@ 143 0x8f
+	.word	do_d2f	@ 144 0x90
+	.word	do_i2b	@ 145 0x91
+	.word	do_i2c	@ 146 0x92
+	.word	do_i2s	@ 147 0x93
+	.word	do_lcmp	@ 148 0x94
+	.word	do_fcmpl	@ 149 0x95
+	.word	do_fcmpg	@ 150 0x96
+	.word	do_dcmpl	@ 151 0x97
+	.word	do_dcmpg	@ 152 0x98
+	.word	do_ifeq	@ 153 0x99
+	.word	do_ifne	@ 154 0x9a
+	.word	do_iflt	@ 155 0x9b
+	.word	do_ifge	@ 156 0x9c
+	.word	do_ifgt	@ 157 0x9d
+	.word	do_ifle	@ 158 0x9e
+	.word	do_if_icmpeq	@ 159 0x9f
+	.word	do_if_icmpne	@ 160 0xa0
+	.word	do_if_icmplt	@ 161 0xa1
+	.word	do_if_icmpge	@ 162 0xa2
+	.word	do_if_icmpgt	@ 163 0xa3
+	.word	do_if_icmple	@ 164 0xa4
+	.word	do_if_icmpeq	@ 165 0xa5
+	.word	do_if_icmpne	@ 166 0xa6
+	.word	do_goto	@ 167 0xa7
+	.word	do_jsr	@ 168 0xa8
+	.word	do_ret	@ 169 0xa9
+	.word	do_tableswitch	@ 170 0xaa
+	.word	do_lookupswitch	@ 171 0xab
+	.word	do_ireturn	@ 172 0xac
+	.word	do_lreturn	@ 173 0xad
+	.word	do_ireturn	@ 174 0xae
+	.word	do_lreturn	@ 175 0xaf
+	.word	do_ireturn	@ 176 0xb0
+	.word	do_return	@ 177 0xb1
+	.word	do_getstatic	@ 178 0xb2
+	.word	do_putstatic	@ 179 0xb3
+	.word	do_getfield	@ 180 0xb4
+	.word	do_putfield	@ 181 0xb5
+	.word	do_invokevirtual	@ 182 0xb6
+	.word	do_invokespecial	@ 183 0xb7
+	.word	do_invokestatic	@ 184 0xb8
+	.word	do_invokeinterface	@ 185 0xb9
+	.word	do_undefined	@ 186 0xba
+	.word	do_new	@ 187 0xbb
+	.word	do_newarray	@ 188 0xbc
+	.word	do_anewarray	@ 189 0xbd
+	.word	do_arraylength	@ 190 0xbe
+	.word	do_athrow	@ 191 0xbf
+	.word	do_checkcast	@ 192 0xc0
+	.word	do_instanceof	@ 193 0xc1
+	.word	do_monitorenter	@ 194 0xc2
+	.word	do_monitorexit	@ 195 0xc3
+	.word	do_wide	@ 196 0xc4
+	.word	do_multianewarray	@ 197 0xc5
+	.word	do_ifeq	@ 198 0xc6
+	.word	do_ifne	@ 199 0xc7
+	.word	do_goto_w	@ 200 0xc8
+	.word	do_jsr_w	@ 201 0xc9
+	.word	do_breakpoint	@ 202 0xca
+	.word	do_undefined	@ 203 0xcb
+	.word	do_bgetfield	@ 204 0xcc
+	.word	do_cgetfield	@ 205 0xcd
+	.word	do_undefined	@ 206 0xce
+	.word	do_undefined	@ 207 0xcf
+	.word	do_igetfield	@ 208 0xd0
+	.word	do_lgetfield	@ 209 0xd1
+	.word	do_sgetfield	@ 210 0xd2
+	.word	do_aputfield	@ 211 0xd3
+	.word	do_bputfield	@ 212 0xd4
+	.word	do_cputfield	@ 213 0xd5
+	.word	do_undefined	@ 214 0xd6
+	.word	do_undefined	@ 215 0xd7
+	.word	do_iputfield	@ 216 0xd8
+	.word	do_lputfield	@ 217 0xd9
+	.word	do_undefined	@ 218 0xda
+	.word	do_iaccess_0	@ 219 0xdb
+	.word	do_iaccess_0	@ 220 0xdc
+	.word	do_iaccess_0	@ 221 0xdd
+	.word	do_iaccess_0	@ 222 0xde
+	.word	do_invokeresolved	@ 223 0xdf
+	.word	do_invokespecialresolved	@ 224 0xe0
+	.word	do_invokestaticresolved	@ 225 0xe1
+	.word	do_invokevfinal	@ 226 0xe2
+	.word	do_fast_iload_iload	@ 227 0xe3
+	.word	do_fast_iload_iload_N	@ 228 0xe4
+	.word	do_undefined	@ 229 0xe5
+	.word	do_undefined	@ 230 0xe6
+	.word	do_return_register_finalizer	@ 231 0xe7
+	.word	do_undefined	@ 232 0xe8
+	.word	do_iload_0_iconst_N	@ 233 0xe9
+	.word	do_iload_0_iconst_N	@ 234 0xea
+	.word	do_iload_0_iconst_N	@ 235 0xeb
+	.word	do_iload_0_iconst_N	@ 236 0xec
+	.word	do_iload_iconst_N	@ 237 0xed
+	.word	do_iadd_istore_N	@ 238 0xee
+	.word	do_isub_istore_N	@ 239 0xef
+	.word	do_iand_istore_N	@ 240 0xf0
+	.word	do_ior_istore_N	@ 241 0xf1
+	.word	do_ixor_istore_N	@ 242 0xf2
+	.word	do_iadd_u4store	@ 243 0xf3
+	.word	do_isub_u4store	@ 244 0xf4
+	.word	do_iand_u4store	@ 245 0xf5
+	.word	do_ior_u4store	@ 246 0xf6
+	.word	do_ixor_u4store	@ 247 0xf7
+	.word	do_fast_iload_N_iload	@ 248 0xf8
+	.word	do_fast_iload_N_iload	@ 249 0xf9
+	.word	do_fast_iload_N_iload	@ 250 0xfa
+	.word	do_fast_iload_N_iload	@ 251 0xfb
+	.word	do_fast_iload_N_iload_N	@ 252 0xfc
+	.word	do_fast_iload_N_iload_N	@ 253 0xfd
+	.word	do_fast_iload_N_iload_N	@ 254 0xfe
+	.word	do_fast_iload_N_iload_N	@ 255 0xff
 #endif

 	SUB_DISPATCH_TABLES
diff -r 79014132e844 -r fc7a57de5179 arm_port/hotspot/src/cpu/zero/vm/thumb2.cpp
--- a/arm_port/hotspot/src/cpu/zero/vm/thumb2.cpp	Tue Jan 10 16:47:52 2012 +0000
+++ b/arm_port/hotspot/src/cpu/zero/vm/thumb2.cpp	Fri Jan 13 10:07:43 2012 -0500
@@ -4404,6 +4404,8 @@

 void Thumb2_Return(Thumb2_Info *jinfo, unsigned opcode, int bci)
 {
+  Thumb2_Safepoint(jinfo, 0, bci);
+
   Reg r_lo, r;
   Thumb2_Stack *jstack = jinfo->jstack;

@@ -4470,8 +4472,6 @@
     cbz_patch(jinfo->codebuf, ARM_R3, loc_success2);
   }

-  Thumb2_Safepoint(jinfo, 0, bci);
-
   if (opcode != opc_return) {
     if (opcode == opc_lreturn || opcode == opc_dreturn) {
       Thumb2_Fill(jinfo, 2);
diff -r 79014132e844 -r fc7a57de5179 arm_port/hotspot/tools/mkbc.c
--- a/arm_port/hotspot/tools/mkbc.c	Tue Jan 10 16:47:52 2012 +0000
+++ b/arm_port/hotspot/tools/mkbc.c	Fri Jan 13 10:07:43 2012 -0500
@@ -399,9 +399,9 @@
 			fprintf(bci_f, "+%d\n", len);
 		} else {
 			if (table[i].impl_name)
-				fprintf(bci_f, "\t.word\t%s%s\n", prefix, table[i].impl_name);
+				fprintf(bci_f, "\t.word\t%s%s \t@ %d 0x%02x\n", prefix, table[i].impl_name, i, i);
 			else
-				fprintf(bci_f, "\t.word\t%s%s\n", prefix, table[i].def_name);
+				fprintf(bci_f, "\t.word\t%s%s \t@ %d 0x%02x\n", prefix, table[i].def_name, i, i);
 		}
 	}
 	if (depth == 0) {
@@ -416,7 +416,7 @@
 				fputc('_', bci_f);
 				fputs(bytecodes[table_indices[j]].name, bci_f);
 			}
-			fputs(":\n", bci_f);
+			fprintf(bci_f, ":\t@ %d 0x%02x\n", i, i);
 			remove_duplicates(table, i, table_indices, depth);
 			writeouttable(table[i].subtable, table_indices, depth+1);
 		}



More information about the distro-pkg-dev mailing list