Any comment or feedback? 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