1*4882a593SmuzhiyunFrom fd40eee42273220fb0050fe10744b10067adc0a7 Mon Sep 17 00:00:00 2001 2*4882a593SmuzhiyunFrom: =?UTF-8?q?An=C3=ADbal=20Lim=C3=B3n?= <anibal.limon@linux.intel.com> 3*4882a593SmuzhiyunDate: Fri, 31 Aug 2018 17:31:50 +0200 4*4882a593SmuzhiyunSubject: [PATCH] x86_64: Add support to build kexec-tools with x32 ABI 5*4882a593SmuzhiyunMIME-Version: 1.0 6*4882a593SmuzhiyunContent-Type: text/plain; charset=UTF-8 7*4882a593SmuzhiyunContent-Transfer-Encoding: 8bit 8*4882a593Smuzhiyun 9*4882a593SmuzhiyunSummary of changes, 10*4882a593Smuzhiyun 11*4882a593Smuzhiyunconfigure.ac: Add test for detect x32 ABI. 12*4882a593Smuzhiyunpurgatory/arch/x86_64/Makefile: Not use mcmodel large when 13*4882a593Smuzhiyun x32 ABI is set. 14*4882a593Smuzhiyunkexec/arch/x86_64/kexec-elf-rel-x86_64.c: When x32 ABI is set 15*4882a593Smuzhiyun use ELFCLASS32 instead of ELFCLASS64. 16*4882a593Smuzhiyunkexec/kexec-syscall.h: Add correct syscall number for x32 ABI. 17*4882a593Smuzhiyun 18*4882a593SmuzhiyunUpstream-Status: Submitted 19*4882a593Smuzhiyun 20*4882a593SmuzhiyunSigned-off-by: Aníbal Limón <anibal.limon@linux.intel.com> 21*4882a593SmuzhiyunSigned-off-by: Mariano Lopez <mariano.lopez@linux.intel.com> 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun--- 24*4882a593Smuzhiyun configure.ac | 9 +++++++++ 25*4882a593Smuzhiyun kexec/arch/x86_64/kexec-elf-rel-x86_64.c | 4 ++++ 26*4882a593Smuzhiyun kexec/kexec-syscall.h | 4 ++++ 27*4882a593Smuzhiyun purgatory/arch/x86_64/Makefile | 4 +++- 28*4882a593Smuzhiyun 4 files changed, 20 insertions(+), 1 deletion(-) 29*4882a593Smuzhiyun 30*4882a593Smuzhiyundiff --git a/configure.ac b/configure.ac 31*4882a593Smuzhiyunindex e05d601..c428146 100644 32*4882a593Smuzhiyun--- a/configure.ac 33*4882a593Smuzhiyun+++ b/configure.ac 34*4882a593Smuzhiyun@@ -54,6 +54,15 @@ case $target_cpu in 35*4882a593Smuzhiyun ;; 36*4882a593Smuzhiyun ia64|x86_64|alpha|m68k ) 37*4882a593Smuzhiyun ARCH="$target_cpu" 38*4882a593Smuzhiyun+ 39*4882a593Smuzhiyun+ dnl ---Test for x32 ABI in x86_64 40*4882a593Smuzhiyun+ if test "x$ARCH" = "xx86_64" ; then 41*4882a593Smuzhiyun+ AC_EGREP_CPP(x32_test, 42*4882a593Smuzhiyun+ [#if defined(__x86_64__) && defined (__ILP32__) 43*4882a593Smuzhiyun+ x32_test 44*4882a593Smuzhiyun+ #endif 45*4882a593Smuzhiyun+ ], SUBARCH='x32', SUBARCH='64') 46*4882a593Smuzhiyun+ fi 47*4882a593Smuzhiyun ;; 48*4882a593Smuzhiyun * ) 49*4882a593Smuzhiyun AC_MSG_ERROR([unsupported architecture $target_cpu]) 50*4882a593Smuzhiyundiff --git a/kexec/arch/x86_64/kexec-elf-rel-x86_64.c b/kexec/arch/x86_64/kexec-elf-rel-x86_64.c 51*4882a593Smuzhiyunindex 761a4ed..1c0e3f8 100644 52*4882a593Smuzhiyun--- a/kexec/arch/x86_64/kexec-elf-rel-x86_64.c 53*4882a593Smuzhiyun+++ b/kexec/arch/x86_64/kexec-elf-rel-x86_64.c 54*4882a593Smuzhiyun@@ -8,7 +8,11 @@ int machine_verify_elf_rel(struct mem_ehdr *ehdr) 55*4882a593Smuzhiyun if (ehdr->ei_data != ELFDATA2LSB) { 56*4882a593Smuzhiyun return 0; 57*4882a593Smuzhiyun } 58*4882a593Smuzhiyun+#ifdef __ILP32__ 59*4882a593Smuzhiyun+ if (ehdr->ei_class != ELFCLASS32) { 60*4882a593Smuzhiyun+#else 61*4882a593Smuzhiyun if (ehdr->ei_class != ELFCLASS64) { 62*4882a593Smuzhiyun+#endif 63*4882a593Smuzhiyun return 0; 64*4882a593Smuzhiyun } 65*4882a593Smuzhiyun if (ehdr->e_machine != EM_X86_64) { 66*4882a593Smuzhiyundiff --git a/kexec/kexec-syscall.h b/kexec/kexec-syscall.h 67*4882a593Smuzhiyunindex 2a3794d..3e67078 100644 68*4882a593Smuzhiyun--- a/kexec/kexec-syscall.h 69*4882a593Smuzhiyun+++ b/kexec/kexec-syscall.h 70*4882a593Smuzhiyun@@ -31,8 +31,12 @@ 71*4882a593Smuzhiyun #define __NR_kexec_load 268 72*4882a593Smuzhiyun #endif 73*4882a593Smuzhiyun #ifdef __x86_64__ 74*4882a593Smuzhiyun+#ifdef __ILP32__ 75*4882a593Smuzhiyun+#define __NR_kexec_load 528 76*4882a593Smuzhiyun+#else 77*4882a593Smuzhiyun #define __NR_kexec_load 246 78*4882a593Smuzhiyun #endif 79*4882a593Smuzhiyun+#endif 80*4882a593Smuzhiyun #ifdef __s390x__ 81*4882a593Smuzhiyun #define __NR_kexec_load 277 82*4882a593Smuzhiyun #endif 83*4882a593Smuzhiyundiff --git a/purgatory/arch/x86_64/Makefile b/purgatory/arch/x86_64/Makefile 84*4882a593Smuzhiyunindex 7300937..4af11e4 100644 85*4882a593Smuzhiyun--- a/purgatory/arch/x86_64/Makefile 86*4882a593Smuzhiyun+++ b/purgatory/arch/x86_64/Makefile 87*4882a593Smuzhiyun@@ -23,4 +23,6 @@ x86_64_PURGATORY_SRCS += purgatory/arch/i386/console-x86.c 88*4882a593Smuzhiyun x86_64_PURGATORY_SRCS += purgatory/arch/i386/vga.c 89*4882a593Smuzhiyun x86_64_PURGATORY_SRCS += purgatory/arch/i386/pic.c 90*4882a593Smuzhiyun 91*4882a593Smuzhiyun-x86_64_PURGATORY_EXTRA_CFLAGS = -mcmodel=large 92*4882a593Smuzhiyun+ifeq ($(SUBARCH),64) 93*4882a593Smuzhiyun+ x86_64_PURGATORY_EXTRA_CFLAGS = -mcmodel=large 94*4882a593Smuzhiyun+endif 95