mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-28 07:14:30 +02:00
8140091: remove VMStructs cast_uint64_t workaround for GCC 4.1.1 bug
Reviewed-by: erikj, kvn
This commit is contained in:
parent
fb687e4ff4
commit
6bc7725c19
4 changed files with 50 additions and 44 deletions
|
@ -97,6 +97,7 @@ else
|
||||||
# prints the numbers (e.g. "2.95", "3.2.1")
|
# prints the numbers (e.g. "2.95", "3.2.1")
|
||||||
CC_VER_MAJOR := $(shell $(CC) -dumpversion | sed 's/egcs-//' | cut -d'.' -f1)
|
CC_VER_MAJOR := $(shell $(CC) -dumpversion | sed 's/egcs-//' | cut -d'.' -f1)
|
||||||
CC_VER_MINOR := $(shell $(CC) -dumpversion | sed 's/egcs-//' | cut -d'.' -f2)
|
CC_VER_MINOR := $(shell $(CC) -dumpversion | sed 's/egcs-//' | cut -d'.' -f2)
|
||||||
|
CC_VER_MICRO := $(shell $(CC) -dumpversion | sed 's/egcs-//' | cut -d'.' -f3)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(USE_CLANG), true)
|
ifeq ($(USE_CLANG), true)
|
||||||
|
@ -326,6 +327,10 @@ ifeq ($(USE_CLANG), true)
|
||||||
$(error "Update compiler workarounds for Clang $(CC_VER_MAJOR).$(CC_VER_MINOR)")
|
$(error "Update compiler workarounds for Clang $(CC_VER_MAJOR).$(CC_VER_MINOR)")
|
||||||
endif
|
endif
|
||||||
else
|
else
|
||||||
|
# Do not allow GCC 4.1.1
|
||||||
|
ifeq ($(shell expr $(CC_VER_MAJOR) = 4 \& $(CC_VER_MINOR) = 1 \& $(CC_VER_MICRO) = 1), 1)
|
||||||
|
$(error "GCC $(CC_VER_MAJOR).$(CC_VER_MINOR).$(CC_VER_MICRO) not supported because of https://gcc.gnu.org/bugzilla/show_bug.cgi?id=27724")
|
||||||
|
endif
|
||||||
# 6835796. Problem in GCC 4.3.0 with mulnode.o optimized compilation.
|
# 6835796. Problem in GCC 4.3.0 with mulnode.o optimized compilation.
|
||||||
ifeq ($(shell expr $(CC_VER_MAJOR) = 4 \& $(CC_VER_MINOR) = 3), 1)
|
ifeq ($(shell expr $(CC_VER_MAJOR) = 4 \& $(CC_VER_MINOR) = 3), 1)
|
||||||
OPT_CFLAGS/mulnode.o += $(OPT_CFLAGS/NOOPT)
|
OPT_CFLAGS/mulnode.o += $(OPT_CFLAGS/NOOPT)
|
||||||
|
|
|
@ -60,6 +60,7 @@ else
|
||||||
# prints the numbers (e.g. "2.95", "3.2.1")
|
# prints the numbers (e.g. "2.95", "3.2.1")
|
||||||
CC_VER_MAJOR := $(shell $(CC) -dumpversion | sed 's/egcs-//' | cut -d'.' -f1)
|
CC_VER_MAJOR := $(shell $(CC) -dumpversion | sed 's/egcs-//' | cut -d'.' -f1)
|
||||||
CC_VER_MINOR := $(shell $(CC) -dumpversion | sed 's/egcs-//' | cut -d'.' -f2)
|
CC_VER_MINOR := $(shell $(CC) -dumpversion | sed 's/egcs-//' | cut -d'.' -f2)
|
||||||
|
CC_VER_MICRO := $(shell $(CC) -dumpversion | sed 's/egcs-//' | cut -d'.' -f3)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(USE_CLANG), true)
|
ifeq ($(USE_CLANG), true)
|
||||||
|
@ -264,6 +265,10 @@ ifeq ($(USE_CLANG), true)
|
||||||
OPT_CFLAGS/loopTransform.o += $(OPT_CFLAGS/NOOPT)
|
OPT_CFLAGS/loopTransform.o += $(OPT_CFLAGS/NOOPT)
|
||||||
endif
|
endif
|
||||||
else
|
else
|
||||||
|
# Do not allow GCC 4.1.1
|
||||||
|
ifeq ($(shell expr $(CC_VER_MAJOR) = 4 \& $(CC_VER_MINOR) = 1 \& $(CC_VER_MICRO) = 1), 1)
|
||||||
|
$(error "GCC $(CC_VER_MAJOR).$(CC_VER_MINOR).$(CC_VER_MICRO) not supported because of https://gcc.gnu.org/bugzilla/show_bug.cgi?id=27724")
|
||||||
|
endif
|
||||||
# 6835796. Problem in GCC 4.3.0 with mulnode.o optimized compilation.
|
# 6835796. Problem in GCC 4.3.0 with mulnode.o optimized compilation.
|
||||||
ifeq ($(shell expr $(CC_VER_MAJOR) = 4 \& $(CC_VER_MINOR) = 3), 1)
|
ifeq ($(shell expr $(CC_VER_MAJOR) = 4 \& $(CC_VER_MINOR) = 3), 1)
|
||||||
OPT_CFLAGS/mulnode.o += $(OPT_CFLAGS/NOOPT)
|
OPT_CFLAGS/mulnode.o += $(OPT_CFLAGS/NOOPT)
|
||||||
|
|
|
@ -39,6 +39,7 @@ Compiler = gcc
|
||||||
# prints the numbers (e.g. "2.95", "3.2.1")
|
# prints the numbers (e.g. "2.95", "3.2.1")
|
||||||
CC_VER_MAJOR := $(shell $(CC) -dumpversion | sed 's/egcs-//' | cut -d'.' -f1)
|
CC_VER_MAJOR := $(shell $(CC) -dumpversion | sed 's/egcs-//' | cut -d'.' -f1)
|
||||||
CC_VER_MINOR := $(shell $(CC) -dumpversion | sed 's/egcs-//' | cut -d'.' -f2)
|
CC_VER_MINOR := $(shell $(CC) -dumpversion | sed 's/egcs-//' | cut -d'.' -f2)
|
||||||
|
CC_VER_MICRO := $(shell $(CC) -dumpversion | sed 's/egcs-//' | cut -d'.' -f3)
|
||||||
|
|
||||||
# Check for the versions of C++ and C compilers ($CXX and $CC) used.
|
# Check for the versions of C++ and C compilers ($CXX and $CC) used.
|
||||||
|
|
||||||
|
@ -160,6 +161,10 @@ ifeq ($(USE_CLANG), true)
|
||||||
OPT_CFLAGS/loopTransform.o += $(OPT_CFLAGS/NOOPT)
|
OPT_CFLAGS/loopTransform.o += $(OPT_CFLAGS/NOOPT)
|
||||||
endif
|
endif
|
||||||
else
|
else
|
||||||
|
# Do not allow GCC 4.1.1
|
||||||
|
ifeq ($(shell expr $(CC_VER_MAJOR) = 4 \& $(CC_VER_MINOR) = 1 \& $(CC_VER_MICRO) = 1), 1)
|
||||||
|
$(error "GCC $(CC_VER_MAJOR).$(CC_VER_MINOR).$(CC_VER_MICRO) not supported because of https://gcc.gnu.org/bugzilla/show_bug.cgi?id=27724")
|
||||||
|
endif
|
||||||
# 6835796. Problem in GCC 4.3.0 with mulnode.o optimized compilation.
|
# 6835796. Problem in GCC 4.3.0 with mulnode.o optimized compilation.
|
||||||
ifeq ($(shell expr $(CC_VER_MAJOR) = 4 \& $(CC_VER_MINOR) = 3), 1)
|
ifeq ($(shell expr $(CC_VER_MAJOR) = 4 \& $(CC_VER_MINOR) = 3), 1)
|
||||||
OPT_CFLAGS/mulnode.o += $(OPT_CFLAGS/NOOPT)
|
OPT_CFLAGS/mulnode.o += $(OPT_CFLAGS/NOOPT)
|
||||||
|
|
|
@ -247,12 +247,6 @@
|
||||||
#ifndef REG_COUNT
|
#ifndef REG_COUNT
|
||||||
#define REG_COUNT 0
|
#define REG_COUNT 0
|
||||||
#endif
|
#endif
|
||||||
// whole purpose of this function is to work around bug c++/27724 in gcc 4.1.1
|
|
||||||
// with optimization turned on it doesn't affect produced code
|
|
||||||
static inline uint64_t cast_uint64_t(size_t x)
|
|
||||||
{
|
|
||||||
return x;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if INCLUDE_JVMTI
|
#if INCLUDE_JVMTI
|
||||||
#define JVMTI_STRUCTS(static_field) \
|
#define JVMTI_STRUCTS(static_field) \
|
||||||
|
@ -2903,7 +2897,7 @@ typedef CompactHashtable<Symbol*, char> SymbolCompactHashTable;
|
||||||
|
|
||||||
// This macro generates a VMStructEntry line for a nonstatic field
|
// This macro generates a VMStructEntry line for a nonstatic field
|
||||||
#define GENERATE_NONSTATIC_VM_STRUCT_ENTRY(typeName, fieldName, type) \
|
#define GENERATE_NONSTATIC_VM_STRUCT_ENTRY(typeName, fieldName, type) \
|
||||||
{ QUOTE(typeName), QUOTE(fieldName), QUOTE(type), 0, cast_uint64_t(offset_of(typeName, fieldName)), NULL },
|
{ QUOTE(typeName), QUOTE(fieldName), QUOTE(type), 0, offset_of(typeName, fieldName), NULL },
|
||||||
|
|
||||||
// This macro generates a VMStructEntry line for a static field
|
// This macro generates a VMStructEntry line for a static field
|
||||||
#define GENERATE_STATIC_VM_STRUCT_ENTRY(typeName, fieldName, type) \
|
#define GENERATE_STATIC_VM_STRUCT_ENTRY(typeName, fieldName, type) \
|
||||||
|
@ -2913,7 +2907,7 @@ typedef CompactHashtable<Symbol*, char> SymbolCompactHashTable;
|
||||||
// nonstatic field, in which the size of the type is also specified.
|
// nonstatic field, in which the size of the type is also specified.
|
||||||
// The type string is given as NULL, indicating an "opaque" type.
|
// The type string is given as NULL, indicating an "opaque" type.
|
||||||
#define GENERATE_UNCHECKED_NONSTATIC_VM_STRUCT_ENTRY(typeName, fieldName, size) \
|
#define GENERATE_UNCHECKED_NONSTATIC_VM_STRUCT_ENTRY(typeName, fieldName, size) \
|
||||||
{ QUOTE(typeName), QUOTE(fieldName), NULL, 0, cast_uint64_t(offset_of(typeName, fieldName)), NULL },
|
{ QUOTE(typeName), QUOTE(fieldName), NULL, 0, offset_of(typeName, fieldName), NULL },
|
||||||
|
|
||||||
// This macro generates a VMStructEntry line for an unchecked
|
// This macro generates a VMStructEntry line for an unchecked
|
||||||
// static field, in which the size of the type is also specified.
|
// static field, in which the size of the type is also specified.
|
||||||
|
@ -3096,10 +3090,10 @@ typedef CompactHashtable<Symbol*, char> SymbolCompactHashTable;
|
||||||
//
|
//
|
||||||
|
|
||||||
#define GENERATE_VM_LONG_CONSTANT_ENTRY(name) \
|
#define GENERATE_VM_LONG_CONSTANT_ENTRY(name) \
|
||||||
{ QUOTE(name), cast_uint64_t(name) },
|
{ QUOTE(name), name },
|
||||||
|
|
||||||
#define GENERATE_PREPROCESSOR_VM_LONG_CONSTANT_ENTRY(name, value) \
|
#define GENERATE_PREPROCESSOR_VM_LONG_CONSTANT_ENTRY(name, value) \
|
||||||
{ name, cast_uint64_t(value) },
|
{ name, value },
|
||||||
|
|
||||||
// This macro generates the sentinel value indicating the end of the list
|
// This macro generates the sentinel value indicating the end of the list
|
||||||
#define GENERATE_VM_LONG_CONSTANT_LAST_ENTRY() \
|
#define GENERATE_VM_LONG_CONSTANT_LAST_ENTRY() \
|
||||||
|
@ -3547,43 +3541,40 @@ VMStructs::init() {
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
||||||
// see comments on cast_uint64_t at the top of this file
|
#define STRIDE(array) ((char*)&array[1] - (char*)&array[0])
|
||||||
#define ASSIGN_CONST_TO_64BIT_VAR(var, expr) \
|
|
||||||
JNIEXPORT uint64_t var = cast_uint64_t(expr);
|
|
||||||
#define ASSIGN_OFFSET_TO_64BIT_VAR(var, type, field) \
|
|
||||||
ASSIGN_CONST_TO_64BIT_VAR(var, offset_of(type, field))
|
|
||||||
#define ASSIGN_STRIDE_TO_64BIT_VAR(var, array) \
|
|
||||||
ASSIGN_CONST_TO_64BIT_VAR(var, (char*)&array[1] - (char*)&array[0])
|
|
||||||
|
|
||||||
JNIEXPORT VMStructEntry* gHotSpotVMStructs = VMStructs::localHotSpotVMStructs;
|
JNIEXPORT VMStructEntry* gHotSpotVMStructs = VMStructs::localHotSpotVMStructs;
|
||||||
ASSIGN_OFFSET_TO_64BIT_VAR(gHotSpotVMStructEntryTypeNameOffset, VMStructEntry, typeName);
|
JNIEXPORT uint64_t gHotSpotVMStructEntryTypeNameOffset = offset_of(VMStructEntry, typeName);
|
||||||
ASSIGN_OFFSET_TO_64BIT_VAR(gHotSpotVMStructEntryFieldNameOffset, VMStructEntry, fieldName);
|
JNIEXPORT uint64_t gHotSpotVMStructEntryFieldNameOffset = offset_of(VMStructEntry, fieldName);
|
||||||
ASSIGN_OFFSET_TO_64BIT_VAR(gHotSpotVMStructEntryTypeStringOffset, VMStructEntry, typeString);
|
JNIEXPORT uint64_t gHotSpotVMStructEntryTypeStringOffset = offset_of(VMStructEntry, typeString);
|
||||||
ASSIGN_OFFSET_TO_64BIT_VAR(gHotSpotVMStructEntryIsStaticOffset, VMStructEntry, isStatic);
|
JNIEXPORT uint64_t gHotSpotVMStructEntryIsStaticOffset = offset_of(VMStructEntry, isStatic);
|
||||||
ASSIGN_OFFSET_TO_64BIT_VAR(gHotSpotVMStructEntryOffsetOffset, VMStructEntry, offset);
|
JNIEXPORT uint64_t gHotSpotVMStructEntryOffsetOffset = offset_of(VMStructEntry, offset);
|
||||||
ASSIGN_OFFSET_TO_64BIT_VAR(gHotSpotVMStructEntryAddressOffset, VMStructEntry, address);
|
JNIEXPORT uint64_t gHotSpotVMStructEntryAddressOffset = offset_of(VMStructEntry, address);
|
||||||
ASSIGN_STRIDE_TO_64BIT_VAR(gHotSpotVMStructEntryArrayStride, gHotSpotVMStructs);
|
JNIEXPORT uint64_t gHotSpotVMStructEntryArrayStride = STRIDE(gHotSpotVMStructs);
|
||||||
JNIEXPORT VMTypeEntry* gHotSpotVMTypes = VMStructs::localHotSpotVMTypes;
|
|
||||||
ASSIGN_OFFSET_TO_64BIT_VAR(gHotSpotVMTypeEntryTypeNameOffset, VMTypeEntry, typeName);
|
JNIEXPORT VMTypeEntry* gHotSpotVMTypes = VMStructs::localHotSpotVMTypes;
|
||||||
ASSIGN_OFFSET_TO_64BIT_VAR(gHotSpotVMTypeEntrySuperclassNameOffset, VMTypeEntry, superclassName);
|
JNIEXPORT uint64_t gHotSpotVMTypeEntryTypeNameOffset = offset_of(VMTypeEntry, typeName);
|
||||||
ASSIGN_OFFSET_TO_64BIT_VAR(gHotSpotVMTypeEntryIsOopTypeOffset, VMTypeEntry, isOopType);
|
JNIEXPORT uint64_t gHotSpotVMTypeEntrySuperclassNameOffset = offset_of(VMTypeEntry, superclassName);
|
||||||
ASSIGN_OFFSET_TO_64BIT_VAR(gHotSpotVMTypeEntryIsIntegerTypeOffset, VMTypeEntry, isIntegerType);
|
JNIEXPORT uint64_t gHotSpotVMTypeEntryIsOopTypeOffset = offset_of(VMTypeEntry, isOopType);
|
||||||
ASSIGN_OFFSET_TO_64BIT_VAR(gHotSpotVMTypeEntryIsUnsignedOffset, VMTypeEntry, isUnsigned);
|
JNIEXPORT uint64_t gHotSpotVMTypeEntryIsIntegerTypeOffset = offset_of(VMTypeEntry, isIntegerType);
|
||||||
ASSIGN_OFFSET_TO_64BIT_VAR(gHotSpotVMTypeEntrySizeOffset, VMTypeEntry, size);
|
JNIEXPORT uint64_t gHotSpotVMTypeEntryIsUnsignedOffset = offset_of(VMTypeEntry, isUnsigned);
|
||||||
ASSIGN_STRIDE_TO_64BIT_VAR(gHotSpotVMTypeEntryArrayStride,gHotSpotVMTypes);
|
JNIEXPORT uint64_t gHotSpotVMTypeEntrySizeOffset = offset_of(VMTypeEntry, size);
|
||||||
JNIEXPORT VMIntConstantEntry* gHotSpotVMIntConstants = VMStructs::localHotSpotVMIntConstants;
|
JNIEXPORT uint64_t gHotSpotVMTypeEntryArrayStride = STRIDE(gHotSpotVMTypes);
|
||||||
ASSIGN_OFFSET_TO_64BIT_VAR(gHotSpotVMIntConstantEntryNameOffset, VMIntConstantEntry, name);
|
|
||||||
ASSIGN_OFFSET_TO_64BIT_VAR(gHotSpotVMIntConstantEntryValueOffset, VMIntConstantEntry, value);
|
JNIEXPORT VMIntConstantEntry* gHotSpotVMIntConstants = VMStructs::localHotSpotVMIntConstants;
|
||||||
ASSIGN_STRIDE_TO_64BIT_VAR(gHotSpotVMIntConstantEntryArrayStride, gHotSpotVMIntConstants);
|
JNIEXPORT uint64_t gHotSpotVMIntConstantEntryNameOffset = offset_of(VMIntConstantEntry, name);
|
||||||
JNIEXPORT VMLongConstantEntry* gHotSpotVMLongConstants = VMStructs::localHotSpotVMLongConstants;
|
JNIEXPORT uint64_t gHotSpotVMIntConstantEntryValueOffset = offset_of(VMIntConstantEntry, value);
|
||||||
ASSIGN_OFFSET_TO_64BIT_VAR(gHotSpotVMLongConstantEntryNameOffset, VMLongConstantEntry, name);
|
JNIEXPORT uint64_t gHotSpotVMIntConstantEntryArrayStride = STRIDE(gHotSpotVMIntConstants);
|
||||||
ASSIGN_OFFSET_TO_64BIT_VAR(gHotSpotVMLongConstantEntryValueOffset, VMLongConstantEntry, value);
|
|
||||||
ASSIGN_STRIDE_TO_64BIT_VAR(gHotSpotVMLongConstantEntryArrayStride, gHotSpotVMLongConstants);
|
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);
|
||||||
|
|
||||||
JNIEXPORT VMAddressEntry* gHotSpotVMAddresses = VMStructs::localHotSpotVMAddresses;
|
JNIEXPORT VMAddressEntry* gHotSpotVMAddresses = VMStructs::localHotSpotVMAddresses;
|
||||||
ASSIGN_OFFSET_TO_64BIT_VAR(gHotSpotVMAddressEntryNameOffset, VMAddressEntry, name);
|
JNIEXPORT uint64_t gHotSpotVMAddressEntryNameOffset = offset_of(VMAddressEntry, name);
|
||||||
ASSIGN_OFFSET_TO_64BIT_VAR(gHotSpotVMAddressEntryValueOffset, VMAddressEntry, value);
|
JNIEXPORT uint64_t gHotSpotVMAddressEntryValueOffset = offset_of(VMAddressEntry, value);
|
||||||
ASSIGN_STRIDE_TO_64BIT_VAR(gHotSpotVMAddressEntryArrayStride, gHotSpotVMAddresses);
|
JNIEXPORT uint64_t gHotSpotVMAddressEntryArrayStride = STRIDE(gHotSpotVMAddresses);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef ASSERT
|
#ifdef ASSERT
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue