@@ -410,6 +410,9 @@ class AbstractDumpWriter : public StackObj {
410410
411411 // Returns true if we have enough room in the buffer for 'len' bytes.
412412 bool can_write_fast (size_t len);
413+
414+ void write_address (address a);
415+
413416 public:
414417 AbstractDumpWriter () :
415418 _buffer (NULL ),
@@ -429,6 +432,7 @@ class AbstractDumpWriter : public StackObj {
429432 void write_u4 (u4 x);
430433 void write_u8 (u8 x);
431434 void write_objectID (oop o);
435+ void write_rootID (oop* p);
432436 void write_symbolID (Symbol* o);
433437 void write_classID (Klass* k);
434438 void write_id (u4 x);
@@ -511,22 +515,24 @@ void AbstractDumpWriter::write_u8(u8 x) {
511515 WRITE_KNOWN_TYPE (&v, 8 );
512516}
513517
514- void AbstractDumpWriter::write_objectID (oop o) {
515- address a = cast_from_oop<address>(o);
518+ void AbstractDumpWriter::write_address (address a) {
516519#ifdef _LP64
517520 write_u8 ((u8 )a);
518521#else
519522 write_u4 ((u4)a);
520523#endif
521524}
522525
526+ void AbstractDumpWriter::write_objectID (oop o) {
527+ write_address (cast_from_oop<address>(o));
528+ }
529+
530+ void AbstractDumpWriter::write_rootID (oop* p) {
531+ write_address ((address)p);
532+ }
533+
523534void AbstractDumpWriter::write_symbolID (Symbol* s) {
524- address a = (address)((uintptr_t )s);
525- #ifdef _LP64
526- write_u8 ((u8 )a);
527- #else
528- write_u4 ((u4)a);
529- #endif
535+ write_address ((address)((uintptr_t )s));
530536}
531537
532538void AbstractDumpWriter::write_id (u4 x) {
@@ -1581,7 +1587,7 @@ void JNIGlobalsDumper::do_oop(oop* obj_p) {
15811587 u4 size = 1 + 2 * sizeof (address);
15821588 writer ()->start_sub_record (HPROF_GC_ROOT_JNI_GLOBAL, size);
15831589 writer ()->write_objectID (o);
1584- writer ()->write_objectID ((oopDesc*) obj_p); // global ref ID
1590+ writer ()->write_rootID ( obj_p); // global ref ID
15851591 writer ()->end_sub_record ();
15861592 }
15871593};
0 commit comments