From: Mathias P. <mat...@ne...> - 2005-12-02 12:56:17
|
Hi list! I'm still using precise event based sampling to collect information about different events in Jikes. I can successfully map samples to Methods and in the Method I get the ObjectType and Method Refernces. But I also want the object instance that caused the sample. So I'm disassembling the CodeArray at the position where the sample happened. (The CodeArrays are currently allocated in the immortal space, so that they are not moved by a GC). Now I look at the specific instruction and if it's a memory access then I check if I have a object reference in a register (the registers are also sampled). Now I wanted to ask if it is possible to map these specific addresses to objects? And what is the best way to do this? I'm currently experimenting with this code: (potobj is the memory address where the potential object lies) --- VM.disableGC(); Object obj =3D Address.fromIntZeroExtend(potobj).toObjectReference(); if (Space.isMappedAddress(((Address)obj))) try { //VM.sysWriteln("Obj: "+obj); int foo =3D obj.hashCode(); } catch (Exception e) { VM.sysWriteln("ARGH: "+reg1+" "+e); } else VM.sysWriteln("NOT A MAPPED ADDR: " + Integer.toHexString(potobj)); VM.enableGC(); --- I check if the address is in a mapped space and then try to access the object. Is there a better way to check if it really is an object than to access it? I also have another problem: Sometimes (in the prototype-opt configuration) I get SEGFAULTS that tell me that the address is in an unmapped memory region. Is there a way to check if the region is mapped and in use by Jikes? (I think that the CopyingGC maybe freed the memory and the sample points in the old space...) Thanks for your help! Cheers, Mathias (ETH Zurich) |