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:
Christian Hergert
2019-05-28 13:54:14 -07:00
parent 6e3632c0e5
commit 649dcf3aac

View File

@ -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.