[PATCH] x86_64: Add support to build kexec-tools with x32 ABI
Aníbal Limón
anibal.limon at linux.intel.com
Fri Apr 3 09:05:06 PDT 2015
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
More information about the kexec
mailing list