src/cpu/sparc/vm/register_definitions_sparc.cpp

Thu, 07 Apr 2011 09:53:20 -0700

author
johnc
date
Thu, 07 Apr 2011 09:53:20 -0700
changeset 2781
e1162778c1c8
parent 2314
f95d63e2154a
child 6876
710a3c8b516e
permissions
-rw-r--r--

7009266: G1: assert(obj->is_oop_or_null(true )) failed: Error
Summary: A referent object that is only weakly reachable at the start of concurrent marking but is re-attached to the strongly reachable object graph during marking may not be marked as live. This can cause the reference object to be processed prematurely and leave dangling pointers to the referent object. Implement a read barrier for the java.lang.ref.Reference::referent field by intrinsifying the Reference.get() method, and intercepting accesses though JNI, reflection, and Unsafe, so that when a non-null referent object is read it is also logged in an SATB buffer.
Reviewed-by: kvn, iveresov, never, tonyp, dholmes

duke@435 1 /*
jrose@1934 2 * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved.
duke@435 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
duke@435 4 *
duke@435 5 * This code is free software; you can redistribute it and/or modify it
duke@435 6 * under the terms of the GNU General Public License version 2 only, as
duke@435 7 * published by the Free Software Foundation.
duke@435 8 *
duke@435 9 * This code is distributed in the hope that it will be useful, but WITHOUT
duke@435 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
duke@435 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
duke@435 12 * version 2 for more details (a copy is included in the LICENSE file that
duke@435 13 * accompanied this code).
duke@435 14 *
duke@435 15 * You should have received a copy of the GNU General Public License version
duke@435 16 * 2 along with this work; if not, write to the Free Software Foundation,
duke@435 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
duke@435 18 *
trims@1907 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
trims@1907 20 * or visit www.oracle.com if you need additional information or have any
trims@1907 21 * questions.
duke@435 22 *
duke@435 23 */
duke@435 24
duke@435 25 // make sure the defines don't screw up the declarations later on in this file
duke@435 26 #define DONT_USE_REGISTER_DEFINES
duke@435 27
stefank@2314 28 #include "precompiled.hpp"
stefank@2314 29 #include "asm/assembler.hpp"
stefank@2314 30 #include "asm/register.hpp"
stefank@2314 31 #include "interp_masm_sparc.hpp"
stefank@2314 32 #include "register_sparc.hpp"
duke@435 33
duke@435 34 REGISTER_DEFINITION(Register, noreg);
duke@435 35
duke@435 36 REGISTER_DEFINITION(Register, G0);
duke@435 37 REGISTER_DEFINITION(Register, G1);
duke@435 38 REGISTER_DEFINITION(Register, G2);
duke@435 39 REGISTER_DEFINITION(Register, G3);
duke@435 40 REGISTER_DEFINITION(Register, G4);
duke@435 41 REGISTER_DEFINITION(Register, G5);
duke@435 42 REGISTER_DEFINITION(Register, G6);
duke@435 43 REGISTER_DEFINITION(Register, G7);
duke@435 44
duke@435 45 REGISTER_DEFINITION(Register, O0);
duke@435 46 REGISTER_DEFINITION(Register, O1);
duke@435 47 REGISTER_DEFINITION(Register, O2);
duke@435 48 REGISTER_DEFINITION(Register, O3);
duke@435 49 REGISTER_DEFINITION(Register, O4);
duke@435 50 REGISTER_DEFINITION(Register, O5);
duke@435 51 REGISTER_DEFINITION(Register, O6);
duke@435 52 REGISTER_DEFINITION(Register, O7);
duke@435 53
duke@435 54 REGISTER_DEFINITION(Register, L0);
duke@435 55 REGISTER_DEFINITION(Register, L1);
duke@435 56 REGISTER_DEFINITION(Register, L2);
duke@435 57 REGISTER_DEFINITION(Register, L3);
duke@435 58 REGISTER_DEFINITION(Register, L4);
duke@435 59 REGISTER_DEFINITION(Register, L5);
duke@435 60 REGISTER_DEFINITION(Register, L6);
duke@435 61 REGISTER_DEFINITION(Register, L7);
duke@435 62
duke@435 63 REGISTER_DEFINITION(Register, I0);
duke@435 64 REGISTER_DEFINITION(Register, I1);
duke@435 65 REGISTER_DEFINITION(Register, I2);
duke@435 66 REGISTER_DEFINITION(Register, I3);
duke@435 67 REGISTER_DEFINITION(Register, I4);
duke@435 68 REGISTER_DEFINITION(Register, I5);
duke@435 69 REGISTER_DEFINITION(Register, I6);
duke@435 70 REGISTER_DEFINITION(Register, I7);
duke@435 71
duke@435 72 REGISTER_DEFINITION(Register, FP);
duke@435 73 REGISTER_DEFINITION(Register, SP);
duke@435 74
duke@435 75 REGISTER_DEFINITION(FloatRegister, fnoreg);
duke@435 76 REGISTER_DEFINITION(FloatRegister, F0);
duke@435 77 REGISTER_DEFINITION(FloatRegister, F1);
duke@435 78 REGISTER_DEFINITION(FloatRegister, F2);
duke@435 79 REGISTER_DEFINITION(FloatRegister, F3);
duke@435 80 REGISTER_DEFINITION(FloatRegister, F4);
duke@435 81 REGISTER_DEFINITION(FloatRegister, F5);
duke@435 82 REGISTER_DEFINITION(FloatRegister, F6);
duke@435 83 REGISTER_DEFINITION(FloatRegister, F7);
duke@435 84 REGISTER_DEFINITION(FloatRegister, F8);
duke@435 85 REGISTER_DEFINITION(FloatRegister, F9);
duke@435 86 REGISTER_DEFINITION(FloatRegister, F10);
duke@435 87 REGISTER_DEFINITION(FloatRegister, F11);
duke@435 88 REGISTER_DEFINITION(FloatRegister, F12);
duke@435 89 REGISTER_DEFINITION(FloatRegister, F13);
duke@435 90 REGISTER_DEFINITION(FloatRegister, F14);
duke@435 91 REGISTER_DEFINITION(FloatRegister, F15);
duke@435 92 REGISTER_DEFINITION(FloatRegister, F16);
duke@435 93 REGISTER_DEFINITION(FloatRegister, F17);
duke@435 94 REGISTER_DEFINITION(FloatRegister, F18);
duke@435 95 REGISTER_DEFINITION(FloatRegister, F19);
duke@435 96 REGISTER_DEFINITION(FloatRegister, F20);
duke@435 97 REGISTER_DEFINITION(FloatRegister, F21);
duke@435 98 REGISTER_DEFINITION(FloatRegister, F22);
duke@435 99 REGISTER_DEFINITION(FloatRegister, F23);
duke@435 100 REGISTER_DEFINITION(FloatRegister, F24);
duke@435 101 REGISTER_DEFINITION(FloatRegister, F25);
duke@435 102 REGISTER_DEFINITION(FloatRegister, F26);
duke@435 103 REGISTER_DEFINITION(FloatRegister, F27);
duke@435 104 REGISTER_DEFINITION(FloatRegister, F28);
duke@435 105 REGISTER_DEFINITION(FloatRegister, F29);
duke@435 106 REGISTER_DEFINITION(FloatRegister, F30);
duke@435 107 REGISTER_DEFINITION(FloatRegister, F31);
duke@435 108 REGISTER_DEFINITION(FloatRegister, F32);
duke@435 109 REGISTER_DEFINITION(FloatRegister, F34);
duke@435 110 REGISTER_DEFINITION(FloatRegister, F36);
duke@435 111 REGISTER_DEFINITION(FloatRegister, F38);
duke@435 112 REGISTER_DEFINITION(FloatRegister, F40);
duke@435 113 REGISTER_DEFINITION(FloatRegister, F42);
duke@435 114 REGISTER_DEFINITION(FloatRegister, F44);
duke@435 115 REGISTER_DEFINITION(FloatRegister, F46);
duke@435 116 REGISTER_DEFINITION(FloatRegister, F48);
duke@435 117 REGISTER_DEFINITION(FloatRegister, F50);
duke@435 118 REGISTER_DEFINITION(FloatRegister, F52);
duke@435 119 REGISTER_DEFINITION(FloatRegister, F54);
duke@435 120 REGISTER_DEFINITION(FloatRegister, F56);
duke@435 121 REGISTER_DEFINITION(FloatRegister, F58);
duke@435 122 REGISTER_DEFINITION(FloatRegister, F60);
duke@435 123 REGISTER_DEFINITION(FloatRegister, F62);
duke@435 124
duke@435 125
duke@435 126 REGISTER_DEFINITION( Register, Otos_i);
duke@435 127 REGISTER_DEFINITION( Register, Otos_l);
duke@435 128 REGISTER_DEFINITION( Register, Otos_l1);
duke@435 129 REGISTER_DEFINITION( Register, Otos_l2);
duke@435 130 REGISTER_DEFINITION(FloatRegister, Ftos_f);
duke@435 131 REGISTER_DEFINITION(FloatRegister, Ftos_d);
duke@435 132 REGISTER_DEFINITION(FloatRegister, Ftos_d1);
duke@435 133 REGISTER_DEFINITION(FloatRegister, Ftos_d2);
duke@435 134
duke@435 135
duke@435 136 REGISTER_DEFINITION(Register, G2_thread);
coleenp@548 137 REGISTER_DEFINITION(Register, G6_heapbase);
duke@435 138 REGISTER_DEFINITION(Register, G5_method);
duke@435 139 REGISTER_DEFINITION(Register, G5_megamorphic_method);
duke@435 140 REGISTER_DEFINITION(Register, G5_inline_cache_reg);
duke@435 141 REGISTER_DEFINITION(Register, Gargs);
duke@435 142 REGISTER_DEFINITION(Register, L7_thread_cache);
duke@435 143 REGISTER_DEFINITION(Register, Gframe_size);
duke@435 144 REGISTER_DEFINITION(Register, G1_scratch);
duke@435 145 REGISTER_DEFINITION(Register, G3_scratch);
duke@435 146 REGISTER_DEFINITION(Register, G4_scratch);
duke@435 147 REGISTER_DEFINITION(Register, Gtemp);
twisti@1919 148 REGISTER_DEFINITION(Register, Lentry_args);
twisti@1919 149
twisti@1919 150 // JSR 292
jrose@1145 151 REGISTER_DEFINITION(Register, G5_method_type);
jrose@1145 152 REGISTER_DEFINITION(Register, G3_method_handle);
twisti@1919 153 REGISTER_DEFINITION(Register, L7_mh_SP_save);
duke@435 154
duke@435 155 #ifdef CC_INTERP
duke@435 156 REGISTER_DEFINITION(Register, Lstate);
duke@435 157 REGISTER_DEFINITION(Register, L1_scratch);
duke@435 158 REGISTER_DEFINITION(Register, Lmirror);
duke@435 159 REGISTER_DEFINITION(Register, L2_scratch);
duke@435 160 REGISTER_DEFINITION(Register, L3_scratch);
duke@435 161 REGISTER_DEFINITION(Register, L4_scratch);
duke@435 162 REGISTER_DEFINITION(Register, Lscratch);
duke@435 163 REGISTER_DEFINITION(Register, Lscratch2);
duke@435 164 REGISTER_DEFINITION(Register, L7_scratch);
duke@435 165 REGISTER_DEFINITION(Register, I5_savedSP);
duke@435 166 #else // CC_INTERP
duke@435 167 REGISTER_DEFINITION(Register, Lesp);
duke@435 168 REGISTER_DEFINITION(Register, Lbcp);
duke@435 169 REGISTER_DEFINITION(Register, Lmonitors);
duke@435 170 REGISTER_DEFINITION(Register, Lbyte_code);
duke@435 171 REGISTER_DEFINITION(Register, Llast_SP);
duke@435 172 REGISTER_DEFINITION(Register, Lscratch);
duke@435 173 REGISTER_DEFINITION(Register, Lscratch2);
duke@435 174 REGISTER_DEFINITION(Register, LcpoolCache);
duke@435 175 REGISTER_DEFINITION(Register, I5_savedSP);
duke@435 176 REGISTER_DEFINITION(Register, O5_savedSP);
duke@435 177 REGISTER_DEFINITION(Register, IdispatchAddress);
duke@435 178 REGISTER_DEFINITION(Register, ImethodDataPtr);
duke@435 179 REGISTER_DEFINITION(Register, IdispatchTables);
duke@435 180 #endif // CC_INTERP
duke@435 181 REGISTER_DEFINITION(Register, Lmethod);
duke@435 182 REGISTER_DEFINITION(Register, Llocals);
duke@435 183 REGISTER_DEFINITION(Register, Oexception);
duke@435 184 REGISTER_DEFINITION(Register, Oissuing_pc);

mercurial