In src/share/vm/oops/oop.inline.hpp size_given_klass():
...
#ifdef _M_IA64
// The Windows Itanium Aug 2002 SDK hoists this load above
// the check for s < 0. An oop at the end of the heap will
// cause an access violation if this load is performed on a non
// array oop. Making the reference volatile prohibits this.
// (%%% please explain by what magic the length is actually fetched!)
volatile int *array_length;
array_length = (volatile int *)( (intptr_t)this +
arrayOopDesc::length_offset_in_bytes() );
assert(array_length > 0, "Integer arithmetic problem somewhere");
// Put into size_t to avoid overflow.
size_in_bytes = (size_t) array_length;
size_in_bytes = size_in_bytes << Klass::layout_helper_log2_element_size(lh);
#else
This has been broken since 2005. As pointed out by [~kbarrett]
...
#ifdef _M_IA64
// The Windows Itanium Aug 2002 SDK hoists this load above
// the check for s < 0. An oop at the end of the heap will
// cause an access violation if this load is performed on a non
// array oop. Making the reference volatile prohibits this.
// (%%% please explain by what magic the length is actually fetched!)
volatile int *array_length;
array_length = (volatile int *)( (intptr_t)this +
arrayOopDesc::length_offset_in_bytes() );
assert(array_length > 0, "Integer arithmetic problem somewhere");
// Put into size_t to avoid overflow.
size_in_bytes = (size_t) array_length;
size_in_bytes = size_in_bytes << Klass::layout_helper_log2_element_size(lh);
#else
This has been broken since 2005. As pointed out by [~kbarrett]
- duplicates
-
JDK-8166748 Clean out Windows IA64 support
- Closed
- relates to
-
JDK-8166748 Clean out Windows IA64 support
- Closed