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

Aníbal Limón anibal.limon at linux.intel.com
Mon Apr 6 08:55:47 PDT 2015


On 05/04/15 20:04, Simon Horman wrote:
> 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?

I'm working in the Yocto Project enabling x32 ABI support, the x32 ABI 
enables
programs to work with 32-bit address space and support of benefits of 
64-bit mode
like register calling convention, this improves performance in some 
applications,
details [1][2].

I don't know if this answer your question?

Cheers,
     alimon

[1] https://sites.google.com/site/x32abi/
[2] http://en.wikipedia.org/wiki/X32_ABI

>
>>      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