[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