[dtrace] Pass namespace and class name to probes where appropriate.
authorMark Probst <mark.probst@gmail.com>
Sat, 22 Sep 2012 14:32:48 +0000 (16:32 +0200)
committerMark Probst <mark.probst@gmail.com>
Fri, 28 Sep 2012 21:18:18 +0000 (23:18 +0200)
data/mono.d
mono/metadata/sgen-alloc.c
mono/metadata/sgen-gc.c
mono/metadata/sgen-marksweep.c
mono/utils/dtrace.h

index 3542f6367f3e19f442bc0e84930d60f614398707..fdc40124192ed9392815ee378a6fb0cfb80e1618 100644 (file)
@@ -26,17 +26,17 @@ provider mono {
        probe gc__unlocked ();
 
        probe gc__nursery__tlab__alloc (void *addr, uintptr_t len);
-       probe gc__nursery__obj__alloc (void *addr, uintptr_t size, char *class_name);
+       probe gc__nursery__obj__alloc (void *addr, uintptr_t size, char *ns_name, char *class_name);
 
-       probe gc__major__obj__alloc__large (void *addr, uintptr_t size, char *class_name);
-       probe gc__major__obj__alloc__pinned (void *addr, uintptr_t size, char *class_name);
-       probe gc__major__obj__alloc__degraded (void *addr, uintptr_t size, char *class_name);
-       probe gc__major__obj__alloc__mature (void *addr, uintptr_t size, char *class_name);
+       probe gc__major__obj__alloc__large (void *addr, uintptr_t size, char *ns_name, char *class_name);
+       probe gc__major__obj__alloc__pinned (void *addr, uintptr_t size, char *ns_name, char *class_name);
+       probe gc__major__obj__alloc__degraded (void *addr, uintptr_t size, char *ns_name, char *class_name);
+       probe gc__major__obj__alloc__mature (void *addr, uintptr_t size, char *ns_name, char *class_name);
 
        probe gc__nursery__sweeped (void *addr, uintptr_t len);
        probe gc__major__sweeped (void *addr, uintptr_t len);
 
-       probe gc__obj__pinned (void *addr, uintptr_t size, char *class_name, int generation);
+       probe gc__obj__pinned (void *addr, uintptr_t size, char *ns_name, char *class_name, int generation);
 };
 
 #pragma D attributes Evolving/Evolving/Common provider mono provider
index 9ba03100c3ba084ee3fc854035537b5976f0d791..0f70797931c479e33b443c5c42e9ffe2037a7399 100644 (file)
@@ -136,10 +136,10 @@ alloc_degraded (MonoVTable *vtable, size_t size, gboolean for_mature)
        p = major_collector.alloc_degraded (vtable, size);
 
        if (for_mature) {
-               MONO_GC_MAJOR_OBJ_ALLOC_MATURE (p, size, NULL);
+               MONO_GC_MAJOR_OBJ_ALLOC_MATURE (p, size, vtable->klass->name_space, vtable->klass->name);
        } else {
                binary_protocol_alloc_degraded (p, vtable, size);
-               MONO_GC_MAJOR_OBJ_ALLOC_DEGRADED (p, size, NULL);
+               MONO_GC_MAJOR_OBJ_ALLOC_DEGRADED (p, size, vtable->klass->name_space, vtable->klass->name);
        }
 
        return p;
@@ -220,7 +220,8 @@ mono_gc_alloc_obj_nolock (MonoVTable *vtable, size_t size)
 
                        DEBUG (6, fprintf (gc_debug_file, "Allocated object %p, vtable: %p (%s), size: %zd\n", p, vtable, vtable->klass->name, size));
                        binary_protocol_alloc (p , vtable, size);
-                       MONO_GC_NURSERY_OBJ_ALLOC (p, size, NULL);
+                       if (MONO_GC_NURSERY_OBJ_ALLOC_ENABLED ())
+                               MONO_GC_NURSERY_OBJ_ALLOC (p, size, vtable->klass->name_space, vtable->klass->name);
                        g_assert (*p == NULL);
                        mono_atomic_store_seq (p, vtable);
 
@@ -328,9 +329,9 @@ mono_gc_alloc_obj_nolock (MonoVTable *vtable, size_t size)
                binary_protocol_alloc (p, vtable, size);
                if (MONO_GC_MAJOR_OBJ_ALLOC_LARGE_ENABLED () || MONO_GC_NURSERY_OBJ_ALLOC_ENABLED ()) {
                        if (size > SGEN_MAX_SMALL_OBJ_SIZE)
-                               MONO_GC_MAJOR_OBJ_ALLOC_LARGE (p, size, NULL);
+                               MONO_GC_MAJOR_OBJ_ALLOC_LARGE (p, size, vtable->klass->name_space, vtable->klass->name);
                        else
-                               MONO_GC_NURSERY_OBJ_ALLOC (p, size, NULL);
+                               MONO_GC_NURSERY_OBJ_ALLOC (p, size, vtable->klass->name_space, vtable->klass->name);
                }
                mono_atomic_store_seq (p, vtable);
        }
