capture: rename PidRoot to Overlay and add src/dst

Really what we want to deal with here is tracking an overlay that we may
need to be able to decode after the fact (in case processes exit or we
need to do post-processing symbol resolution).

For the podman case, that is $some_path mapped to root (/), generally
speaking. For flatpak though, that would have two mappings, one for
/app and another for /usr (possibly more).
This commit is contained in:
Christian Hergert
2021-02-25 13:43:09 -08:00
parent 8b0f3f4682
commit 14139232d5
11 changed files with 153 additions and 62 deletions

View File

@ -828,20 +828,27 @@ sysprof_capture_writer_add_fork (SysprofCaptureWriter *self,
}
bool
sysprof_capture_writer_add_pid_root (SysprofCaptureWriter *self,
int64_t time,
int cpu,
int32_t pid,
const char *path,
uint32_t layer)
sysprof_capture_writer_add_overlay (SysprofCaptureWriter *self,
int64_t time,
int cpu,
int32_t pid,
uint32_t layer,
const char *src,
const char *dst)
{
SysprofCapturePidRoot *ev;
size_t strl = strlen (path);
size_t len = sizeof *ev + strl + 1;
SysprofCaptureOverlay *ev;
size_t srclen = strlen (src);
size_t dstlen = strlen (dst);
size_t len = sizeof *ev + srclen + 1 + dstlen + 1;
assert (self != NULL);
assert (src != NULL);
assert (dst != NULL);
ev = (SysprofCapturePidRoot *)sysprof_capture_writer_allocate (self, &len);
if (srclen > INT16_MAX || dstlen > INT16_MAX)
return false;
ev = (SysprofCaptureOverlay *)sysprof_capture_writer_allocate (self, &len);
if (!ev)
return false;
@ -850,12 +857,19 @@ sysprof_capture_writer_add_pid_root (SysprofCaptureWriter *self,
cpu,
pid,
time,
SYSPROF_CAPTURE_FRAME_PID_ROOT);
ev->layer = layer;
memcpy (ev->path, path, strl);
ev->path[strl] = 0;
SYSPROF_CAPTURE_FRAME_OVERLAY);
self->stat.frame_count[SYSPROF_CAPTURE_FRAME_PID_ROOT]++;
ev->layer = layer;
ev->src_len = srclen;
ev->dst_len = dstlen;
memcpy (&ev->data[0], src, srclen);
memcpy (&ev->data[srclen+1], dst, dstlen);
ev->data[srclen] = 0;
ev->data[srclen+1+dstlen] = 0;
self->stat.frame_count[SYSPROF_CAPTURE_FRAME_OVERLAY]++;
return true;
}