83 } |
84 } |
84 return NULL; |
85 return NULL; |
85 } |
86 } |
86 |
87 |
87 extern "C" { |
88 extern "C" { |
88 extern VMStructEntry* gHotSpotVMStructs; |
89 extern VMStructEntry* jvmciHotSpotVMStructs; |
89 extern uint64_t gHotSpotVMStructEntryTypeNameOffset; |
90 extern uint64_t jvmciHotSpotVMStructEntryTypeNameOffset; |
90 extern uint64_t gHotSpotVMStructEntryFieldNameOffset; |
91 extern uint64_t jvmciHotSpotVMStructEntryFieldNameOffset; |
91 extern uint64_t gHotSpotVMStructEntryTypeStringOffset; |
92 extern uint64_t jvmciHotSpotVMStructEntryTypeStringOffset; |
92 extern uint64_t gHotSpotVMStructEntryIsStaticOffset; |
93 extern uint64_t jvmciHotSpotVMStructEntryIsStaticOffset; |
93 extern uint64_t gHotSpotVMStructEntryOffsetOffset; |
94 extern uint64_t jvmciHotSpotVMStructEntryOffsetOffset; |
94 extern uint64_t gHotSpotVMStructEntryAddressOffset; |
95 extern uint64_t jvmciHotSpotVMStructEntryAddressOffset; |
95 extern uint64_t gHotSpotVMStructEntryArrayStride; |
96 extern uint64_t jvmciHotSpotVMStructEntryArrayStride; |
96 |
97 |
97 extern VMTypeEntry* gHotSpotVMTypes; |
98 extern VMTypeEntry* jvmciHotSpotVMTypes; |
98 extern uint64_t gHotSpotVMTypeEntryTypeNameOffset; |
99 extern uint64_t jvmciHotSpotVMTypeEntryTypeNameOffset; |
99 extern uint64_t gHotSpotVMTypeEntrySuperclassNameOffset; |
100 extern uint64_t jvmciHotSpotVMTypeEntrySuperclassNameOffset; |
100 extern uint64_t gHotSpotVMTypeEntryIsOopTypeOffset; |
101 extern uint64_t jvmciHotSpotVMTypeEntryIsOopTypeOffset; |
101 extern uint64_t gHotSpotVMTypeEntryIsIntegerTypeOffset; |
102 extern uint64_t jvmciHotSpotVMTypeEntryIsIntegerTypeOffset; |
102 extern uint64_t gHotSpotVMTypeEntryIsUnsignedOffset; |
103 extern uint64_t jvmciHotSpotVMTypeEntryIsUnsignedOffset; |
103 extern uint64_t gHotSpotVMTypeEntrySizeOffset; |
104 extern uint64_t jvmciHotSpotVMTypeEntrySizeOffset; |
104 extern uint64_t gHotSpotVMTypeEntryArrayStride; |
105 extern uint64_t jvmciHotSpotVMTypeEntryArrayStride; |
105 |
106 |
106 extern VMIntConstantEntry* gHotSpotVMIntConstants; |
107 extern VMIntConstantEntry* jvmciHotSpotVMIntConstants; |
107 extern uint64_t gHotSpotVMIntConstantEntryNameOffset; |
108 extern uint64_t jvmciHotSpotVMIntConstantEntryNameOffset; |
108 extern uint64_t gHotSpotVMIntConstantEntryValueOffset; |
109 extern uint64_t jvmciHotSpotVMIntConstantEntryValueOffset; |
109 extern uint64_t gHotSpotVMIntConstantEntryArrayStride; |
110 extern uint64_t jvmciHotSpotVMIntConstantEntryArrayStride; |
110 |
111 |
111 extern VMLongConstantEntry* gHotSpotVMLongConstants; |
112 extern VMLongConstantEntry* jvmciHotSpotVMLongConstants; |
112 extern uint64_t gHotSpotVMLongConstantEntryNameOffset; |
113 extern uint64_t jvmciHotSpotVMLongConstantEntryNameOffset; |
113 extern uint64_t gHotSpotVMLongConstantEntryValueOffset; |
114 extern uint64_t jvmciHotSpotVMLongConstantEntryValueOffset; |
114 extern uint64_t gHotSpotVMLongConstantEntryArrayStride; |
115 extern uint64_t jvmciHotSpotVMLongConstantEntryArrayStride; |
115 |
116 |
116 extern VMAddressEntry* gHotSpotVMAddresses; |
117 extern VMAddressEntry* jvmciHotSpotVMAddresses; |
117 extern uint64_t gHotSpotVMAddressEntryNameOffset; |
118 extern uint64_t jvmciHotSpotVMAddressEntryNameOffset; |
118 extern uint64_t gHotSpotVMAddressEntryValueOffset; |
119 extern uint64_t jvmciHotSpotVMAddressEntryValueOffset; |
119 extern uint64_t gHotSpotVMAddressEntryArrayStride; |
120 extern uint64_t jvmciHotSpotVMAddressEntryArrayStride; |
120 } |
121 } |
121 |
122 |
122 // FIXME This is only temporary until the GC code is changed. |
123 int CompilerToVM::Data::InstanceKlass_vtable_start_offset; |
123 bool CompilerToVM::_supports_inline_contig_alloc; |
124 int CompilerToVM::Data::InstanceKlass_vtable_length_offset; |
124 HeapWord** CompilerToVM::_heap_end_addr; |
125 |
125 HeapWord** CompilerToVM::_heap_top_addr; |
126 int CompilerToVM::Data::Method_extra_stack_entries; |
|
127 |
|
128 address CompilerToVM::Data::SharedRuntime_ic_miss_stub; |
|
129 address CompilerToVM::Data::SharedRuntime_handle_wrong_method_stub; |
|
130 address CompilerToVM::Data::SharedRuntime_deopt_blob_unpack; |
|
131 address CompilerToVM::Data::SharedRuntime_deopt_blob_uncommon_trap; |
|
132 |
|
133 size_t CompilerToVM::Data::ThreadLocalAllocBuffer_alignment_reserve; |
|
134 |
|
135 CollectedHeap* CompilerToVM::Data::Universe_collectedHeap; |
|
136 int CompilerToVM::Data::Universe_base_vtable_size; |
|
137 address CompilerToVM::Data::Universe_narrow_oop_base; |
|
138 int CompilerToVM::Data::Universe_narrow_oop_shift; |
|
139 address CompilerToVM::Data::Universe_narrow_klass_base; |
|
140 int CompilerToVM::Data::Universe_narrow_klass_shift; |
|
141 void* CompilerToVM::Data::Universe_non_oop_bits; |
|
142 uintptr_t CompilerToVM::Data::Universe_verify_oop_mask; |
|
143 uintptr_t CompilerToVM::Data::Universe_verify_oop_bits; |
|
144 |
|
145 bool CompilerToVM::Data::_supports_inline_contig_alloc; |
|
146 HeapWord** CompilerToVM::Data::_heap_end_addr; |
|
147 HeapWord** CompilerToVM::Data::_heap_top_addr; |
|
148 |
|
149 jbyte* CompilerToVM::Data::cardtable_start_address; |
|
150 int CompilerToVM::Data::cardtable_shift; |
|
151 |
|
152 void CompilerToVM::Data::initialize() { |
|
153 InstanceKlass_vtable_start_offset = InstanceKlass::vtable_start_offset(); |
|
154 InstanceKlass_vtable_length_offset = InstanceKlass::vtable_length_offset() * HeapWordSize; |
|
155 |
|
156 Method_extra_stack_entries = Method::extra_stack_entries(); |
|
157 |
|
158 SharedRuntime_ic_miss_stub = SharedRuntime::get_ic_miss_stub(); |
|
159 SharedRuntime_handle_wrong_method_stub = SharedRuntime::get_handle_wrong_method_stub(); |
|
160 SharedRuntime_deopt_blob_unpack = SharedRuntime::deopt_blob()->unpack(); |
|
161 SharedRuntime_deopt_blob_uncommon_trap = SharedRuntime::deopt_blob()->uncommon_trap(); |
|
162 |
|
163 ThreadLocalAllocBuffer_alignment_reserve = ThreadLocalAllocBuffer::alignment_reserve(); |
|
164 |
|
165 Universe_collectedHeap = Universe::heap(); |
|
166 Universe_base_vtable_size = Universe::base_vtable_size(); |
|
167 Universe_narrow_oop_base = Universe::narrow_oop_base(); |
|
168 Universe_narrow_oop_shift = Universe::narrow_oop_shift(); |
|
169 Universe_narrow_klass_base = Universe::narrow_klass_base(); |
|
170 Universe_narrow_klass_shift = Universe::narrow_klass_shift(); |
|
171 Universe_non_oop_bits = Universe::non_oop_word(); |
|
172 Universe_verify_oop_mask = Universe::verify_oop_mask(); |
|
173 Universe_verify_oop_bits = Universe::verify_oop_bits(); |
|
174 |
|
175 _supports_inline_contig_alloc = Universe::heap()->supports_inline_contig_alloc(); |
|
176 _heap_end_addr = _supports_inline_contig_alloc ? Universe::heap()->end_addr() : (HeapWord**) -1; |
|
177 _heap_top_addr = _supports_inline_contig_alloc ? Universe::heap()->top_addr() : (HeapWord**) -1; |
|
178 |
|
179 BarrierSet* bs = Universe::heap()->barrier_set(); |
|
180 switch (bs->kind()) { |
|
181 case BarrierSet::CardTableModRef: |
|
182 case BarrierSet::CardTableForRS: |
|
183 case BarrierSet::CardTableExtension: |
|
184 case BarrierSet::G1SATBCT: |
|
185 case BarrierSet::G1SATBCTLogging: { |
|
186 jbyte* base = barrier_set_cast<CardTableModRefBS>(bs)->byte_map_base; |
|
187 assert(base != 0, "unexpected byte_map_base"); |
|
188 cardtable_start_address = base; |
|
189 cardtable_shift = CardTableModRefBS::card_shift; |
|
190 break; |
|
191 } |
|
192 case BarrierSet::ModRef: |
|
193 cardtable_start_address = 0; |
|
194 cardtable_shift = 0; |
|
195 // No post barriers |
|
196 break; |
|
197 default: |
|
198 ShouldNotReachHere(); |
|
199 break; |
|
200 } |
|
201 } |
126 |
202 |
127 /** |
203 /** |
128 * We put all gHotSpotVM values in an array so we can read them easily from Java. |
204 * We put all jvmciHotSpotVM values in an array so we can read them easily from Java. |
129 */ |
205 */ |
130 static uintptr_t ciHotSpotVMData[28]; |
206 static uintptr_t ciHotSpotVMData[28]; |
131 |
207 |
132 C2V_VMENTRY(jlong, initializeConfiguration, (JNIEnv *env, jobject)) |
208 C2V_VMENTRY(jlong, initializeConfiguration, (JNIEnv *env, jobject)) |
133 ciHotSpotVMData[0] = (uintptr_t) gHotSpotVMStructs; |
209 ciHotSpotVMData[0] = (uintptr_t) jvmciHotSpotVMStructs; |
134 ciHotSpotVMData[1] = gHotSpotVMStructEntryTypeNameOffset; |
210 ciHotSpotVMData[1] = jvmciHotSpotVMStructEntryTypeNameOffset; |
135 ciHotSpotVMData[2] = gHotSpotVMStructEntryFieldNameOffset; |
211 ciHotSpotVMData[2] = jvmciHotSpotVMStructEntryFieldNameOffset; |
136 ciHotSpotVMData[3] = gHotSpotVMStructEntryTypeStringOffset; |
212 ciHotSpotVMData[3] = jvmciHotSpotVMStructEntryTypeStringOffset; |
137 ciHotSpotVMData[4] = gHotSpotVMStructEntryIsStaticOffset; |
213 ciHotSpotVMData[4] = jvmciHotSpotVMStructEntryIsStaticOffset; |
138 ciHotSpotVMData[5] = gHotSpotVMStructEntryOffsetOffset; |
214 ciHotSpotVMData[5] = jvmciHotSpotVMStructEntryOffsetOffset; |
139 ciHotSpotVMData[6] = gHotSpotVMStructEntryAddressOffset; |
215 ciHotSpotVMData[6] = jvmciHotSpotVMStructEntryAddressOffset; |
140 ciHotSpotVMData[7] = gHotSpotVMStructEntryArrayStride; |
216 ciHotSpotVMData[7] = jvmciHotSpotVMStructEntryArrayStride; |
141 |
217 |
142 ciHotSpotVMData[8] = (uintptr_t) gHotSpotVMTypes; |
218 ciHotSpotVMData[8] = (uintptr_t) jvmciHotSpotVMTypes; |
143 ciHotSpotVMData[9] = gHotSpotVMTypeEntryTypeNameOffset; |
219 ciHotSpotVMData[9] = jvmciHotSpotVMTypeEntryTypeNameOffset; |
144 ciHotSpotVMData[10] = gHotSpotVMTypeEntrySuperclassNameOffset; |
220 ciHotSpotVMData[10] = jvmciHotSpotVMTypeEntrySuperclassNameOffset; |
145 ciHotSpotVMData[11] = gHotSpotVMTypeEntryIsOopTypeOffset; |
221 ciHotSpotVMData[11] = jvmciHotSpotVMTypeEntryIsOopTypeOffset; |
146 ciHotSpotVMData[12] = gHotSpotVMTypeEntryIsIntegerTypeOffset; |
222 ciHotSpotVMData[12] = jvmciHotSpotVMTypeEntryIsIntegerTypeOffset; |
147 ciHotSpotVMData[13] = gHotSpotVMTypeEntryIsUnsignedOffset; |
223 ciHotSpotVMData[13] = jvmciHotSpotVMTypeEntryIsUnsignedOffset; |
148 ciHotSpotVMData[14] = gHotSpotVMTypeEntrySizeOffset; |
224 ciHotSpotVMData[14] = jvmciHotSpotVMTypeEntrySizeOffset; |
149 ciHotSpotVMData[15] = gHotSpotVMTypeEntryArrayStride; |
225 ciHotSpotVMData[15] = jvmciHotSpotVMTypeEntryArrayStride; |
150 |
226 |
151 ciHotSpotVMData[16] = (uintptr_t) gHotSpotVMIntConstants; |
227 ciHotSpotVMData[16] = (uintptr_t) jvmciHotSpotVMIntConstants; |
152 ciHotSpotVMData[17] = gHotSpotVMIntConstantEntryNameOffset; |
228 ciHotSpotVMData[17] = jvmciHotSpotVMIntConstantEntryNameOffset; |
153 ciHotSpotVMData[18] = gHotSpotVMIntConstantEntryValueOffset; |
229 ciHotSpotVMData[18] = jvmciHotSpotVMIntConstantEntryValueOffset; |
154 ciHotSpotVMData[19] = gHotSpotVMIntConstantEntryArrayStride; |
230 ciHotSpotVMData[19] = jvmciHotSpotVMIntConstantEntryArrayStride; |
155 |
231 |
156 ciHotSpotVMData[20] = (uintptr_t) gHotSpotVMLongConstants; |
232 ciHotSpotVMData[20] = (uintptr_t) jvmciHotSpotVMLongConstants; |
157 ciHotSpotVMData[21] = gHotSpotVMLongConstantEntryNameOffset; |
233 ciHotSpotVMData[21] = jvmciHotSpotVMLongConstantEntryNameOffset; |
158 ciHotSpotVMData[22] = gHotSpotVMLongConstantEntryValueOffset; |
234 ciHotSpotVMData[22] = jvmciHotSpotVMLongConstantEntryValueOffset; |
159 ciHotSpotVMData[23] = gHotSpotVMLongConstantEntryArrayStride; |
235 ciHotSpotVMData[23] = jvmciHotSpotVMLongConstantEntryArrayStride; |
160 |
236 |
161 ciHotSpotVMData[24] = (uintptr_t) gHotSpotVMAddresses; |
237 ciHotSpotVMData[24] = (uintptr_t) jvmciHotSpotVMAddresses; |
162 ciHotSpotVMData[25] = gHotSpotVMAddressEntryNameOffset; |
238 ciHotSpotVMData[25] = jvmciHotSpotVMAddressEntryNameOffset; |
163 ciHotSpotVMData[26] = gHotSpotVMAddressEntryValueOffset; |
239 ciHotSpotVMData[26] = jvmciHotSpotVMAddressEntryValueOffset; |
164 ciHotSpotVMData[27] = gHotSpotVMAddressEntryArrayStride; |
240 ciHotSpotVMData[27] = jvmciHotSpotVMAddressEntryArrayStride; |
165 |
241 |
166 // FIXME This is only temporary until the GC code is changed. |
242 CompilerToVM::Data::initialize(); |
167 CompilerToVM::_supports_inline_contig_alloc = Universe::heap()->supports_inline_contig_alloc(); |
|
168 CompilerToVM::_heap_end_addr = CompilerToVM::_supports_inline_contig_alloc ? Universe::heap()->end_addr() : (HeapWord**) -1; |
|
169 CompilerToVM::_heap_top_addr = CompilerToVM::_supports_inline_contig_alloc ? Universe::heap()->top_addr() : (HeapWord**) -1; |
|
170 |
243 |
171 return (jlong) (address) &ciHotSpotVMData; |
244 return (jlong) (address) &ciHotSpotVMData; |
172 C2V_END |
245 C2V_END |
173 |
246 |
174 C2V_VMENTRY(jbyteArray, getBytecode, (JNIEnv *, jobject, jobject jvmci_method)) |
247 C2V_VMENTRY(jbyteArray, getBytecode, (JNIEnv *, jobject, jobject jvmci_method)) |