mirror of
https://github.com/checkpoint-restore/criu
synced 2025-09-01 06:45:35 +00:00
dump, kernel: Add some mm structure members into the dump
Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com>
This commit is contained in:
56
cr-dump.c
56
cr-dump.c
@@ -417,12 +417,19 @@ err:
|
||||
#define assign_array(dst, src, e) memcpy(&dst.e, &src.e, sizeof(dst.e))
|
||||
|
||||
static int get_task_stat(pid_t pid, u8 *comm, u32 *flags,
|
||||
u64 *start_code, u64 *end_code)
|
||||
u64 *start_code, u64 *end_code,
|
||||
u64 *start_data, u64 *end_data,
|
||||
u64 *start_stack, u64 *start_brk)
|
||||
{
|
||||
FILE *file = NULL;
|
||||
char *tok1, *tok2;
|
||||
int i, ret = -1;
|
||||
|
||||
/*
|
||||
* NOTE: Be careful, /proc/$pid/stat has a parasite
|
||||
* '0' symbol at argument 20 in format string.
|
||||
*/
|
||||
|
||||
snprintf(loc_buf, sizeof(loc_buf), "/proc/%d/stat", pid);
|
||||
file = fopen(loc_buf, "r");
|
||||
if (!file) {
|
||||
@@ -448,7 +455,7 @@ static int get_task_stat(pid_t pid, u8 *comm, u32 *flags,
|
||||
if (!ret) {
|
||||
ret = -1;
|
||||
for (i = 0; i < 7; i++) {
|
||||
tok1 = strtok(NULL, " ");
|
||||
tok1 = strtok(NULL, " \n\t");
|
||||
if (!tok1)
|
||||
goto err_corrupted;
|
||||
}
|
||||
@@ -458,22 +465,53 @@ static int get_task_stat(pid_t pid, u8 *comm, u32 *flags,
|
||||
|
||||
if (!ret) {
|
||||
ret = -1;
|
||||
for (i = 0; i < 15; i++) {
|
||||
tok1 = strtok(NULL, " ");
|
||||
for (i = 0; i < 16; i++) {
|
||||
tok1 = strtok(NULL, " \n\t");
|
||||
if (!tok1)
|
||||
goto err_corrupted;
|
||||
}
|
||||
|
||||
tok1 = strtok(NULL, " ");
|
||||
tok1 = strtok(NULL, " \n\t");
|
||||
if (!tok1)
|
||||
goto err_corrupted;
|
||||
*start_code = atol(tok1);
|
||||
|
||||
tok1 = strtok(NULL, " ");
|
||||
tok1 = strtok(NULL, " \n\t");
|
||||
if (!tok1)
|
||||
goto err_corrupted;
|
||||
*end_code = atol(tok1);
|
||||
ret = 0;
|
||||
|
||||
tok1 = strtok(NULL, " \n\t");
|
||||
if (!tok1)
|
||||
goto err_corrupted;
|
||||
*start_stack = atol(tok1);
|
||||
ret = 0;
|
||||
}
|
||||
|
||||
if (!ret) {
|
||||
ret = -1;
|
||||
for (i = 0; i < 16; i++) {
|
||||
tok1 = strtok(NULL, " \n\t");
|
||||
if (!tok1)
|
||||
goto err_corrupted;
|
||||
}
|
||||
|
||||
tok1 = strtok(NULL, " \n\t");
|
||||
if (!tok1)
|
||||
goto err_corrupted;
|
||||
*start_data = atol(tok1);
|
||||
|
||||
tok1 = strtok(NULL, " \n\t");
|
||||
if (!tok1)
|
||||
goto err_corrupted;
|
||||
*end_data = atol(tok1);
|
||||
|
||||
tok1 = strtok(NULL, " \n\t");
|
||||
if (!tok1)
|
||||
goto err_corrupted;
|
||||
*start_brk = atol(tok1);
|
||||
ret = 0;
|
||||
}
|
||||
|
||||
err:
|
||||
@@ -645,7 +683,11 @@ static int dump_task_core_seized(pid_t pid, struct cr_fdset *cr_fdset)
|
||||
ret = get_task_stat(pid, core->task_comm,
|
||||
&core->task_flags,
|
||||
&core->mm_start_code,
|
||||
&core->mm_end_code);
|
||||
&core->mm_end_code,
|
||||
&core->mm_start_data,
|
||||
&core->mm_end_data,
|
||||
&core->mm_start_stack,
|
||||
&core->mm_start_brk);
|
||||
if (ret)
|
||||
goto err_free;
|
||||
pr_info("OK\n");
|
||||
|
Reference in New Issue
Block a user