diff options
Diffstat (limited to 'meta/recipes-kernel/kexec/kexec-tools/0004-x86_64-Add-support-to-build-kexec-tools-with-x32-ABI.patch')
-rw-r--r-- | meta/recipes-kernel/kexec/kexec-tools/0004-x86_64-Add-support-to-build-kexec-tools-with-x32-ABI.patch | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/meta/recipes-kernel/kexec/kexec-tools/0004-x86_64-Add-support-to-build-kexec-tools-with-x32-ABI.patch b/meta/recipes-kernel/kexec/kexec-tools/0004-x86_64-Add-support-to-build-kexec-tools-with-x32-ABI.patch new file mode 100644 index 0000000000..a809d5ba8e --- /dev/null +++ b/meta/recipes-kernel/kexec/kexec-tools/0004-x86_64-Add-support-to-build-kexec-tools-with-x32-ABI.patch | |||
@@ -0,0 +1,93 @@ | |||
1 | From 8c9a5076543eb3d497e016b3d7707e93d6311883 Mon Sep 17 00:00:00 2001 | ||
2 | From: =?UTF-8?q?An=C3=ADbal=20Lim=C3=B3n?= <anibal.limon@linux.intel.com> | ||
3 | Date: Mon, 15 Jul 2013 23:32:36 -0700 | ||
4 | Subject: [PATCH] x86_64: Add support to build kexec-tools with x32 ABI | ||
5 | MIME-Version: 1.0 | ||
6 | Content-Type: text/plain; charset=UTF-8 | ||
7 | Content-Transfer-Encoding: 8bit | ||
8 | |||
9 | Summary of changes, | ||
10 | |||
11 | configure.ac: Add test for detect x32 ABI. | ||
12 | purgatory/arch/x86_64/Makefile: Not use mcmodel large when | ||
13 | x32 ABI is set. | ||
14 | kexec/arch/x86_64/kexec-elf-rel-x86_64.c: When x32 ABI is set | ||
15 | use ELFCLASS32 instead of ELFCLASS64. | ||
16 | kexec/kexec-syscall.h: Add correct syscall number for x32 ABI. | ||
17 | |||
18 | Upstream-Status: Submitted | ||
19 | |||
20 | Signed-off-by: Aníbal Limón <anibal.limon@linux.intel.com> | ||
21 | Signed-off-by: Mariano Lopez <mariano.lopez@linux.intel.com> | ||
22 | --- | ||
23 | configure.ac | 9 +++++++++ | ||
24 | kexec/arch/x86_64/kexec-elf-rel-x86_64.c | 4 ++++ | ||
25 | kexec/kexec-syscall.h | 4 ++++ | ||
26 | purgatory/arch/x86_64/Makefile | 4 +++- | ||
27 | 4 files changed, 20 insertions(+), 1 deletion(-) | ||
28 | |||
29 | diff --git a/configure.ac b/configure.ac | ||
30 | index c2b0c68..60882b8 100644 | ||
31 | --- a/configure.ac | ||
32 | +++ b/configure.ac | ||
33 | @@ -54,6 +54,15 @@ case $target_cpu in | ||
34 | ;; | ||
35 | ia64|x86_64|alpha|m68k ) | ||
36 | ARCH="$target_cpu" | ||
37 | + | ||
38 | + dnl ---Test for x32 ABI in x86_64 | ||
39 | + if test "x$ARCH" = "xx86_64" ; then | ||
40 | + AC_EGREP_CPP(x32_test, | ||
41 | + [#if defined(__x86_64__) && defined (__ILP32__) | ||
42 | + x32_test | ||
43 | + #endif | ||
44 | + ], SUBARCH='x32', SUBARCH='64') | ||
45 | + fi | ||
46 | ;; | ||
47 | * ) | ||
48 | AC_MSG_ERROR([unsupported architecture $target_cpu]) | ||
49 | diff --git a/kexec/arch/x86_64/kexec-elf-rel-x86_64.c b/kexec/arch/x86_64/kexec-elf-rel-x86_64.c | ||
50 | index db85b44..0ce1172 100644 | ||
51 | --- a/kexec/arch/x86_64/kexec-elf-rel-x86_64.c | ||
52 | +++ b/kexec/arch/x86_64/kexec-elf-rel-x86_64.c | ||
53 | @@ -8,7 +8,11 @@ int machine_verify_elf_rel(struct mem_ehdr *ehdr) | ||
54 | if (ehdr->ei_data != ELFDATA2LSB) { | ||
55 | return 0; | ||
56 | } | ||
57 | +#ifdef __ILP32__ | ||
58 | + if (ehdr->ei_class != ELFCLASS32) { | ||
59 | +#else | ||
60 | if (ehdr->ei_class != ELFCLASS64) { | ||
61 | +#endif | ||
62 | return 0; | ||
63 | } | ||
64 | if (ehdr->e_machine != EM_X86_64) { | ||
65 | diff --git a/kexec/kexec-syscall.h b/kexec/kexec-syscall.h | ||
66 | index dac1c1f..e9479b7 100644 | ||
67 | --- a/kexec/kexec-syscall.h | ||
68 | +++ b/kexec/kexec-syscall.h | ||
69 | @@ -31,8 +31,12 @@ | ||
70 | #define __NR_kexec_load 268 | ||
71 | #endif | ||
72 | #ifdef __x86_64__ | ||
73 | +#ifdef __ILP32__ | ||
74 | +#define __NR_kexec_load 528 | ||
75 | +#else | ||
76 | #define __NR_kexec_load 246 | ||
77 | #endif | ||
78 | +#endif | ||
79 | #ifdef __s390x__ | ||
80 | #define __NR_kexec_load 277 | ||
81 | #endif | ||
82 | diff --git a/purgatory/arch/x86_64/Makefile b/purgatory/arch/x86_64/Makefile | ||
83 | index 7300937..4af11e4 100644 | ||
84 | --- a/purgatory/arch/x86_64/Makefile | ||
85 | +++ b/purgatory/arch/x86_64/Makefile | ||
86 | @@ -23,4 +23,6 @@ x86_64_PURGATORY_SRCS += purgatory/arch/i386/console-x86.c | ||
87 | x86_64_PURGATORY_SRCS += purgatory/arch/i386/vga.c | ||
88 | x86_64_PURGATORY_SRCS += purgatory/arch/i386/pic.c | ||
89 | |||
90 | -x86_64_PURGATORY_EXTRA_CFLAGS = -mcmodel=large | ||
91 | +ifeq ($(SUBARCH),64) | ||
92 | + x86_64_PURGATORY_EXTRA_CFLAGS = -mcmodel=large | ||
93 | +endif | ||