mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-27 23:04:50 +02:00
8237497: vmStructs_jvmci.cpp does not check that the correct field type is specified
Add missed checks for declarations in vmStructs_jvmci.cpp Reviewed-by: iklam, thartmann
This commit is contained in:
parent
5110de6c1f
commit
d01f67193f
7 changed files with 140 additions and 169 deletions
|
@ -106,11 +106,6 @@
|
|||
#include OS_HEADER(vmStructs)
|
||||
#include OS_CPU_HEADER(vmStructs)
|
||||
|
||||
#if INCLUDE_JVMCI
|
||||
# include "jvmci/vmStructs_jvmci.hpp"
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef COMPILER2
|
||||
#include "opto/addnode.hpp"
|
||||
#include "opto/block.hpp"
|
||||
|
@ -2682,16 +2677,10 @@ typedef HashtableEntry<InstanceKlass*, mtClass> KlassHashtableEntry;
|
|||
# define GENERATE_NONPRODUCT_NONSTATIC_VM_STRUCT_ENTRY(a, b, c) GENERATE_NONSTATIC_VM_STRUCT_ENTRY(a, b, c)
|
||||
# define CHECK_NONPRODUCT_NONSTATIC_VM_STRUCT_ENTRY(a, b, c) CHECK_NONSTATIC_VM_STRUCT_ENTRY(a, b, c)
|
||||
# define ENSURE_NONPRODUCT_FIELD_TYPE_PRESENT(a, b, c) ENSURE_FIELD_TYPE_PRESENT(a, b, c)
|
||||
# define GENERATE_NONPRODUCT_NONSTATIC_VM_STRUCT_ENTRY(a, b, c) GENERATE_NONSTATIC_VM_STRUCT_ENTRY(a, b, c)
|
||||
# define CHECK_NONPRODUCT_NONSTATIC_VM_STRUCT_ENTRY(a, b, c) CHECK_NONSTATIC_VM_STRUCT_ENTRY(a, b, c)
|
||||
# define ENSURE_NONPRODUCT_FIELD_TYPE_PRESENT(a, b, c) ENSURE_FIELD_TYPE_PRESENT(a, b, c)
|
||||
#else
|
||||
# define GENERATE_NONPRODUCT_NONSTATIC_VM_STRUCT_ENTRY(a, b, c)
|
||||
# define CHECK_NONPRODUCT_NONSTATIC_VM_STRUCT_ENTRY(a, b, c)
|
||||
# define ENSURE_NONPRODUCT_FIELD_TYPE_PRESENT(a, b, c)
|
||||
# define GENERATE_NONPRODUCT_NONSTATIC_VM_STRUCT_ENTRY(a, b, c)
|
||||
# define CHECK_NONPRODUCT_NONSTATIC_VM_STRUCT_ENTRY(a, b, c)
|
||||
# define ENSURE_NONPRODUCT_FIELD_TYPE_PRESENT(a, b, c)
|
||||
#endif /* PRODUCT */
|
||||
|
||||
// Generate and check a nonstatic field in C1 builds
|
||||
|
@ -2963,10 +2952,43 @@ size_t VMStructs::localHotSpotVMLongConstantsLength() {
|
|||
return sizeof(localHotSpotVMLongConstants) / sizeof(VMLongConstantEntry);
|
||||
}
|
||||
|
||||
// This is used both to check the types of referenced fields and, in
|
||||
// debug builds, to ensure that all of the field types are present.
|
||||
void
|
||||
VMStructs::init() {
|
||||
extern "C" {
|
||||
|
||||
#define STRIDE(array) ((char*)&array[1] - (char*)&array[0])
|
||||
|
||||
JNIEXPORT VMStructEntry* gHotSpotVMStructs = VMStructs::localHotSpotVMStructs;
|
||||
JNIEXPORT uint64_t gHotSpotVMStructEntryTypeNameOffset = offset_of(VMStructEntry, typeName);
|
||||
JNIEXPORT uint64_t gHotSpotVMStructEntryFieldNameOffset = offset_of(VMStructEntry, fieldName);
|
||||
JNIEXPORT uint64_t gHotSpotVMStructEntryTypeStringOffset = offset_of(VMStructEntry, typeString);
|
||||
JNIEXPORT uint64_t gHotSpotVMStructEntryIsStaticOffset = offset_of(VMStructEntry, isStatic);
|
||||
JNIEXPORT uint64_t gHotSpotVMStructEntryOffsetOffset = offset_of(VMStructEntry, offset);
|
||||
JNIEXPORT uint64_t gHotSpotVMStructEntryAddressOffset = offset_of(VMStructEntry, address);
|
||||
JNIEXPORT uint64_t gHotSpotVMStructEntryArrayStride = STRIDE(gHotSpotVMStructs);
|
||||
|
||||
JNIEXPORT VMTypeEntry* gHotSpotVMTypes = VMStructs::localHotSpotVMTypes;
|
||||
JNIEXPORT uint64_t gHotSpotVMTypeEntryTypeNameOffset = offset_of(VMTypeEntry, typeName);
|
||||
JNIEXPORT uint64_t gHotSpotVMTypeEntrySuperclassNameOffset = offset_of(VMTypeEntry, superclassName);
|
||||
JNIEXPORT uint64_t gHotSpotVMTypeEntryIsOopTypeOffset = offset_of(VMTypeEntry, isOopType);
|
||||
JNIEXPORT uint64_t gHotSpotVMTypeEntryIsIntegerTypeOffset = offset_of(VMTypeEntry, isIntegerType);
|
||||
JNIEXPORT uint64_t gHotSpotVMTypeEntryIsUnsignedOffset = offset_of(VMTypeEntry, isUnsigned);
|
||||
JNIEXPORT uint64_t gHotSpotVMTypeEntrySizeOffset = offset_of(VMTypeEntry, size);
|
||||
JNIEXPORT uint64_t gHotSpotVMTypeEntryArrayStride = STRIDE(gHotSpotVMTypes);
|
||||
|
||||
JNIEXPORT VMIntConstantEntry* gHotSpotVMIntConstants = VMStructs::localHotSpotVMIntConstants;
|
||||
JNIEXPORT uint64_t gHotSpotVMIntConstantEntryNameOffset = offset_of(VMIntConstantEntry, name);
|
||||
JNIEXPORT uint64_t gHotSpotVMIntConstantEntryValueOffset = offset_of(VMIntConstantEntry, value);
|
||||
JNIEXPORT uint64_t gHotSpotVMIntConstantEntryArrayStride = STRIDE(gHotSpotVMIntConstants);
|
||||
|
||||
JNIEXPORT VMLongConstantEntry* gHotSpotVMLongConstants = VMStructs::localHotSpotVMLongConstants;
|
||||
JNIEXPORT uint64_t gHotSpotVMLongConstantEntryNameOffset = offset_of(VMLongConstantEntry, name);
|
||||
JNIEXPORT uint64_t gHotSpotVMLongConstantEntryValueOffset = offset_of(VMLongConstantEntry, value);
|
||||
JNIEXPORT uint64_t gHotSpotVMLongConstantEntryArrayStride = STRIDE(gHotSpotVMLongConstants);
|
||||
} // "C"
|
||||
|
||||
#ifdef ASSERT
|
||||
// This is used both to check the types of referenced fields and
|
||||
// to ensure that all of the field types are present.
|
||||
void VMStructs::init() {
|
||||
VM_STRUCTS(CHECK_NONSTATIC_VM_STRUCT_ENTRY,
|
||||
CHECK_STATIC_VM_STRUCT_ENTRY,
|
||||
CHECK_STATIC_PTR_VOLATILE_VM_STRUCT_ENTRY,
|
||||
|
@ -3042,80 +3064,47 @@ VMStructs::init() {
|
|||
// Solstice NFS setup. If everyone switches to local workspaces on
|
||||
// Win32, we can put this back in.
|
||||
#ifndef _WINDOWS
|
||||
debug_only(VM_STRUCTS(ENSURE_FIELD_TYPE_PRESENT,
|
||||
CHECK_NO_OP,
|
||||
CHECK_NO_OP,
|
||||
CHECK_NO_OP,
|
||||
CHECK_NO_OP,
|
||||
CHECK_NO_OP,
|
||||
CHECK_NO_OP,
|
||||
CHECK_NO_OP,
|
||||
CHECK_NO_OP,
|
||||
CHECK_NO_OP));
|
||||
debug_only(VM_STRUCTS(CHECK_NO_OP,
|
||||
ENSURE_FIELD_TYPE_PRESENT,
|
||||
ENSURE_FIELD_TYPE_PRESENT,
|
||||
CHECK_NO_OP,
|
||||
ENSURE_FIELD_TYPE_PRESENT,
|
||||
ENSURE_NONPRODUCT_FIELD_TYPE_PRESENT,
|
||||
ENSURE_C1_FIELD_TYPE_PRESENT,
|
||||
ENSURE_C2_FIELD_TYPE_PRESENT,
|
||||
CHECK_NO_OP,
|
||||
CHECK_NO_OP));
|
||||
VM_STRUCTS(ENSURE_FIELD_TYPE_PRESENT,
|
||||
CHECK_NO_OP,
|
||||
CHECK_NO_OP,
|
||||
CHECK_NO_OP,
|
||||
CHECK_NO_OP,
|
||||
CHECK_NO_OP,
|
||||
CHECK_NO_OP,
|
||||
CHECK_NO_OP,
|
||||
CHECK_NO_OP,
|
||||
CHECK_NO_OP);
|
||||
|
||||
debug_only(VM_STRUCTS_CPU(ENSURE_FIELD_TYPE_PRESENT,
|
||||
ENSURE_FIELD_TYPE_PRESENT,
|
||||
CHECK_NO_OP,
|
||||
ENSURE_FIELD_TYPE_PRESENT,
|
||||
ENSURE_NONPRODUCT_FIELD_TYPE_PRESENT,
|
||||
ENSURE_C2_FIELD_TYPE_PRESENT,
|
||||
CHECK_NO_OP,
|
||||
CHECK_NO_OP));
|
||||
debug_only(VM_STRUCTS_OS_CPU(ENSURE_FIELD_TYPE_PRESENT,
|
||||
ENSURE_FIELD_TYPE_PRESENT,
|
||||
CHECK_NO_OP,
|
||||
ENSURE_FIELD_TYPE_PRESENT,
|
||||
ENSURE_NONPRODUCT_FIELD_TYPE_PRESENT,
|
||||
ENSURE_C2_FIELD_TYPE_PRESENT,
|
||||
CHECK_NO_OP,
|
||||
CHECK_NO_OP));
|
||||
#endif
|
||||
VM_STRUCTS(CHECK_NO_OP,
|
||||
ENSURE_FIELD_TYPE_PRESENT,
|
||||
ENSURE_FIELD_TYPE_PRESENT,
|
||||
CHECK_NO_OP,
|
||||
ENSURE_FIELD_TYPE_PRESENT,
|
||||
ENSURE_NONPRODUCT_FIELD_TYPE_PRESENT,
|
||||
ENSURE_C1_FIELD_TYPE_PRESENT,
|
||||
ENSURE_C2_FIELD_TYPE_PRESENT,
|
||||
CHECK_NO_OP,
|
||||
CHECK_NO_OP);
|
||||
|
||||
VM_STRUCTS_CPU(ENSURE_FIELD_TYPE_PRESENT,
|
||||
ENSURE_FIELD_TYPE_PRESENT,
|
||||
CHECK_NO_OP,
|
||||
ENSURE_FIELD_TYPE_PRESENT,
|
||||
ENSURE_NONPRODUCT_FIELD_TYPE_PRESENT,
|
||||
ENSURE_C2_FIELD_TYPE_PRESENT,
|
||||
CHECK_NO_OP,
|
||||
CHECK_NO_OP);
|
||||
VM_STRUCTS_OS_CPU(ENSURE_FIELD_TYPE_PRESENT,
|
||||
ENSURE_FIELD_TYPE_PRESENT,
|
||||
CHECK_NO_OP,
|
||||
ENSURE_FIELD_TYPE_PRESENT,
|
||||
ENSURE_NONPRODUCT_FIELD_TYPE_PRESENT,
|
||||
ENSURE_C2_FIELD_TYPE_PRESENT,
|
||||
CHECK_NO_OP,
|
||||
CHECK_NO_OP);
|
||||
#endif // !_WINDOWS
|
||||
}
|
||||
|
||||
extern "C" {
|
||||
|
||||
#define STRIDE(array) ((char*)&array[1] - (char*)&array[0])
|
||||
|
||||
JNIEXPORT VMStructEntry* gHotSpotVMStructs = VMStructs::localHotSpotVMStructs;
|
||||
JNIEXPORT uint64_t gHotSpotVMStructEntryTypeNameOffset = offset_of(VMStructEntry, typeName);
|
||||
JNIEXPORT uint64_t gHotSpotVMStructEntryFieldNameOffset = offset_of(VMStructEntry, fieldName);
|
||||
JNIEXPORT uint64_t gHotSpotVMStructEntryTypeStringOffset = offset_of(VMStructEntry, typeString);
|
||||
JNIEXPORT uint64_t gHotSpotVMStructEntryIsStaticOffset = offset_of(VMStructEntry, isStatic);
|
||||
JNIEXPORT uint64_t gHotSpotVMStructEntryOffsetOffset = offset_of(VMStructEntry, offset);
|
||||
JNIEXPORT uint64_t gHotSpotVMStructEntryAddressOffset = offset_of(VMStructEntry, address);
|
||||
JNIEXPORT uint64_t gHotSpotVMStructEntryArrayStride = STRIDE(gHotSpotVMStructs);
|
||||
|
||||
JNIEXPORT VMTypeEntry* gHotSpotVMTypes = VMStructs::localHotSpotVMTypes;
|
||||
JNIEXPORT uint64_t gHotSpotVMTypeEntryTypeNameOffset = offset_of(VMTypeEntry, typeName);
|
||||
JNIEXPORT uint64_t gHotSpotVMTypeEntrySuperclassNameOffset = offset_of(VMTypeEntry, superclassName);
|
||||
JNIEXPORT uint64_t gHotSpotVMTypeEntryIsOopTypeOffset = offset_of(VMTypeEntry, isOopType);
|
||||
JNIEXPORT uint64_t gHotSpotVMTypeEntryIsIntegerTypeOffset = offset_of(VMTypeEntry, isIntegerType);
|
||||
JNIEXPORT uint64_t gHotSpotVMTypeEntryIsUnsignedOffset = offset_of(VMTypeEntry, isUnsigned);
|
||||
JNIEXPORT uint64_t gHotSpotVMTypeEntrySizeOffset = offset_of(VMTypeEntry, size);
|
||||
JNIEXPORT uint64_t gHotSpotVMTypeEntryArrayStride = STRIDE(gHotSpotVMTypes);
|
||||
|
||||
JNIEXPORT VMIntConstantEntry* gHotSpotVMIntConstants = VMStructs::localHotSpotVMIntConstants;
|
||||
JNIEXPORT uint64_t gHotSpotVMIntConstantEntryNameOffset = offset_of(VMIntConstantEntry, name);
|
||||
JNIEXPORT uint64_t gHotSpotVMIntConstantEntryValueOffset = offset_of(VMIntConstantEntry, value);
|
||||
JNIEXPORT uint64_t gHotSpotVMIntConstantEntryArrayStride = STRIDE(gHotSpotVMIntConstants);
|
||||
|
||||
JNIEXPORT VMLongConstantEntry* gHotSpotVMLongConstants = VMStructs::localHotSpotVMLongConstants;
|
||||
JNIEXPORT uint64_t gHotSpotVMLongConstantEntryNameOffset = offset_of(VMLongConstantEntry, name);
|
||||
JNIEXPORT uint64_t gHotSpotVMLongConstantEntryValueOffset = offset_of(VMLongConstantEntry, value);
|
||||
JNIEXPORT uint64_t gHotSpotVMLongConstantEntryArrayStride = STRIDE(gHotSpotVMLongConstants);
|
||||
}
|
||||
|
||||
#ifdef ASSERT
|
||||
static int recursiveFindType(VMTypeEntry* origtypes, const char* typeName, bool isRecurse) {
|
||||
{
|
||||
VMTypeEntry* types = origtypes;
|
||||
|
@ -3182,15 +3171,13 @@ static int recursiveFindType(VMTypeEntry* origtypes, const char* typeName, bool
|
|||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
VMStructs::findType(const char* typeName) {
|
||||
int VMStructs::findType(const char* typeName) {
|
||||
VMTypeEntry* types = gHotSpotVMTypes;
|
||||
|
||||
return recursiveFindType(types, typeName, false);
|
||||
}
|
||||
#endif
|
||||
|
||||
void vmStructs_init() {
|
||||
debug_only(VMStructs::init());
|
||||
VMStructs::init();
|
||||
}
|
||||
#endif // ASSERT
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue