systemtap: Use correct formatters/types

Try to avoid casting variables to potentially smaller types to fit
defined probes. This can truncate values and lead to wrong results.

Also make sure that signedness matches.

Since GType can be even 128 bit on CHERI architecture, cast all these
various types used based on platform to uintmax_t which SystemTap
properly processes.
This commit is contained in:
Tobias Stoeckmann
2025-08-08 22:53:15 +02:00
parent 6812587543
commit b8f9743a4d
9 changed files with 76 additions and 74 deletions

View File

@@ -23,8 +23,9 @@
#include "config.h"
#include <string.h>
#include <signal.h>
#include <stdint.h>
#include <string.h>
#include "../glib/glib-private.h"
@@ -4625,7 +4626,7 @@ retry:
return NULL;
}
TRACE (GOBJECT_OBJECT_REF (object, G_TYPE_FROM_INSTANCE (object), old_ref));
TRACE (GOBJECT_OBJECT_REF (object, (uintmax_t) G_TYPE_FROM_INSTANCE (object), old_ref));
*out_toggle_notify = toggle_notify;
*out_toggle_data = toggle_data;
@@ -4769,7 +4770,7 @@ retry_beginning:
goto retry_beginning;
/* Beware: object might be a dangling pointer. */
TRACE (GOBJECT_OBJECT_UNREF (object, obj_gtype, old_ref));
TRACE (GOBJECT_OBJECT_UNREF (object, (uintmax_t) obj_gtype, old_ref));
return;
}
@@ -4828,9 +4829,9 @@ retry_beginning:
g_object_notify_queue_freeze (object, TRUE);
nqueue_is_frozen = TRUE;
TRACE (GOBJECT_OBJECT_DISPOSE (object, G_TYPE_FROM_INSTANCE (object), 1));
TRACE (GOBJECT_OBJECT_DISPOSE (object, (uintmax_t) G_TYPE_FROM_INSTANCE (object), 1));
G_OBJECT_GET_CLASS (object)->dispose (object);
TRACE (GOBJECT_OBJECT_DISPOSE_END (object, G_TYPE_FROM_INSTANCE (object), 1));
TRACE (GOBJECT_OBJECT_DISPOSE_END (object, (uintmax_t) G_TYPE_FROM_INSTANCE (object), 1));
/* Must re-fetch old-ref. _object_unref_clear_weak_locations() relies on
* that. */
@@ -4899,9 +4900,9 @@ retry_decrement:
g_signal_handlers_destroy (object);
g_object_weak_release_all (object, TRUE);
TRACE (GOBJECT_OBJECT_FINALIZE (object, G_TYPE_FROM_INSTANCE (object)));
TRACE (GOBJECT_OBJECT_FINALIZE (object, (uintmax_t) G_TYPE_FROM_INSTANCE (object)));
G_OBJECT_GET_CLASS (object)->finalize (object);
TRACE (GOBJECT_OBJECT_FINALIZE_END (object, G_TYPE_FROM_INSTANCE (object)));
TRACE (GOBJECT_OBJECT_FINALIZE_END (object, (uintmax_t) G_TYPE_FROM_INSTANCE (object)));
GOBJECT_IF_DEBUG (OBJECTS,
{

View File

@@ -1,13 +1,13 @@
provider gobject {
probe type__new(char *, unsigned long, unsigned long);
probe object__new(void*, unsigned long);
probe object__ref(void*, unsigned long, unsigned int);
probe object__unref(void*, unsigned long, unsigned int);
probe object__dispose(void*, unsigned long, unsigned int);
probe object__dispose__end(void*, unsigned long, unsigned int);
probe object__finalize(void*, unsigned long);
probe object__finalize__end(void*, unsigned long);
probe signal__new(unsigned int, char *, unsigned long);
probe signal__emit(unsigned int, unsigned int, void *, unsigned long);
probe signal__emit__end(unsigned int, unsigned int, void *, unsigned long);
probe type__new(char *, uintmax_t, uintmax_t);
probe object__new(void*, uintmax_t);
probe object__ref(void*, uintmax_t, int);
probe object__unref(void*, uintmax_t, int);
probe object__dispose(void*, uintmax_t, unsigned int);
probe object__dispose__end(void*, uintmax_t, unsigned int);
probe object__finalize(void*, uintmax_t);
probe object__finalize__end(void*, uintmax_t);
probe signal__new(unsigned int, char *, uintmax_t);
probe signal__emit(unsigned int, unsigned int, void *, uintmax_t);
probe signal__emit__end(unsigned int, unsigned int, void *, uintmax_t);
};

View File

@@ -26,8 +26,9 @@
#include "config.h"
#include <string.h>
#include <signal.h>
#include <stdint.h>
#include <string.h>
#include "gsignal.h"
#include "gtype-private.h"
@@ -1694,7 +1695,7 @@ g_signal_newv (const gchar *signal_name,
key.quark = g_quark_from_string (name);
g_signal_key_bsa = g_bsearch_array_insert (g_signal_key_bsa, &g_signal_key_bconfig, &key);
TRACE(GOBJECT_SIGNAL_NEW(signal_id, name, itype));
TRACE (GOBJECT_SIGNAL_NEW (signal_id, name, (uintmax_t) itype));
}
node->destroyed = FALSE;
@@ -3415,12 +3416,12 @@ signal_emit_valist_unlocked (gpointer instance,
if (closure != NULL)
{
TRACE(GOBJECT_SIGNAL_EMIT(signal_id, detail, instance, instance_type));
TRACE (GOBJECT_SIGNAL_EMIT (signal_id, detail, instance, (uintmax_t) instance_type));
SIGNAL_UNLOCK ();
SIGNAL_UNLOCK ();
if (rtype != G_TYPE_NONE)
g_value_init (&emission_return, rtype);
if (rtype != G_TYPE_NONE)
g_value_init (&emission_return, rtype);
if (node_copy.accumulator)
g_value_init (&accu, rtype);
@@ -3484,8 +3485,8 @@ signal_emit_valist_unlocked (gpointer instance,
*/
}
}
TRACE(GOBJECT_SIGNAL_EMIT_END(signal_id, detail, instance, instance_type));
TRACE (GOBJECT_SIGNAL_EMIT_END (signal_id, detail, instance, (uintmax_t) instance_type));
/* See comment above paired ref above */
#ifndef __COVERITY__

View File

@@ -481,7 +481,7 @@ type_node_any_new_W (TypeNode *pnode,
pnode->children[i] = type;
}
TRACE(GOBJECT_TYPE_NEW(name, node->supers[1], type));
TRACE (GOBJECT_TYPE_NEW (name, node->supers[1], (uintmax_t) type));
node->plugin = plugin;
node->n_children = 0;
@@ -1906,7 +1906,7 @@ g_type_create_instance (GType type)
}
#endif
TRACE(GOBJECT_OBJECT_NEW(instance, type));
TRACE (GOBJECT_OBJECT_NEW (instance, (uintmax_t) type));
return instance;
}