Mon, 20 Jul 2009 08:20:00 -0700
6860920: serialize.cpp shouldn't use objArrayOopDesc::base_offset_in_bytes(T_BYTE)
Summary: serialize.cpp currently uses objArrayOopDesc::base_offset_in_bytes(T_BYTE), which seems to be wrong.
Reviewed-by: coleenp, kvn
1.1 --- a/src/share/vm/memory/serialize.cpp Fri Jul 17 00:50:55 2009 -0700 1.2 +++ b/src/share/vm/memory/serialize.cpp Mon Jul 20 08:20:00 2009 -0700 1.3 @@ -51,7 +51,7 @@ 1.4 soc->do_tag(arrayOopDesc::base_offset_in_bytes(T_BYTE)); 1.5 soc->do_tag(sizeof(constantPoolOopDesc)); 1.6 soc->do_tag(sizeof(constantPoolCacheOopDesc)); 1.7 - soc->do_tag(objArrayOopDesc::base_offset_in_bytes(T_BYTE)); 1.8 + soc->do_tag(objArrayOopDesc::base_offset_in_bytes()); 1.9 soc->do_tag(typeArrayOopDesc::base_offset_in_bytes(T_BYTE)); 1.10 soc->do_tag(sizeof(symbolOopDesc)); 1.11 soc->do_tag(sizeof(klassOopDesc));
2.1 --- a/src/share/vm/oops/objArrayOop.hpp Fri Jul 17 00:50:55 2009 -0700 2.2 +++ b/src/share/vm/oops/objArrayOop.hpp Mon Jul 20 08:20:00 2009 -0700 2.3 @@ -38,6 +38,11 @@ 2.4 } 2.5 2.6 public: 2.7 + // Returns the offset of the first element. 2.8 + static int base_offset_in_bytes() { 2.9 + return arrayOopDesc::base_offset_in_bytes(T_OBJECT); 2.10 + } 2.11 + 2.12 // base is the address following the header. 2.13 HeapWord* base() const { return (HeapWord*) arrayOopDesc::base(T_OBJECT); } 2.14
3.1 --- a/src/share/vm/opto/library_call.cpp Fri Jul 17 00:50:55 2009 -0700 3.2 +++ b/src/share/vm/opto/library_call.cpp Mon Jul 20 08:20:00 2009 -0700 3.3 @@ -2074,7 +2074,7 @@ 3.4 3.5 // See if it is a narrow oop array. 3.6 if (adr_type->isa_aryptr()) { 3.7 - if (adr_type->offset() >= objArrayOopDesc::base_offset_in_bytes(type)) { 3.8 + if (adr_type->offset() >= objArrayOopDesc::base_offset_in_bytes()) { 3.9 const TypeOopPtr *elem_type = adr_type->is_aryptr()->elem()->isa_oopptr(); 3.10 if (elem_type != NULL) { 3.11 sharpened_klass = elem_type->klass();