Commit 29a434c4 authored by Dmitry Safonov's avatar Dmitry Safonov Committed by Andrei Vagin

parasite: refactor macros for compat/native usage

In code they yet use native parasite type, but in definition
this parameter is not used (will be used at the next patch).
Signed-off-by: 's avatarDmitry Safonov <dsafonov@virtuozzo.com>
Acked-by: 's avatarCyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: 's avatarPavel Emelyanov <xemul@virtuozzo.com>
Signed-off-by: 's avatarAndrei Vagin <avagin@virtuozzo.com>
parent 65566abd
...@@ -2326,7 +2326,7 @@ static int prepare_restorer_blob(void) ...@@ -2326,7 +2326,7 @@ static int prepare_restorer_blob(void)
* in turn will lead to set-exe-file prctl to fail with EBUSY. * in turn will lead to set-exe-file prctl to fail with EBUSY.
*/ */
restorer_len = pie_size(restorer_blob); restorer_len = pie_size(restorer);
restorer = mmap(NULL, restorer_len, restorer = mmap(NULL, restorer_len,
PROT_READ | PROT_WRITE | PROT_EXEC, PROT_READ | PROT_WRITE | PROT_EXEC,
MAP_PRIVATE | MAP_ANON, 0, 0); MAP_PRIVATE | MAP_ANON, 0, 0);
...@@ -2350,7 +2350,7 @@ static int remap_restorer_blob(void *addr) ...@@ -2350,7 +2350,7 @@ static int remap_restorer_blob(void *addr)
return -1; return -1;
} }
ELF_RELOCS_APPLY_RESTORER(addr, addr); ELF_RELOCS_APPLY(restorer, addr, addr);
return 0; return 0;
} }
......
...@@ -276,7 +276,10 @@ struct parasite_dump_cgroup_args { ...@@ -276,7 +276,10 @@ struct parasite_dump_cgroup_args {
}; };
/* the parasite prefix is added by gen_offsets.sh */ /* the parasite prefix is added by gen_offsets.sh */
#define parasite_sym(pblob, name) ((void *)(pblob) + parasite_blob_offset__##name) #define __pblob_offset(ptype, symbol) \
parasite ## _blob_offset__ ## symbol
#define parasite_sym(pblob, ptype, symbol) \
((void *)(pblob) + __pblob_offset(ptype, symbol))
#endif /* !__ASSEMBLY__ */ #endif /* !__ASSEMBLY__ */
......
...@@ -226,7 +226,6 @@ enum { ...@@ -226,7 +226,6 @@ enum {
/* the restorer_blob_offset__ prefix is added by gen_offsets.sh */ /* the restorer_blob_offset__ prefix is added by gen_offsets.sh */
#define __blob_offset(name) restorer_blob_offset__ ## name #define __blob_offset(name) restorer_blob_offset__ ## name
#define _blob_offset(name) __blob_offset(name) #define restorer_sym(rblob, name) (void*)(rblob + __blob_offset(name))
#define restorer_sym(rblob, name) (void*)(rblob + _blob_offset(name))
#endif /* __CR_RESTORER_H__ */ #endif /* __CR_RESTORER_H__ */
...@@ -1344,6 +1344,7 @@ static int parasite_start_daemon(struct parasite_ctl *ctl, struct pstree_item *i ...@@ -1344,6 +1344,7 @@ static int parasite_start_daemon(struct parasite_ctl *ctl, struct pstree_item *i
return 0; return 0;
} }
/* FIXME: parasite native/compat */
struct parasite_ctl *parasite_infect_seized(pid_t pid, struct pstree_item *item, struct parasite_ctl *parasite_infect_seized(pid_t pid, struct pstree_item *item,
struct vm_area_list *vma_area_list) struct vm_area_list *vma_area_list)
{ {
...@@ -1377,7 +1378,7 @@ struct parasite_ctl *parasite_infect_seized(pid_t pid, struct pstree_item *item, ...@@ -1377,7 +1378,7 @@ struct parasite_ctl *parasite_infect_seized(pid_t pid, struct pstree_item *item,
ctl->args_size = round_up(parasite_args_size, PAGE_SIZE); ctl->args_size = round_up(parasite_args_size, PAGE_SIZE);
parasite_args_size = PARASITE_ARG_SIZE_MIN; /* reset for next task */ parasite_args_size = PARASITE_ARG_SIZE_MIN; /* reset for next task */
map_exchange_size = pie_size(parasite_blob) + ctl->args_size; map_exchange_size = pie_size(parasite) + ctl->args_size;
map_exchange_size += RESTORE_STACK_SIGFRAME + PARASITE_STACK_SIZE; map_exchange_size += RESTORE_STACK_SIGFRAME + PARASITE_STACK_SIZE;
if (item->nr_threads > 1) if (item->nr_threads > 1)
map_exchange_size += PARASITE_STACK_SIZE; map_exchange_size += PARASITE_STACK_SIZE;
...@@ -1391,14 +1392,14 @@ struct parasite_ctl *parasite_infect_seized(pid_t pid, struct pstree_item *item, ...@@ -1391,14 +1392,14 @@ struct parasite_ctl *parasite_infect_seized(pid_t pid, struct pstree_item *item,
pr_info("Putting parasite blob into %p->%p\n", ctl->local_map, ctl->remote_map); pr_info("Putting parasite blob into %p->%p\n", ctl->local_map, ctl->remote_map);
memcpy(ctl->local_map, parasite_blob, sizeof(parasite_blob)); memcpy(ctl->local_map, parasite_blob, sizeof(parasite_blob));
ELF_RELOCS_APPLY_PARASITE(ctl->local_map, ctl->remote_map); ELF_RELOCS_APPLY(parasite, ctl->local_map, ctl->remote_map);
/* Setup the rest of a control block */ /* Setup the rest of a control block */
ctl->parasite_ip = (unsigned long)parasite_sym(ctl->remote_map, __export_parasite_head_start); ctl->parasite_ip = (unsigned long)parasite_sym(ctl->remote_map, native, __export_parasite_head_start);
ctl->addr_cmd = parasite_sym(ctl->local_map, __export_parasite_cmd); ctl->addr_cmd = parasite_sym(ctl->local_map, native, __export_parasite_cmd);
ctl->addr_args = parasite_sym(ctl->local_map, __export_parasite_args); ctl->addr_args = parasite_sym(ctl->local_map, native, __export_parasite_args);
p = pie_size(parasite_blob) + ctl->args_size; p = pie_size(parasite) + ctl->args_size;
ctl->rsigframe = ctl->remote_map + p; ctl->rsigframe = ctl->remote_map + p;
ctl->sigframe = ctl->local_map + p; ctl->sigframe = ctl->local_map + p;
......
...@@ -85,7 +85,11 @@ $(obj)/%.built-in.bin.o: $(obj)/%.built-in.o $(obj)/native.lib.a $(obj)/$(PIELDS ...@@ -85,7 +85,11 @@ $(obj)/%.built-in.bin.o: $(obj)/%.built-in.o $(obj)/native.lib.a $(obj)/$(PIELDS
$(obj)/%-blob.h: $(obj)/%.built-in.bin.o $(obj)/$(PIELDS) compel/compel $(obj)/%-blob.h: $(obj)/%.built-in.bin.o $(obj)/$(PIELDS) compel/compel
$(call msg-gen, $@) $(call msg-gen, $@)
$(Q) compel/compel piegen -f $< -v $(call target-name,$@)_relocs -p $(call target-name,$@)_blob_offset__ -s $(call target-name,$@)_blob -o $@ $(piegen_stdout) $(Q) compel/compel piegen -f $< \
-v $(call target-name,$@)_relocs \
-p $(call target-name,$@)_blob_offset__ \
-s $(call target-name,$@)_blob \
-o $@ $(piegen_stdout)
else else
......
...@@ -10,19 +10,17 @@ ...@@ -10,19 +10,17 @@
extern __maybe_unused void elf_relocs_apply(void *mem, void *vbase, size_t size, extern __maybe_unused void elf_relocs_apply(void *mem, void *vbase, size_t size,
elf_reloc_t *elf_relocs, size_t nr_relocs); elf_reloc_t *elf_relocs, size_t nr_relocs);
#define pie_size(__blob_name) (round_up(sizeof(__blob_name) + nr_gotpcrel * sizeof(long), page_size())) /* FIXME: native/compat pie's pie_size(), ELF_RELOCS_APPLY() */
#define ELF_RELOCS_APPLY_PARASITE(__mem, __vbase) \ #define pie_size(__pie_name) (round_up(sizeof(__pie_name##_blob) + \
elf_relocs_apply(__mem, __vbase, sizeof(parasite_blob), \ __pie_name ## _nr_gotpcrel * sizeof(long), page_size()))
parasite_relocs, ARRAY_SIZE(parasite_relocs)) #define ELF_RELOCS_APPLY(__pie_name, __mem, __vbase) \
#define ELF_RELOCS_APPLY_RESTORER(__mem, __vbase) \ elf_relocs_apply(__mem, __vbase, sizeof(__pie_name##_blob), \
elf_relocs_apply(__mem, __vbase, sizeof(restorer_blob), \ __pie_name##_relocs, ARRAY_SIZE(__pie_name##_relocs))
restorer_relocs, ARRAY_SIZE(restorer_relocs))
#else #else
#define pie_size(__blob_name) (round_up(sizeof(__blob_name), page_size())) #define pie_size(__pie_name) (round_up(sizeof(__pie_name##_blob), page_size()))
#define ELF_RELOCS_APPLY_PARASITE(__mem, __vbase) #define ELF_RELOCS_APPLY(__pie_name, __mem, __vbase)
#define ELF_RELOCS_APPLY_RESTORER(__mem, __vbase)
#endif #endif
......
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