Commit 1998fbfa authored by Cyrill Gorcunov's avatar Cyrill Gorcunov Committed by Pavel Emelyanov

pie: relocs -- Fix compilation on ARM

Otherwise getting

 | parasite-syscall.c: In function ‘parasite_infect_seized’:
 | parasite-syscall.c:1222:5: error: ‘elf_relocs’ undeclared (first use in this function)

Simply wrap the @elf_relocs_apply with macros.
Reported-by: 's avatarAndrey Vagin <avagin@openvz.org>
Signed-off-by: 's avatarCyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
parent c7d646af
...@@ -2390,9 +2390,7 @@ static int remap_restorer_blob(void *addr) ...@@ -2390,9 +2390,7 @@ static int remap_restorer_blob(void *addr)
return -1; return -1;
} }
elf_relocs_apply(addr, addr, sizeof(restorer_blob), ELF_RELOCS_APPLY_RESTORER(addr, addr);
restorer_relocs, ARRAY_SIZE(restorer_relocs));
return 0; return 0;
} }
......
...@@ -1218,8 +1218,7 @@ struct parasite_ctl *parasite_infect_seized(pid_t pid, struct pstree_item *item, ...@@ -1218,8 +1218,7 @@ 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(ctl->local_map, ctl->remote_map, sizeof(parasite_blob), ELF_RELOCS_APPLY_PARASITE(ctl->local_map, ctl->remote_map);
parasite_relocs, ARRAY_SIZE(parasite_relocs));
/* 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, __export_parasite_head_start);
......
...@@ -7,11 +7,23 @@ ...@@ -7,11 +7,23 @@
#include "config.h" #include "config.h"
#if defined(CONFIG_X86_64) || defined(CONFIG_X86_32) || defined(CONFIG_PPC64) #if defined(CONFIG_X86_64) || defined(CONFIG_X86_32) || defined(CONFIG_PPC64)
extern __maybe_unused void elf_relocs_apply(void *mem, void *vbase, size_t size,
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)) #define PIE_SIZE(__blob_name) (round_up(sizeof(__blob_name) + nr_gotpcrel * sizeof(long), PAGE_SIZE))
extern __maybe_unused void elf_relocs_apply(void *mem, void *vbase, size_t size, elf_reloc_t *elf_relocs, size_t nr_relocs); #define ELF_RELOCS_APPLY_PARASITE(__mem, __vbase) \
elf_relocs_apply(__mem, __vbase, sizeof(parasite_blob), \
parasite_relocs, ARRAY_SIZE(parasite_relocs))
#define ELF_RELOCS_APPLY_RESTORER(__mem, __vbase) \
elf_relocs_apply(__mem, __vbase, sizeof(restorer_blob), \
restorer_relocs, ARRAY_SIZE(restorer_relocs))
#else #else
#define PIE_SIZE(__blob_name) (round_up(sizeof(__blob_name), PAGE_SIZE)) #define PIE_SIZE(__blob_name) (round_up(sizeof(__blob_name), PAGE_SIZE))
static always_inline void elf_relocs_apply(void *mem, void *vbase, size_t size, elf_reloc_t *elf_relocs, size_t nr_relocs) { } #define ELF_RELOCS_APPLY_PARASITE(__mem, __vbase)
#define ELF_RELOCS_APPLY_RESTORER(__mem, __vbase)
#endif #endif
#endif /* __PIE_RELOCS_H__ */ #endif /* __PIE_RELOCS_H__ */
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