@@ -356,7 +357,6 @@ mono_gc_try_alloc_obj_nolock (MonoVTable *vtable, size_t size)
                p = sgen_nursery_alloc (size);
                if (!p)
                        return NULL;
-               MONO_GC_NURSERY_OBJ_ALLOC (p, size, NULL);
                sgen_set_nursery_scan_start ((char*)p);
 
                /*FIXME we should use weak memory ops here. Should help specially on x86. */
@@ -389,7 +389,6 @@ mono_gc_try_alloc_obj_nolock (MonoVTable *vtable, size_t size)
                        p = sgen_nursery_alloc (size);
                        if (!p)
                                return NULL;
-                       MONO_GC_NURSERY_OBJ_ALLOC (p, size, NULL);
 
                        if (nursery_clear_policy == CLEAR_AT_TLAB_CREATION)
                                memset (p, 0, size);                    
@@ -420,6 +419,8 @@ mono_gc_try_alloc_obj_nolock (MonoVTable *vtable, size_t size)
 
        DEBUG (6, fprintf (gc_debug_file, "Allocated object %p, vtable: %p (%s), size: %zd\n", p, vtable, vtable->klass->name, size));
        binary_protocol_alloc (p, vtable, size);
+       if (MONO_GC_NURSERY_OBJ_ALLOC_ENABLED ())
+               MONO_GC_NURSERY_OBJ_ALLOC (p, size, vtable->klass->name_space, vtable->klass->name);
        g_assert (*p == NULL); /* FIXME disable this in non debug builds */
 
        mono_atomic_store_seq (p, vtable);
@@ -574,9 +575,9 @@ mono_gc_alloc_pinned_obj (MonoVTable *vtable, size_t size)
        if (G_LIKELY (p)) {
                DEBUG (6, fprintf (gc_debug_file, "Allocated pinned object %p, vtable: %p (%s), size: %zd\n", p, vtable, vtable->klass->name, size));
                if (size > SGEN_MAX_SMALL_OBJ_SIZE)
-                       MONO_GC_MAJOR_OBJ_ALLOC_LARGE (p, size, NULL);
+                       MONO_GC_MAJOR_OBJ_ALLOC_LARGE (p, size, vtable->klass->name_space, vtable->klass->name);
                else
-                       MONO_GC_MAJOR_OBJ_ALLOC_PINNED (p, size, NULL);
+                       MONO_GC_MAJOR_OBJ_ALLOC_PINNED (p, size, vtable->klass->name_space, vtable->klass->name);
                binary_protocol_alloc_pinned (p, vtable, size);
                mono_atomic_store_seq (p, vtable);
        }
index de331419146be6151a56a815ef595b768961f4e1..0fa833603e50607ae4797daeb679232a38dc31af 100644 (file)
@@ -1247,7 +1247,8 @@ pin_objects_from_addresses (GCMemSection *section, void **start, void **end, voi
                                                binary_protocol_pin (search_start, (gpointer)LOAD_VTABLE (search_start), safe_object_get_size (search_start));
                                                if (MONO_GC_OBJ_PINNED_ENABLED ()) {
                                                        int gen = sgen_ptr_in_nursery (search_start) ? GENERATION_NURSERY : GENERATION_OLD;
-                                                       MONO_GC_OBJ_PINNED (search_start, sgen_safe_object_get_size (search_start), NULL, gen);
+                                                       MonoVTable *vt = (MonoVTable*)LOAD_VTABLE (search_start);
+                                                       MONO_GC_OBJ_PINNED (search_start, sgen_safe_object_get_size (search_start), vt->klass->name_space, vt->klass->name, gen);
                                                }
                                                pin_object (search_start);
                                                GRAY_OBJECT_ENQUEUE (queue, search_start);
@@ -1316,7 +1317,8 @@ sgen_pin_object (void *object, GrayQueue *queue)
        binary_protocol_pin (object, (gpointer)LOAD_VTABLE (object), safe_object_get_size (object));
        if (MONO_GC_OBJ_PINNED_ENABLED ()) {
                int gen = sgen_ptr_in_nursery (object) ? GENERATION_NURSERY : GENERATION_OLD;
-               MONO_GC_OBJ_PINNED (object, sgen_safe_object_get_size (object), NULL, gen);
+               MonoVTable *vt = (MonoVTable*)LOAD_VTABLE (object);
+               MONO_GC_OBJ_PINNED (object, sgen_safe_object_get_size (object), vt->klass->name_space, vt->klass->name, gen);
        }
 }
 
