mirror of
https://github.com/checkpoint-restore/criu.git
synced 2026-01-23 02:14:37 +00:00
s390:compel: Enable s390 in compel/
Add s390 parts to common code files. Patch history ------------- v2->v3: * Add: s390: Consolidate -msoft-float into Makefile.compel Reviewed-by: Alice Frosi <alice@linux.vnet.ibm.com> Signed-off-by: Michael Holzheu <holzheu@linux.vnet.ibm.com> Reviewed-by: Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
This commit is contained in:
parent
7ce8f56be2
commit
8b23923640
4 changed files with 37 additions and 0 deletions
|
|
@ -70,3 +70,11 @@ compel/$(LIBCOMPEL_SO): compel/$(LIBCOMPEL_A)
|
|||
compel-install-targets += compel/$(LIBCOMPEL_SO)
|
||||
compel-install-targets += compel/compel
|
||||
compel-install-targets += $(compel-plugins)
|
||||
|
||||
# We assume that compel code does not change floating point registers.
|
||||
# On s390 gcc uses fprs to cache gprs. Therefore disable floating point
|
||||
# with -msoft-float.
|
||||
ifeq ($(ARCH),s390)
|
||||
CFLAGS += -msoft-float
|
||||
HOSTCFLAGS += -msoft-float
|
||||
endif
|
||||
|
|
|
|||
1
compel/.gitignore
vendored
1
compel/.gitignore
vendored
|
|
@ -1,6 +1,7 @@
|
|||
arch/x86/plugins/std/sys-exec-tbl-64.c
|
||||
arch/x86/plugins/std/syscalls-64.S
|
||||
arch/arm/plugins/std/syscalls/syscalls.S
|
||||
arch/s390/plugins/std/syscalls/syscalls.S
|
||||
include/version.h
|
||||
plugins/include/uapi/std/asm/syscall-types.h
|
||||
plugins/include/uapi/std/syscall-64.h
|
||||
|
|
|
|||
|
|
@ -542,6 +542,31 @@ int __handle_elf(void *mem, size_t size)
|
|||
break;
|
||||
#endif
|
||||
|
||||
#ifdef ELF_S390
|
||||
/*
|
||||
* See also arch/s390/kernel/module.c/apply_rela():
|
||||
* A PLT reads the GOT (global offest table). We can handle it like
|
||||
* R_390_PC32DBL because we have linked statically.
|
||||
*/
|
||||
case R_390_PLT32DBL: /* PC relative on a PLT (predure link table) */
|
||||
pr_debug("\t\t\t\tR_390_PLT32DBL at 0x%-4lx val 0x%x\n", place, value32 + addend32);
|
||||
*((int32_t *)where) = (value64 + addend64 - place) >> 1;
|
||||
break;
|
||||
case R_390_PC32DBL: /* PC relative on a symbol */
|
||||
pr_debug("\t\t\t\tR_390_PC32DBL at 0x%-4lx val 0x%x\n", place, value32 + addend32);
|
||||
*((int32_t *)where) = (value64 + addend64 - place) >> 1;
|
||||
break;
|
||||
case R_390_64: /* 64 bit absolute address */
|
||||
pr_debug("\t\t\t\tR_390_64 at 0x%-4lx val 0x%lx\n", place, (long)value64);
|
||||
pr_out(" { .offset = 0x%-8x, .type = COMPEL_TYPE_LONG, "
|
||||
".addend = %-8ld, .value = 0x%-16lx, }, /* R_390_64 */\n",
|
||||
(unsigned int)place, (long)addend64, (long)value64);
|
||||
break;
|
||||
case R_390_PC64: /* 64 bit relative address */
|
||||
*((int64_t *)where) = value64 + addend64 - place;
|
||||
pr_debug("\t\t\t\tR_390_PC64 at 0x%-4lx val 0x%lx\n", place, (long)value64);
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
pr_err("Unsupported relocation of type %lu\n",
|
||||
(unsigned long)ELF_R_TYPE(r->rel.r_info));
|
||||
|
|
|
|||
|
|
@ -52,6 +52,9 @@ static const flags_t flags = {
|
|||
#elif defined CONFIG_PPC64
|
||||
.arch = "ppc64",
|
||||
.cflags = COMPEL_CFLAGS_PIE,
|
||||
#elif defined CONFIG_S390
|
||||
.arch = "s390",
|
||||
.cflags = COMPEL_CFLAGS_PIE,
|
||||
#else
|
||||
#error "CONFIG_<ARCH> not defined, or unsupported ARCH"
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue