Commit 99466eb3 authored by Cyrill Gorcunov's avatar Cyrill Gorcunov

dump: Add dumping a tasks's flags

We need it to figure out if FPU was used
so that we need to restore context later.
Signed-off-by: 's avatarCyrill Gorcunov <gorcunov@gmail.com>
parent 6307ce67
...@@ -416,11 +416,11 @@ err: ...@@ -416,11 +416,11 @@ err:
#define assign_reg(dst, src, e) dst.e = (__typeof__(dst.e))src.e #define assign_reg(dst, src, e) dst.e = (__typeof__(dst.e))src.e
#define assign_array(dst, src, e) memcpy(&dst.e, &src.e, sizeof(dst.e)) #define assign_array(dst, src, e) memcpy(&dst.e, &src.e, sizeof(dst.e))
static int get_task_comm(pid_t pid, u8 *comm) static int get_task_stat(pid_t pid, u8 *comm, u32 *flags)
{ {
FILE *file = NULL; FILE *file = NULL;
char *tok1, *tok2; char *tok1, *tok2;
int ret = -1; int i, ret = -1;
snprintf(loc_buf, sizeof(loc_buf), "/proc/%d/stat", pid); snprintf(loc_buf, sizeof(loc_buf), "/proc/%d/stat", pid);
file = fopen(loc_buf, "r"); file = fopen(loc_buf, "r");
...@@ -444,6 +444,19 @@ static int get_task_comm(pid_t pid, u8 *comm) ...@@ -444,6 +444,19 @@ static int get_task_comm(pid_t pid, u8 *comm)
ret = -1; ret = -1;
} }
if (!ret) {
ret = -1;
for (i = 0; i < 8; i++) {
tok1 = strtok(NULL, " ");
if (!tok1) {
pr_err("/proc/%d/stat is corrupted", pid);
goto err;
}
}
*flags = atoi(tok1);
ret = 0;
}
err: err:
if (file) if (file)
fclose(file); fclose(file);
...@@ -604,8 +617,8 @@ static int dump_task_core_seized(pid_t pid, struct cr_fdset *cr_fdset) ...@@ -604,8 +617,8 @@ static int dump_task_core_seized(pid_t pid, struct cr_fdset *cr_fdset)
goto err_free; goto err_free;
pr_info("OK\n"); pr_info("OK\n");
pr_info("Obtainting task command ... "); pr_info("Obtainting task stat ... ");
ret = get_task_comm(pid, core->comm); ret = get_task_stat(pid, core->comm, &core->flags);
if (ret) if (ret)
goto err_free; goto err_free;
pr_info("OK\n"); pr_info("OK\n");
......
...@@ -159,6 +159,8 @@ struct user_fpregs_entry { ...@@ -159,6 +159,8 @@ struct user_fpregs_entry {
#define GDT_ENTRY_TLS_ENTRIES 3 #define GDT_ENTRY_TLS_ENTRIES 3
#define TASK_COMM_LEN 16 #define TASK_COMM_LEN 16
#define TASK_PF_USED_MATH 0x00002000
struct core_entry { struct core_entry {
struct image_header hdr; struct image_header hdr;
struct user_regs_entry gpregs; struct user_regs_entry gpregs;
...@@ -166,6 +168,7 @@ struct core_entry { ...@@ -166,6 +168,7 @@ struct core_entry {
struct desc_struct tls_array[GDT_ENTRY_TLS_ENTRIES]; struct desc_struct tls_array[GDT_ENTRY_TLS_ENTRIES];
u32 personality; u32 personality;
u8 comm[TASK_COMM_LEN]; u8 comm[TASK_COMM_LEN];
u32 flags;
} __packed; } __packed;
#endif /* CONFIG_X86_64 */ #endif /* CONFIG_X86_64 */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment