[PATCH] x86_64: Add support to build kexec-tools with x32 ABI

Simon Horman horms at verge.net.au
Sun Apr 5 18:04:47 PDT 2015


On Fri, Apr 03, 2015 at 10:05:06AM -0600, Aníbal Limón wrote:
> Any comment or feedback?

I feel like I am missing something obvious, but
could you explain the use case a little more clearly?

> 
>     alimon
> 
> On 26/03/15 10:19, Aníbal Limón wrote:
> >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.
> >
> >Signed-off-by: Aníbal Limón <anibal.limon at linux.intel.com>
> >Signed-off-by: Mariano Lopez <mariano.lopez at linux.intel.com>
> >---
> >  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(-)
> >
> >diff --git a/configure.ac b/configure.ac
> >index c410e90..1ecadd5 100644
> >--- a/configure.ac
> >+++ b/configure.ac
> >@@ -52,6 +52,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])
> >diff --git a/kexec/arch/x86_64/kexec-elf-rel-x86_64.c b/kexec/arch/x86_64/kexec-elf-rel-x86_64.c
> >index c795037..06db7f0 100644
> >--- a/kexec/arch/x86_64/kexec-elf-rel-x86_64.c
> >+++ b/kexec/arch/x86_64/kexec-elf-rel-x86_64.c
> >@@ -8,7 +8,11 @@ int machine_verify_elf_rel(struct mem_ehdr *ehdr)
> >  	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) {
> >diff --git a/kexec/kexec-syscall.h b/kexec/kexec-syscall.h
> >index ce2e20b..cab5535 100644
> >--- a/kexec/kexec-syscall.h
> >+++ b/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
> >diff --git a/purgatory/arch/x86_64/Makefile b/purgatory/arch/x86_64/Makefile
> >index 7300937..4af11e4 100644
> >--- a/purgatory/arch/x86_64/Makefile
> >+++ b/purgatory/arch/x86_64/Makefile
> >@@ -23,4 +23,6 @@ x86_64_PURGATORY_SRCS += purgatory/arch/i386/console-x86.c
> >  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
> 
> 
> _______________________________________________
> kexec mailing list
> kexec at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/kexec



More information about the kexec mailing list