[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