mirror of
https://github.com/varun-r-mallya/sysprof.git
synced 2026-02-12 16:10:54 +00:00
libsysprof: add trailing empty kernel node
This can be used so that we always know a symbol will be after the returned symbol (so we can look for peer address).
This commit is contained in:
@ -111,6 +111,7 @@ do_shared_init (void)
|
|||||||
SysprofKernelSymbols *
|
SysprofKernelSymbols *
|
||||||
_sysprof_kernel_symbols_new_from_kallsyms (SysprofKallsyms *kallsyms)
|
_sysprof_kernel_symbols_new_from_kallsyms (SysprofKallsyms *kallsyms)
|
||||||
{
|
{
|
||||||
|
static const SysprofKernelSymbol empty = {0};
|
||||||
SysprofKernelSymbols *self;
|
SysprofKernelSymbols *self;
|
||||||
const gchar *name;
|
const gchar *name;
|
||||||
guint64 addr;
|
guint64 addr;
|
||||||
@ -123,6 +124,7 @@ _sysprof_kernel_symbols_new_from_kallsyms (SysprofKallsyms *kallsyms)
|
|||||||
self = g_array_new (FALSE, FALSE, sizeof (SysprofKernelSymbol));
|
self = g_array_new (FALSE, FALSE, sizeof (SysprofKernelSymbol));
|
||||||
|
|
||||||
G_LOCK (kernel_lock);
|
G_LOCK (kernel_lock);
|
||||||
|
|
||||||
while (sysprof_kallsyms_next (kallsyms, &name, &addr, &type))
|
while (sysprof_kallsyms_next (kallsyms, &name, &addr, &type))
|
||||||
{
|
{
|
||||||
if (!type_is_ignored (type))
|
if (!type_is_ignored (type))
|
||||||
@ -135,10 +137,14 @@ _sysprof_kernel_symbols_new_from_kallsyms (SysprofKallsyms *kallsyms)
|
|||||||
g_array_append_val (self, sym);
|
g_array_append_val (self, sym);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
G_UNLOCK (kernel_lock);
|
|
||||||
|
|
||||||
g_array_sort (self, sysprof_kernel_symbol_compare);
|
g_array_sort (self, sysprof_kernel_symbol_compare);
|
||||||
|
|
||||||
|
/* Always add a trailing node */
|
||||||
|
g_array_append_val (self, empty);
|
||||||
|
|
||||||
|
G_UNLOCK (kernel_lock);
|
||||||
|
|
||||||
return g_steal_pointer (&self);
|
return g_steal_pointer (&self);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -224,7 +230,8 @@ _sysprof_kernel_symbols_lookup (const SysprofKernelSymbols *self,
|
|||||||
ret = sysprof_kernel_symbol_lookup ((SysprofKernelSymbol *)(gpointer)self->data,
|
ret = sysprof_kernel_symbol_lookup ((SysprofKernelSymbol *)(gpointer)self->data,
|
||||||
address,
|
address,
|
||||||
0,
|
0,
|
||||||
self->len - 1);
|
/* 1 for right-most, 1 for empty node */
|
||||||
|
self->len - 2);
|
||||||
|
|
||||||
/* We resolve all symbols, including ignored symbols so that we
|
/* We resolve all symbols, including ignored symbols so that we
|
||||||
* don't give back the wrong function juxtapose an ignored func.
|
* don't give back the wrong function juxtapose an ignored func.
|
||||||
|
|||||||
Reference in New Issue
Block a user