Commit 72e4804b authored by Pavel Emelyanov's avatar Pavel Emelyanov Committed by Andrei Vagin

compel: Prepare to hide parasite_thread_ctl

This only means introducing a compel_get_task_regs wrapper
over the get_task_regs() call that works on thread-ctl, not
thread-ctx.
Signed-off-by: 's avatarPavel Emelyanov <xemul@virtuozzo.com>
Signed-off-by: 's avatarAndrei Vagin <avagin@virtuozzo.com>
parent fc0b62e9
...@@ -26,7 +26,7 @@ static inline void __always_unused __check_code_syscall(void) ...@@ -26,7 +26,7 @@ static inline void __always_unused __check_code_syscall(void)
BUILD_BUG_ON(!is_log2(sizeof(code_syscall))); BUILD_BUG_ON(!is_log2(sizeof(code_syscall)));
} }
int compel_get_task_regs(pid_t pid, user_regs_struct_t regs, save_regs_t save, void *arg) int get_task_regs(pid_t pid, user_regs_struct_t regs, save_regs_t save, void *arg)
{ {
struct iovec iov; struct iovec iov;
user_fpregs_struct_t fpsimd; user_fpregs_struct_t fpsimd;
......
...@@ -26,7 +26,7 @@ static inline __always_unused void __check_code_syscall(void) ...@@ -26,7 +26,7 @@ static inline __always_unused void __check_code_syscall(void)
} }
#define PTRACE_GETVFPREGS 27 #define PTRACE_GETVFPREGS 27
int compel_get_task_regs(pid_t pid, user_regs_struct_t regs, save_regs_t save, void *arg) int get_task_regs(pid_t pid, user_regs_struct_t regs, save_regs_t save, void *arg)
{ {
user_fpregs_struct_t vfp; user_fpregs_struct_t vfp;
int ret = -1; int ret = -1;
......
...@@ -244,7 +244,7 @@ static int __get_task_regs(pid_t pid, user_regs_struct_t *regs, ...@@ -244,7 +244,7 @@ static int __get_task_regs(pid_t pid, user_regs_struct_t *regs,
return 0; return 0;
} }
int compel_get_task_regs(pid_t pid, user_regs_struct_t regs, save_regs_t save, void *arg) int get_task_regs(pid_t pid, user_regs_struct_t regs, save_regs_t save, void *arg)
{ {
user_fpregs_struct_t fpregs; user_fpregs_struct_t fpregs;
int ret; int ret;
......
...@@ -51,7 +51,7 @@ static inline __always_unused void __check_code_syscall(void) ...@@ -51,7 +51,7 @@ static inline __always_unused void __check_code_syscall(void)
((user_regs_native(pregs)) ? (int64_t)((pregs)->native.name) : \ ((user_regs_native(pregs)) ? (int64_t)((pregs)->native.name) : \
(int32_t)((pregs)->compat.name)) (int32_t)((pregs)->compat.name))
int compel_get_task_regs(pid_t pid, user_regs_struct_t regs, save_regs_t save, void *arg) int get_task_regs(pid_t pid, user_regs_struct_t regs, save_regs_t save, void *arg)
{ {
user_fpregs_struct_t xsave = { }, *xs = NULL; user_fpregs_struct_t xsave = { }, *xs = NULL;
......
...@@ -55,5 +55,6 @@ extern void *remote_mmap(struct parasite_ctl *ctl, ...@@ -55,5 +55,6 @@ extern void *remote_mmap(struct parasite_ctl *ctl,
void *addr, size_t length, int prot, void *addr, size_t length, int prot,
int flags, int fd, off_t offset); int flags, int fd, off_t offset);
extern bool arch_can_dump_task(struct parasite_ctl *ctl); extern bool arch_can_dump_task(struct parasite_ctl *ctl);
extern int get_task_regs(pid_t pid, user_regs_struct_t regs, save_regs_t save, void *arg);
#endif #endif
...@@ -146,7 +146,7 @@ struct parasite_blob_desc { ...@@ -146,7 +146,7 @@ struct parasite_blob_desc {
extern struct parasite_blob_desc *compel_parasite_blob_desc(struct parasite_ctl *); extern struct parasite_blob_desc *compel_parasite_blob_desc(struct parasite_ctl *);
typedef int (*save_regs_t)(void *, user_regs_struct_t *, user_fpregs_struct_t *); typedef int (*save_regs_t)(void *, user_regs_struct_t *, user_fpregs_struct_t *);
extern int compel_get_task_regs(pid_t pid, user_regs_struct_t regs, save_regs_t, void *); extern int compel_get_thread_regs(pid_t pid, struct parasite_thread_ctl *, save_regs_t, void *);
extern void compel_relocs_apply(void *mem, void *vbase, size_t size, compel_reloc_t *elf_relocs, size_t nr_relocs); extern void compel_relocs_apply(void *mem, void *vbase, size_t size, compel_reloc_t *elf_relocs, size_t nr_relocs);
......
...@@ -616,7 +616,7 @@ static int parasite_start_daemon(struct parasite_ctl *ctl) ...@@ -616,7 +616,7 @@ static int parasite_start_daemon(struct parasite_ctl *ctl)
* while in daemon it is not such. * while in daemon it is not such.
*/ */
if (compel_get_task_regs(pid, ctl->orig.regs, ictx->save_regs, ictx->regs_arg)) { if (get_task_regs(pid, ctl->orig.regs, ictx->save_regs, ictx->regs_arg)) {
pr_err("Can't obtain regs for thread %d\n", pid); pr_err("Can't obtain regs for thread %d\n", pid);
return -1; return -1;
} }
...@@ -1297,6 +1297,11 @@ k_rtsigset_t *compel_task_sigmask(struct parasite_ctl *ctl) ...@@ -1297,6 +1297,11 @@ k_rtsigset_t *compel_task_sigmask(struct parasite_ctl *ctl)
return thread_ctx_sigmask(&ctl->orig); return thread_ctx_sigmask(&ctl->orig);
} }
int compel_get_thread_regs(pid_t pid, struct parasite_thread_ctl *tctl, save_regs_t save, void * arg)
{
return get_task_regs(pid, tctl->th.regs, save, arg);
}
struct infect_ctx *compel_infect_ctx(struct parasite_ctl *ctl) struct infect_ctx *compel_infect_ctx(struct parasite_ctl *ctl)
{ {
return &ctl->ictx; return &ctl->ictx;
......
...@@ -215,7 +215,7 @@ int parasite_dump_thread_seized(struct parasite_ctl *ctl, int id, ...@@ -215,7 +215,7 @@ int parasite_dump_thread_seized(struct parasite_ctl *ctl, int id,
goto err_rth; goto err_rth;
} }
ret = compel_get_task_regs(pid, tctl->th.regs, save_task_regs, core); ret = compel_get_thread_regs(pid, tctl, save_task_regs, core);
if (ret) { if (ret) {
pr_err("Can't obtain regs for thread %d\n", pid); pr_err("Can't obtain regs for thread %d\n", pid);
goto err_rth; goto err_rth;
......
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