x86_64: Add support to build kexec-tools with x32 ABI Summary of changes, configure.ac: Add test for detect x32 ABI. purgatory/arch/x86_64/Makefile: Not use mcmodel large when x32 ABI is set. kexec/arch/x86_64/kexec-elf-rel-x86_64.c: When x32 ABI is set use ELFCLASS32 instead of ELFCLASS64. kexec/kexec-syscall.h: Add correct syscall number for x32 ABI. Upstream-Status: Submitted Signed-off-by: Aníbal Limón Signed-off-by: Mariano Lopez --- configure.ac | 9 +++++++++ kexec/arch/x86_64/kexec-elf-rel-x86_64.c | 4 ++++ kexec/kexec-syscall.h | 4 ++++ purgatory/arch/x86_64/Makefile | 4 +++- 4 files changed, 20 insertions(+), 1 deletion(-) Index: kexec-tools-2.0.10/configure.ac =================================================================== --- kexec-tools-2.0.10.orig/configure.ac +++ kexec-tools-2.0.10/configure.ac @@ -56,6 +56,15 @@ case $target_cpu in ;; ia64|x86_64|alpha|m68k ) ARCH="$target_cpu" + + dnl ---Test for x32 ABI in x86_64 + if test "x$ARCH" = "xx86_64" ; then + AC_EGREP_CPP(x32_test, + [#if defined(__x86_64__) && defined (__ILP32__) + x32_test + #endif + ], SUBARCH='x32', SUBARCH='64') + fi ;; * ) AC_MSG_ERROR([unsupported architecture $target_cpu]) Index: kexec-tools-2.0.10/kexec/arch/x86_64/kexec-elf-rel-x86_64.c =================================================================== --- kexec-tools-2.0.10.orig/kexec/arch/x86_64/kexec-elf-rel-x86_64.c +++ kexec-tools-2.0.10/kexec/arch/x86_64/kexec-elf-rel-x86_64.c @@ -8,7 +8,11 @@ int machine_verify_elf_rel(struct mem_eh if (ehdr->ei_data != ELFDATA2LSB) { return 0; } +#ifdef __ILP32__ + if (ehdr->ei_class != ELFCLASS32) { +#else if (ehdr->ei_class != ELFCLASS64) { +#endif return 0; } if (ehdr->e_machine != EM_X86_64) { Index: kexec-tools-2.0.10/kexec/kexec-syscall.h =================================================================== --- kexec-tools-2.0.10.orig/kexec/kexec-syscall.h +++ kexec-tools-2.0.10/kexec/kexec-syscall.h @@ -31,8 +31,12 @@ #define __NR_kexec_load 268 #endif #ifdef __x86_64__ +#ifdef __ILP32__ +#define __NR_kexec_load 528 +#else #define __NR_kexec_load 246 #endif +#endif #ifdef __s390x__ #define __NR_kexec_load 277 #endif Index: kexec-tools-2.0.10/purgatory/arch/x86_64/Makefile =================================================================== --- kexec-tools-2.0.10.orig/purgatory/arch/x86_64/Makefile +++ kexec-tools-2.0.10/purgatory/arch/x86_64/Makefile @@ -23,4 +23,6 @@ x86_64_PURGATORY_SRCS += purgatory/arch/ x86_64_PURGATORY_SRCS += purgatory/arch/i386/vga.c x86_64_PURGATORY_SRCS += purgatory/arch/i386/pic.c -x86_64_PURGATORY_EXTRA_CFLAGS = -mcmodel=large +ifeq ($(SUBARCH),64) + x86_64_PURGATORY_EXTRA_CFLAGS = -mcmodel=large +endif