[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