@@ -2698,7 +2700,8 @@ major_do_collection (const char *reason)
                if (sgen_find_optimized_pin_queue_area (bigobj->data, (char*)bigobj->data + bigobj->size, &dummy)) {
                        binary_protocol_pin (bigobj->data, (gpointer)LOAD_VTABLE (bigobj->data), safe_object_get_size (bigobj->data));
                        if (MONO_GC_OBJ_PINNED_ENABLED ()) {
-                               MONO_GC_OBJ_PINNED (bigobj->data, sgen_safe_object_get_size ((MonoObject*)bigobj->data), NULL, GENERATION_OLD);
+                               MonoVTable *vt = (MonoVTable*)LOAD_VTABLE (bigobj->data);
+                               MONO_GC_OBJ_PINNED (bigobj->data, sgen_safe_object_get_size ((MonoObject*)bigobj->data), vt->klass->name_space, vt->klass->name, GENERATION_OLD);
                        }
                        pin_object (bigobj->data);
                        /* FIXME: only enqueue if object has references */
index 72cd5c5b4a3732615761733183e2e4c8c6620a8f..c1da5eb3e4ac50934f64485069ab65d07cf50084 100644 (file)
@@ -1371,7 +1371,8 @@ major_copy_or_mark_object (void **ptr, SgenGrayQueue *queue)
                                return;
                        binary_protocol_pin (obj, (gpointer)SGEN_LOAD_VTABLE (obj), sgen_safe_object_get_size ((MonoObject*)obj));
                        if (MONO_GC_OBJ_PINNED_ENABLED ()) {
-                               MONO_GC_OBJ_PINNED (obj, sgen_safe_object_get_size (obj), NULL, GENERATION_OLD);
+                               MonoVTable *vt = (MonoVTable*)SGEN_LOAD_VTABLE (obj);
+                               MONO_GC_OBJ_PINNED (obj, sgen_safe_object_get_size (obj), vt->klass->name_space, vt->klass->name, GENERATION_OLD);
                        }
                        SGEN_PIN_OBJECT (obj);
                        /* FIXME: only enqueue if object has references */
index 55c7e70adf719584ff9a8d8466ac6336c108af55..7567b735a1f049dd23f94bf9ea9c09a4fd25af4a 100644 (file)
 #define MONO_GC_NURSERY_TLAB_ALLOC(addr,len)
 #define MONO_GC_NURSERY_TLAB_ALLOC_ENABLED()   (0)
 
-#define MONO_GC_NURSERY_OBJ_ALLOC(addr,size,class_name)
+#define MONO_GC_NURSERY_OBJ_ALLOC(addr,size,ns_name,class_name)
 #define MONO_GC_NURSERY_OBJ_ALLOC_ENABLED()    (0)
 
 
-#define MONO_GC_MAJOR_OBJ_ALLOC_LARGE(addr,size,class_name)
+#define MONO_GC_MAJOR_OBJ_ALLOC_LARGE(addr,size,ns_name,class_name)
 #define MONO_GC_MAJOR_OBJ_ALLOC_LARGE_ENABLED()        (0)
 
-#define MONO_GC_MAJOR_OBJ_ALLOC_PINNED(addr,size,class_name)
+#define MONO_GC_MAJOR_OBJ_ALLOC_PINNED(addr,size,ns_name,class_name)
 #define MONO_GC_MAJOR_OBJ_ALLOC_PINNED_ENABLED()       (0)
 
-#define MONO_GC_MAJOR_OBJ_ALLOC_DEGRADED(addr,size,class_name)
+#define MONO_GC_MAJOR_OBJ_ALLOC_DEGRADED(addr,size,ns_name,class_name)
 #define MONO_GC_MAJOR_OBJ_ALLOC_DEGRADED_ENABLED()     (0)
 
-#define MONO_GC_MAJOR_OBJ_ALLOC_MATURE(addr,size,class_name)
+#define MONO_GC_MAJOR_OBJ_ALLOC_MATURE(addr,size,ns_name,class_name)
 #define MONO_GC_MAJOR_OBJ_ALLOC_MATURE_ENABLED()       (0)
 
 
+#define MONO_GC_OBJ_MOVED(dest,src,dest_gen,src_gen,size,ns_name,class_name)
+#define MONO_GC_OBJ_MOVED_ENABLED()    (0)
+
+
 #define MONO_GC_NURSERY_SWEEPED(addr,len)
 #define MONO_GC_NURSERY_SWEEPED_ENABLED()      (0)
 
@@ -89,7 +93,7 @@
 #define MONO_GC_MAJOR_SWEEPED_ENABLED()        (0)
 
 
-#define MONO_GC_OBJ_PINNED(addr,size,class_name,generation)
+#define MONO_GC_OBJ_PINNED(addr,size,ns_name,class_name,generation)
 #define MONO_GC_OBJ_PINNED_ENABLED()   (0)
 
 #endif