797 case JVM_SIGNATURE_DOUBLE : size += 8; break;
798
799 default : ShouldNotReachHere();
800 }
801 }
802 }
803 return (u4)size;
804 }
805
806 // dumps static fields of the given class
807 void DumperSupport::dump_static_fields(DumpWriter* writer, Klass* k) {
808 HandleMark hm;
809 instanceKlassHandle ikh = instanceKlassHandle(Thread::current(), k);
810
811 // pass 1 - count the static fields
812 u2 field_count = 0;
813 for (FieldStream fldc(ikh, true, true); !fldc.eos(); fldc.next()) {
814 if (fldc.access_flags().is_static()) field_count++;
815 }
816
817 writer->write_u2(field_count);
818
819 // pass 2 - dump the field descriptors and raw values
820 for (FieldStream fld(ikh, true, true); !fld.eos(); fld.next()) {
821 if (fld.access_flags().is_static()) {
822 Symbol* sig = fld.signature();
823
824 writer->write_symbolID(fld.name()); // name
825 writer->write_u1(sig2tag(sig)); // type
826
827 // value
828 int offset = fld.offset();
829 address addr = (address)ikh->java_mirror() + offset;
830
831 dump_field_value(writer, sig->byte_at(0), addr);
832 }
833 }
834 }
835
836 // dump the raw values of the instance fields of the given object
837 void DumperSupport::dump_instance_fields(DumpWriter* writer, oop o) {
838 HandleMark hm;
839 instanceKlassHandle ikh = instanceKlassHandle(Thread::current(), o->klass());
840
841 for (FieldStream fld(ikh, false, false); !fld.eos(); fld.next()) {
842 if (!fld.access_flags().is_static()) {
843 Symbol* sig = fld.signature();
844 address addr = (address)o + fld.offset();
845
846 dump_field_value(writer, sig->byte_at(0), addr);
847 }
848 }
849 }
850
851 // dumps the definition of the instance fields for a given class
852 void DumperSupport::dump_instance_field_descriptors(DumpWriter* writer, Klass* k) {
853 HandleMark hm;
|
797 case JVM_SIGNATURE_DOUBLE : size += 8; break;
798
799 default : ShouldNotReachHere();
800 }
801 }
802 }
803 return (u4)size;
804 }
805
806 // dumps static fields of the given class
807 void DumperSupport::dump_static_fields(DumpWriter* writer, Klass* k) {
808 HandleMark hm;
809 instanceKlassHandle ikh = instanceKlassHandle(Thread::current(), k);
810
811 // pass 1 - count the static fields
812 u2 field_count = 0;
813 for (FieldStream fldc(ikh, true, true); !fldc.eos(); fldc.next()) {
814 if (fldc.access_flags().is_static()) field_count++;
815 }
816
817 oop resolved_references = ((InstanceKlass*)k)->constants()->resolved_references();
818
819 if (resolved_references != NULL) {
820 ++field_count;
821 }
822
823 writer->write_u2(field_count);
824
825 // pass 2 - dump the field descriptors and raw values
826 for (FieldStream fld(ikh, true, true); !fld.eos(); fld.next()) {
827 if (fld.access_flags().is_static()) {
828 Symbol* sig = fld.signature();
829
830 writer->write_symbolID(fld.name()); // name
831 writer->write_u1(sig2tag(sig)); // type
832
833 // value
834 int offset = fld.offset();
835 address addr = (address)ikh->java_mirror() + offset;
836
837 dump_field_value(writer, sig->byte_at(0), addr);
838 }
839 }
840
841 if (resolved_references != NULL) {
842 writer->write_symbolID(vmSymbols::resolved_references_name());
843 writer->write_u1(HPROF_NORMAL_OBJECT);
844 writer->write_objectID(resolved_references);
845 }
846 }
847
848 // dump the raw values of the instance fields of the given object
849 void DumperSupport::dump_instance_fields(DumpWriter* writer, oop o) {
850 HandleMark hm;
851 instanceKlassHandle ikh = instanceKlassHandle(Thread::current(), o->klass());
852
853 for (FieldStream fld(ikh, false, false); !fld.eos(); fld.next()) {
854 if (!fld.access_flags().is_static()) {
855 Symbol* sig = fld.signature();
856 address addr = (address)o + fld.offset();
857
858 dump_field_value(writer, sig->byte_at(0), addr);
859 }
860 }
861 }
862
863 // dumps the definition of the instance fields for a given class
864 void DumperSupport::dump_instance_field_descriptors(DumpWriter* writer, Klass* k) {
865 HandleMark hm;
|