# HG changeset patch # User hseigel # Date 1533061450 14400 # Node ID 4ac20e5f96ce1af41ee6ed9306647dd61dbb2bd3 # Parent 2cd8bbccbd2dd39afd30b0a52ccb9c407dd945ea 8202171: Some oopDesc functions compare this with NULL Summary: Add Method* parameter and made verify* methods static to avoid 'this' comparison with NULL, Added NULL checks before calling print_on() methods. Reviewed-by: kbarrett, coleenp diff -r 2cd8bbccbd2d -r 4ac20e5f96ce src/hotspot/share/classfile/dictionary.hpp --- a/src/hotspot/share/classfile/dictionary.hpp Tue Jul 31 13:12:06 2018 -0400 +++ b/src/hotspot/share/classfile/dictionary.hpp Tue Jul 31 14:24:10 2018 -0400 @@ -182,7 +182,7 @@ for (ProtectionDomainEntry* current = pd_set(); // accessed at a safepoint current != NULL; current = current->_next) { - current->_pd_cache->object_no_keepalive()->verify(); + oopDesc::verify(current->_pd_cache->object_no_keepalive()); } } diff -r 2cd8bbccbd2d -r 4ac20e5f96ce src/hotspot/share/classfile/systemDictionary.cpp --- a/src/hotspot/share/classfile/systemDictionary.cpp Tue Jul 31 13:12:06 2018 -0400 +++ b/src/hotspot/share/classfile/systemDictionary.cpp Tue Jul 31 14:24:10 2018 -0400 @@ -443,8 +443,18 @@ // Print out trace information LogStream ls(lt); ls.print_cr("Checking package access"); - ls.print("class loader: "); class_loader()->print_value_on(&ls); - ls.print(" protection domain: "); protection_domain()->print_value_on(&ls); + if (class_loader() != NULL) { + ls.print("class loader: "); + class_loader()->print_value_on(&ls); + } else { + ls.print_cr("class loader: NULL"); + } + if (protection_domain() != NULL) { + ls.print(" protection domain: "); + protection_domain()->print_value_on(&ls); + } else { + ls.print_cr(" protection domain: NULL"); + } ls.print(" loading: "); klass->print_value_on(&ls); ls.cr(); } diff -r 2cd8bbccbd2d -r 4ac20e5f96ce src/hotspot/share/code/debugInfo.cpp --- a/src/hotspot/share/code/debugInfo.cpp Tue Jul 31 13:12:06 2018 -0400 +++ b/src/hotspot/share/code/debugInfo.cpp Tue Jul 31 14:24:10 2018 -0400 @@ -251,7 +251,11 @@ } void ConstantOopReadValue::print_on(outputStream* st) const { - value()()->print_value_on(st); + if (value()() != NULL) { + value()()->print_value_on(st); + } else { + st->print_cr("NULL"); + } } diff -r 2cd8bbccbd2d -r 4ac20e5f96ce src/hotspot/share/code/nmethod.cpp --- a/src/hotspot/share/code/nmethod.cpp Tue Jul 31 13:12:06 2018 -0400 +++ b/src/hotspot/share/code/nmethod.cpp Tue Jul 31 14:24:10 2018 -0400 @@ -2332,7 +2332,11 @@ if (o == (oop)Universe::non_oop_word()) { tty->print("non-oop word"); } else { - o->print_value(); + if (o != NULL) { + o->print_value(); + } else { + tty->print_cr("NULL"); + } } tty->cr(); } diff -r 2cd8bbccbd2d -r 4ac20e5f96ce src/hotspot/share/gc/cms/compactibleFreeListSpace.cpp --- a/src/hotspot/share/gc/cms/compactibleFreeListSpace.cpp Tue Jul 31 13:12:06 2018 -0400 +++ b/src/hotspot/share/gc/cms/compactibleFreeListSpace.cpp Tue Jul 31 14:24:10 2018 -0400 @@ -2406,7 +2406,7 @@ res = _sp->adjustObjectSize(p->size()); if (_sp->obj_is_alive(addr)) { was_live = true; - p->verify(); + oopDesc::verify(p); } } else { FreeChunk* fc = (FreeChunk*)addr; @@ -2455,7 +2455,7 @@ _sp->block_is_obj((HeapWord*)obj), "Should be an object"); guarantee(oopDesc::is_oop(obj), "Should be an oop"); - obj->verify(); + oopDesc::verify(obj); if (_past_remark) { // Remark has been completed, the object should be marked _bit_map->isMarked((HeapWord*)obj); @@ -2472,7 +2472,7 @@ } else if (_sp->is_in_reserved(p)) { // the reference is from FLS, and points out of FLS guarantee(oopDesc::is_oop(obj), "Should be an oop"); - obj->verify(); + oopDesc::verify(obj); } } diff -r 2cd8bbccbd2d -r 4ac20e5f96ce src/hotspot/share/gc/parallel/immutableSpace.cpp --- a/src/hotspot/share/gc/parallel/immutableSpace.cpp Tue Jul 31 13:12:06 2018 -0400 +++ b/src/hotspot/share/gc/parallel/immutableSpace.cpp Tue Jul 31 14:24:10 2018 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -75,7 +75,7 @@ HeapWord* t = end(); HeapWord* prev_p = NULL; while (p < t) { - oop(p)->verify(); + oopDesc::verify(oop(p)); prev_p = p; p += oop(p)->size(); } diff -r 2cd8bbccbd2d -r 4ac20e5f96ce src/hotspot/share/gc/parallel/mutableSpace.cpp --- a/src/hotspot/share/gc/parallel/mutableSpace.cpp Tue Jul 31 13:12:06 2018 -0400 +++ b/src/hotspot/share/gc/parallel/mutableSpace.cpp Tue Jul 31 14:24:10 2018 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -250,7 +250,7 @@ HeapWord* t = top(); HeapWord* prev_p = NULL; while (p < t) { - oop(p)->verify(); + oopDesc::verify(oop(p)); prev_p = p; p += oop(p)->size(); } diff -r 2cd8bbccbd2d -r 4ac20e5f96ce src/hotspot/share/gc/shared/space.cpp --- a/src/hotspot/share/gc/shared/space.cpp Tue Jul 31 13:12:06 2018 -0400 +++ b/src/hotspot/share/gc/shared/space.cpp Tue Jul 31 14:24:10 2018 -0400 @@ -461,7 +461,7 @@ HeapWord* t = top(); HeapWord* prev_p = NULL; while (p < t) { - oop(p)->verify(); + oopDesc::verify(oop(p)); prev_p = p; p += oop(p)->size(); } @@ -708,7 +708,7 @@ } if (objs == OBJ_SAMPLE_INTERVAL) { - oop(p)->verify(); + oopDesc::verify(oop(p)); objs = 0; } else { objs++; diff -r 2cd8bbccbd2d -r 4ac20e5f96ce src/hotspot/share/gc/shared/threadLocalAllocBuffer.cpp --- a/src/hotspot/share/gc/shared/threadLocalAllocBuffer.cpp Tue Jul 31 13:12:06 2018 -0400 +++ b/src/hotspot/share/gc/shared/threadLocalAllocBuffer.cpp Tue Jul 31 14:24:10 2018 -0400 @@ -311,7 +311,7 @@ HeapWord* t = top(); HeapWord* prev_p = NULL; while (p < t) { - oop(p)->verify(); + oopDesc::verify(oop(p)); prev_p = p; p += oop(p)->size(); } diff -r 2cd8bbccbd2d -r 4ac20e5f96ce src/hotspot/share/oops/instanceKlass.cpp --- a/src/hotspot/share/oops/instanceKlass.cpp Tue Jul 31 13:12:06 2018 -0400 +++ b/src/hotspot/share/oops/instanceKlass.cpp Tue Jul 31 14:24:10 2018 -0400 @@ -3158,7 +3158,13 @@ } st->print(BULLET"inner classes: "); inner_classes()->print_value_on(st); st->cr(); st->print(BULLET"nest members: "); nest_members()->print_value_on(st); st->cr(); - st->print(BULLET"java mirror: "); java_mirror()->print_value_on(st); st->cr(); + if (java_mirror() != NULL) { + st->print(BULLET"java mirror: "); + java_mirror()->print_value_on(st); + st->cr(); + } else { + st->print_cr(BULLET"java mirror: NULL"); + } st->print(BULLET"vtable length %d (start addr: " INTPTR_FORMAT ")", vtable_length(), p2i(start_of_vtable())); st->cr(); if (vtable_length() > 0 && (Verbose || WizardMode)) print_vtable(start_of_vtable(), vtable_length(), st); st->print(BULLET"itable length %d (start addr: " INTPTR_FORMAT ")", itable_length(), p2i(start_of_itable())); st->cr(); diff -r 2cd8bbccbd2d -r 4ac20e5f96ce src/hotspot/share/oops/objArrayKlass.cpp --- a/src/hotspot/share/oops/objArrayKlass.cpp Tue Jul 31 13:12:06 2018 -0400 +++ b/src/hotspot/share/oops/objArrayKlass.cpp Tue Jul 31 14:24:10 2018 -0400 @@ -477,8 +477,12 @@ int print_len = MIN2((intx) oa->length(), MaxElementPrintSize); for(int index = 0; index < print_len; index++) { st->print(" - %3d : ", index); - oa->obj_at(index)->print_value_on(st); - st->cr(); + if (oa->obj_at(index) != NULL) { + oa->obj_at(index)->print_value_on(st); + st->cr(); + } else { + st->print_cr("NULL"); + } } int remaining = oa->length() - print_len; if (remaining > 0) { @@ -494,7 +498,11 @@ element_klass()->print_value_on(st); int len = objArrayOop(obj)->length(); st->print("[%d] ", len); - obj->print_address_on(st); + if (obj != NULL) { + obj->print_address_on(st); + } else { + st->print_cr("NULL"); + } } const char* ObjArrayKlass::internal_name() const { diff -r 2cd8bbccbd2d -r 4ac20e5f96ce src/hotspot/share/oops/oop.cpp --- a/src/hotspot/share/oops/oop.cpp Tue Jul 31 13:12:06 2018 -0400 +++ b/src/hotspot/share/oops/oop.cpp Tue Jul 31 14:24:10 2018 -0400 @@ -36,11 +36,7 @@ bool always_do_update_barrier = false; void oopDesc::print_on(outputStream* st) const { - if (this == NULL) { - st->print_cr("NULL"); - } else { - klass()->oop_print_on(oop(this), st); - } + klass()->oop_print_on(oop(this), st); } void oopDesc::print_address_on(outputStream* st) const { @@ -71,9 +67,7 @@ void oopDesc::print_value_on(outputStream* st) const { oop obj = oop(this); - if (this == NULL) { - st->print("NULL"); - } else if (java_lang_String::is_instance(obj)) { + if (java_lang_String::is_instance(obj)) { java_lang_String::print(obj, st); print_address_on(st); } else { @@ -82,15 +76,15 @@ } -void oopDesc::verify_on(outputStream* st) { - if (this != NULL) { - klass()->oop_verify_on(this, st); +void oopDesc::verify_on(outputStream* st, oopDesc* oop_desc) { + if (oop_desc != NULL) { + oop_desc->klass()->oop_verify_on(oop_desc, st); } } -void oopDesc::verify() { - verify_on(tty); +void oopDesc::verify(oopDesc* oop_desc) { + verify_on(tty, oop_desc); } intptr_t oopDesc::slow_identity_hash() { diff -r 2cd8bbccbd2d -r 4ac20e5f96ce src/hotspot/share/oops/oop.hpp --- a/src/hotspot/share/oops/oop.hpp Tue Jul 31 13:12:06 2018 -0400 +++ b/src/hotspot/share/oops/oop.hpp Tue Jul 31 14:24:10 2018 -0400 @@ -226,8 +226,8 @@ void release_address_field_put(int offset, address contents); // printing functions for VM debugging - void print_on(outputStream* st) const; // First level print - void print_value_on(outputStream* st) const; // Second level print. + void print_on(outputStream* st) const; // First level print + void print_value_on(outputStream* st) const; // Second level print. void print_address_on(outputStream* st) const; // Address printing // printing on default output stream @@ -240,8 +240,8 @@ char* print_value_string(); // verification operations - void verify_on(outputStream* st); - void verify(); + static void verify_on(outputStream* st, oopDesc* oop_desc); + static void verify(oopDesc* oopDesc); // locking operations inline bool is_locked() const; diff -r 2cd8bbccbd2d -r 4ac20e5f96ce src/hotspot/share/runtime/fieldDescriptor.cpp --- a/src/hotspot/share/runtime/fieldDescriptor.cpp Tue Jul 31 13:12:06 2018 -0400 +++ b/src/hotspot/share/runtime/fieldDescriptor.cpp Tue Jul 31 14:24:10 2018 -0400 @@ -188,12 +188,20 @@ case T_ARRAY: st->print(" "); NOT_LP64(as_int = obj->int_field(offset())); - obj->obj_field(offset())->print_value_on(st); + if (obj->obj_field(offset()) != NULL) { + obj->obj_field(offset())->print_value_on(st); + } else { + st->print_cr("NULL"); + } break; case T_OBJECT: st->print(" "); NOT_LP64(as_int = obj->int_field(offset())); - obj->obj_field(offset())->print_value_on(st); + if (obj->obj_field(offset()) != NULL) { + obj->obj_field(offset())->print_value_on(st); + } else { + st->print_cr("NULL"); + } break; default: ShouldNotReachHere(); diff -r 2cd8bbccbd2d -r 4ac20e5f96ce src/hotspot/share/runtime/jniHandles.cpp --- a/src/hotspot/share/runtime/jniHandles.cpp Tue Jul 31 13:12:06 2018 -0400 +++ b/src/hotspot/share/runtime/jniHandles.cpp Tue Jul 31 14:24:10 2018 -0400 @@ -318,7 +318,7 @@ class VerifyJNIHandles: public OopClosure { public: virtual void do_oop(oop* root) { - (*root)->verify(); + oopDesc::verify(*root); } virtual void do_oop(narrowOop* root) { ShouldNotReachHere(); } };