Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Probst <mark.probst@gmail.com>2012-09-22 18:32:48 +0400
committerMark Probst <mark.probst@gmail.com>2012-09-29 01:18:18 +0400
commit936d70b46274f033c3dec6234d130843677ab8f9 (patch)
tree2d5d96876867df487bb08a7eb43089df83eb33b3
parent072a3cd5439bb5313f9e46a181a33c1649cfb90f (diff)
[dtrace] Pass namespace and class name to probes where appropriate.
-rw-r--r--data/mono.d12
-rw-r--r--mono/metadata/sgen-alloc.c19
-rw-r--r--mono/metadata/sgen-gc.c9
-rw-r--r--mono/metadata/sgen-marksweep.c3
-rw-r--r--mono/utils/dtrace.h16
5 files changed, 34 insertions, 25 deletions
diff --git a/data/mono.d b/data/mono.d
index 3542f6367f3..fdc40124192 100644
--- a/data/mono.d
+++ b/data/mono.d
@@ -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
diff --git a/mono/metadata/sgen-alloc.c b/mono/metadata/sgen-alloc.c
index 9ba03100c3b..0f70797931c 100644
--- a/mono/metadata/sgen-alloc.c
+++ b/mono/metadata/sgen-alloc.c
@@ -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);
}
diff --git a/mono/metadata/sgen-gc.c b/mono/metadata/sgen-gc.c
index de331419146..0fa833603e5 100644
--- a/mono/metadata/sgen-gc.c
+++ b/mono/metadata/sgen-gc.c
@@ -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 */
diff --git a/mono/metadata/sgen-marksweep.c b/mono/metadata/sgen-marksweep.c
index 72cd5c5b4a3..c1da5eb3e4a 100644
--- a/mono/metadata/sgen-marksweep.c
+++ b/mono/metadata/sgen-marksweep.c
@@ -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 */
diff --git a/mono/utils/dtrace.h b/mono/utils/dtrace.h
index 55c7e70adf7..7567b735a1f 100644
--- a/mono/utils/dtrace.h
+++ b/mono/utils/dtrace.h
@@ -65,23 +65,27 @@
#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