elf: skip past /sysroot/ when symbol resolving

The /sysroot/ convention is something we see on OSTree-based systems
such as Silverblue or CoreOS which contains the running image. We can
skip that part of the path so that symbol resolving continues as normal.

We are starting to come into a situation where we need more advanced
path translations because we keep having to do things like this. Until
Linux figures out file-system namespaces at a higher level at least.
This commit is contained in:
Christian Hergert
2021-03-17 12:56:38 -07:00
parent 66c6e8b862
commit 605cdfc3f1

View File

@ -146,13 +146,24 @@ sysprof_elf_symbol_resolver_load (SysprofSymbolResolver *resolver,
{
const SysprofCaptureMap *ev = sysprof_capture_reader_read_map (reader);
SysprofMapLookaside *lookaside = g_hash_table_lookup (self->lookasides, GINT_TO_POINTER (ev->frame.pid));
const char *filename;
SysprofMap map;
/* Some systems using OSTree will have /sysroot/ as a prefix for
* filenames, which we want to skip over so that we can resolve the
* files as we see them inside the user-space view of the system.
*/
if (memcmp (ev->filename, "/sysroot/", 9) == 0)
filename = ev->filename + 9;
else
filename = ev->filename;
map.start = ev->start;
map.end = ev->end;
map.offset = ev->offset;
map.inode = ev->inode;
map.filename = ev->filename;
map.filename = filename;
if (lookaside == NULL)
{