[OE-core] [PATCH] syslinux: check for __i386__ and __x86_64__ instead of __SIZEOF_POINTER__

Mark Hatle mark.hatle at windriver.com
Thu Nov 21 19:26:01 UTC 2013


From: Lei Liu <lei.liu2 at windriver.com>

(Note: this patch is being sent for Yocto Project compliance, I don't
 believe it is generally applicable to oe-core as it's only needed on
 older host systems.)

GCC version 4.2 and earlier does not define __SIZEOF_POINTER__.
Check for __i386__ and __x86_64__ instead to make the code compile with
old compiler.

Signed-off-by: Lei Liu <lei.liu2 at windriver.com>
Signed-off-by: Randy MacLeod <Randy.MacLeod at windriver.com>
---
 .../syslinux/files/gcc-compatibility.patch         | 491 +++++++++++++++++++++
 meta/recipes-devtools/syslinux/syslinux_6.01.bb    |   4 +-
 2 files changed, 494 insertions(+), 1 deletion(-)
 create mode 100644 meta/recipes-devtools/syslinux/files/gcc-compatibility.patch

diff --git a/meta/recipes-devtools/syslinux/files/gcc-compatibility.patch b/meta/recipes-devtools/syslinux/files/gcc-compatibility.patch
new file mode 100644
index 0000000..b291e29
--- /dev/null
+++ b/meta/recipes-devtools/syslinux/files/gcc-compatibility.patch
@@ -0,0 +1,491 @@
+Check for __i386__ and __x86_64__ instead of __SIZEOF_POINTER__
+
+Upstream-Status: Pending
+
+Signed-off-by: Lei Liu <lei.liu2 at windriver.com>
+---
+ com32/include/bitsize/limits.h       |    4 ++--
+ com32/include/bitsize/stddef.h       |    4 ++--
+ com32/include/bitsize/stdint.h       |    4 ++--
+ com32/include/bitsize/stdintconst.h  |    4 ++--
+ com32/include/bitsize/stdintlimits.h |    4 ++--
+ com32/include/byteswap.h             |    4 ++--
+ com32/include/setjmp.h               |    4 ++--
+ com32/include/sys/bitops.h           |    4 ++--
+ com32/include/sys/cpu.h              |    4 ++--
+ com32/include/sys/module.h           |    4 ++--
+ com32/lib/libgcc/__muldi3.S          |    4 ++--
+ com32/lib/setjmp.S                   |    4 ++--
+ com32/lib/sys/farcall.c              |    4 ++--
+ com32/lib/sys/x86_init_fpu.c         |   12 ++++++------
+ com32/sysdump/cpuid.c                |    4 ++--
+ core/call16.c                        |    4 ++--
+ core/lzo/enter.ash                   |    4 ++--
+ core/lzo/leave.ash                   |    4 ++--
+ dos/stdlib.h                         |    4 ++--
+ efi/main.c                           |    6 +++---
+ efi/wrapper.c                        |    4 ++--
+ memdisk/memdisk.h                    |    2 +-
+ memdisk/setup.c                      |    4 ++--
+ memdisk/start32.S                    |    4 ++--
+ memdump/code16.h                     |    2 +-
+ 25 files changed, 53 insertions(+), 53 deletions(-)
+
+diff --git a/com32/include/bitsize/limits.h b/com32/include/bitsize/limits.h
+index 7129c4a..407c720 100644
+--- a/com32/include/bitsize/limits.h
++++ b/com32/include/bitsize/limits.h
+@@ -5,9 +5,9 @@
+ #ifndef _BITSIZE_LIMITS_H
+ #define _BITSIZE_LIMITS_H
+ 
+-#if __SIZEOF_POINTER__ == 4
++#if defined (__i386__)
+ #include <bitsize32/limits.h>
+-#elif __SIZEOF_POINTER__ == 8
++#elif defined (__x86_64__)
+ #include <bitsize64/limits.h>
+ #else
+ #error "Unable to build for to-be-defined architecture type"
+diff --git a/com32/include/bitsize/stddef.h b/com32/include/bitsize/stddef.h
+index 04418a0..bbf070b 100644
+--- a/com32/include/bitsize/stddef.h
++++ b/com32/include/bitsize/stddef.h
+@@ -5,9 +5,9 @@
+ #ifndef _BITSIZE_STDDEF_H
+ #define _BITSIZE_STDDEF_H
+ 
+-#if __SIZEOF_POINTER__ == 4
++#if defined (__i386__)
+ #include <bitsize32/stddef.h>
+-#elif __SIZEOF_POINTER__ == 8
++#elif defined (__x86_64__)
+ #include <bitsize64/stddef.h>
+ #else
+ #error "Unable to build for to-be-defined architecture type"
+diff --git a/com32/include/bitsize/stdint.h b/com32/include/bitsize/stdint.h
+index 7e7b235..500a53b 100644
+--- a/com32/include/bitsize/stdint.h
++++ b/com32/include/bitsize/stdint.h
+@@ -13,9 +13,9 @@ typedef unsigned char		uint8_t;
+ typedef unsigned short int	uint16_t;
+ typedef unsigned int		uint32_t;
+ 
+-#if __SIZEOF_POINTER__ == 4
++#if defined (__i386__)
+ #include <bitsize32/stdint.h>
+-#elif __SIZEOF_POINTER__ == 8
++#elif defined (__x86_64__)
+ #include <bitsize64/stdint.h>
+ #else
+ #error "Unable to build for to-be-defined architecture type"
+diff --git a/com32/include/bitsize/stdintconst.h b/com32/include/bitsize/stdintconst.h
+index b2f3141..7caf937 100644
+--- a/com32/include/bitsize/stdintconst.h
++++ b/com32/include/bitsize/stdintconst.h
+@@ -5,9 +5,9 @@
+ #ifndef _BITSIZE_STDINTCONST_H
+ #define _BITSIZE_STDINTCONST_H
+ 
+-#if __SIZEOF_POINTER__ == 4
++#if defined (__i386__)
+ #include <bitsize32/stdintconst.h>
+-#elif __SIZEOF_POINTER__ == 8
++#elif defined (__x86_64__)
+ #include <bitsize64/stdintconst.h>
+ #else
+ #error "Unable to build for to-be-defined architecture type"
+diff --git a/com32/include/bitsize/stdintlimits.h b/com32/include/bitsize/stdintlimits.h
+index c342c44..78f1e89 100644
+--- a/com32/include/bitsize/stdintlimits.h
++++ b/com32/include/bitsize/stdintlimits.h
+@@ -5,9 +5,9 @@
+ #ifndef _BITSIZE_STDINTLIMITS_H
+ #define _BITSIZE_STDINTLIMITS_H
+ 
+-#if __SIZEOF_POINTER__ == 4
++#if defined (__i386__)
+ #include <bitsize32/stdintlimits.h>
+-#elif __SIZEOF_POINTER__ == 8
++#elif defined (__x86_64__)
+ #include <bitsize64/stdintlimits.h>
+ #else
+ #error "Unable to build for to-be-defined architecture type"
+diff --git a/com32/include/byteswap.h b/com32/include/byteswap.h
+index d1a4d54..ddfa030 100644
+--- a/com32/include/byteswap.h
++++ b/com32/include/byteswap.h
+@@ -26,10 +26,10 @@ static inline __constfunc uint16_t __bswap_16(uint16_t v)
+ 
+ static inline __constfunc uint32_t __bswap_32(uint32_t v)
+ {
+-#if __SIZEOF_POINTER__ == 4
++#if defined (__i386__)
+     asm("xchgb %h0,%b0 ; roll $16,%0 ; xchgb %h0,%b0"
+ 	: "+q" (v));
+-#elif __SIZEOF_POINTER__ == 8
++#elif defined (__x86_64__)
+     asm("bswap	%0"
+ 	: "=r" (v)
+ 	: "0" (v));
+diff --git a/com32/include/setjmp.h b/com32/include/setjmp.h
+index e709095..c514378 100644
+--- a/com32/include/setjmp.h
++++ b/com32/include/setjmp.h
+@@ -9,9 +9,9 @@
+ #include <klibc/compiler.h>
+ #include <stddef.h>
+ 
+-#if __SIZEOF_POINTER__ == 4
++#if defined (__i386__)
+ #include <klibc/i386/archsetjmp.h>
+-#elif __SIZEOF_POINTER__ == 8
++#elif defined (__x86_64__)
+ #include <klibc/x86_64/archsetjmp.h>
+ #else
+ #error "unsupported architecture"
+diff --git a/com32/include/sys/bitops.h b/com32/include/sys/bitops.h
+index de30d93..95a7cf5 100644
+--- a/com32/include/sys/bitops.h
++++ b/com32/include/sys/bitops.h
+@@ -36,9 +36,9 @@
+ 
+ #include <klibc/compiler.h>
+ 
+-#if __SIZEOF_POINTER__ == 4
++#if defined (__i386__)
+ #include <i386/bitops.h>
+-#elif __SIZEOF_POINTER__ == 8
++#elif defined (__x86_64)
+ #include <x86_64/bitops.h>
+ #else
+ #error "Unable to build for to-be-defined architecture type"
+diff --git a/com32/include/sys/cpu.h b/com32/include/sys/cpu.h
+index 76c45da..edc97ec 100644
+--- a/com32/include/sys/cpu.h
++++ b/com32/include/sys/cpu.h
+@@ -5,9 +5,9 @@
+ #include <stdint.h>
+ #include <klibc/compiler.h>
+ 
+-#if __SIZEOF_POINTER__ == 4
++#if defined (__i386__)
+ #include <i386/cpu.h>
+-#elif __SIZEOF_POINTER__ == 8
++#elif defined (__x86_64__)
+ #include <x86_64/cpu.h>
+ #else 
+ #error "unsupported architecture"
+diff --git a/com32/include/sys/module.h b/com32/include/sys/module.h
+index c1d4253..39836b9 100644
+--- a/com32/include/sys/module.h
++++ b/com32/include/sys/module.h
+@@ -14,9 +14,9 @@
+ #include <stdbool.h>
+ #include <linux/list.h>
+ 
+-#if __SIZEOF_POINTER__ == 4
++#if defined (__i386__)
+ #include <i386/module.h>
+-#elif __SIZEOF_POINTER__ == 8
++#elif defined (__x86_64__)
+ #include <x86_64/module.h>
+ #else
+ #error "unsupported architecture"
+diff --git a/com32/lib/libgcc/__muldi3.S b/com32/lib/libgcc/__muldi3.S
+index 424787c..107f0b8 100644
+--- a/com32/lib/libgcc/__muldi3.S
++++ b/com32/lib/libgcc/__muldi3.S
+@@ -9,7 +9,7 @@
+ 	.globl __muldi3
+ 	.type __muldi3, at function
+ __muldi3:
+-#if __SIZEOF_POINTER__ == 4
++#if defined (__i386__)
+ 	/* i386 */
+ 	push  %esi
+ #ifndef REGPARM
+@@ -33,7 +33,7 @@ __muldi3:
+ #endif
+ 	pop   %esi
+ 	ret
+-#elif __SIZEOF_POINTER__ == 8
++#elif defined (__x86_64__)
+ 	/* x86_64 */
+ 	push  %rsi
+ #ifndef REGPARM
+diff --git a/com32/lib/setjmp.S b/com32/lib/setjmp.S
+index 2fb5c23..4abc685 100644
+--- a/com32/lib/setjmp.S
++++ b/com32/lib/setjmp.S
+@@ -62,9 +62,9 @@ longjmp:
+ 
+ 	.size longjmp,.-longjmp
+ */
+-#if __SIZEOF_POINTER__ == 4
++#if defined (__i386__)
+ #include <i386/setjmp.S>
+-#elif __SIZEOF_POINTER__ == 8
++#elif defined (__x86_64__)
+ #include <x86_64/setjmp.S>
+ #else
+ #error "Unable to build for to-be-defined architecture type"
+diff --git a/com32/lib/sys/farcall.c b/com32/lib/sys/farcall.c
+index 2749083..b5d6ad4 100644
+--- a/com32/lib/sys/farcall.c
++++ b/com32/lib/sys/farcall.c
+@@ -8,10 +8,10 @@ static inline uint32_t eflags(void)
+ {
+     //uint32_t v;
+ 
+-#if __SIZEOF_POINTER__ == 4
++#if defined (__i386__)
+     uint32_t v;
+     asm volatile("pushfl ; popl %0" : "=rm" (v));
+-#elif __SIZEOF_POINTER__ == 8
++#elif defined (__x86_64__)
+     uint64_t v;
+     asm volatile("pushfq ; pop %0" : "=rm" (v));
+ #else
+diff --git a/com32/lib/sys/x86_init_fpu.c b/com32/lib/sys/x86_init_fpu.c
+index cacb4ea..b7b8d94 100644
+--- a/com32/lib/sys/x86_init_fpu.c
++++ b/com32/lib/sys/x86_init_fpu.c
+@@ -4,9 +4,9 @@
+  * Test for an x86 FPU, and do any necessary setup.
+  */
+ 
+-#if __SIZEOF_POINTER__ == 4
++#if defined (__i386__)
+ #include <i386/x86_init_fpu.c>
+-#elif __SIZEOF_POINTER__ == 8
++#elif defined (__x86_64__)
+ #include <x86_64/x86_init_fpu.c>
+ #else
+ #error "Unable to build for to-be-defined architecture type"
+@@ -17,10 +17,10 @@
+ 
+ static inline uint64_t get_cr0(void)
+ {
+-#if __SIZEOF_POINTER__ == 4
++#if defined (__i386__)
+     uint32_t v;
+ asm("movl %%cr0,%0":"=r"(v));
+-#elif __SIZEOF_POINTER__ == 8
++#elif defined (__x86_64__)
+     uint64_t v;
+ asm("movq %%cr0,%0":"=r"(v));
+ #else
+@@ -31,9 +31,9 @@ asm("movq %%cr0,%0":"=r"(v));
+ 
+ static inline void set_cr0(uint32_t v)
+ {
+-#if __SIZEOF_POINTER__ == 4
++#if defined (__i386__)
+     asm volatile ("movl %0,%%cr0"::"r" (v));
+-#elif __SIZEOF_POINTER__ == 8
++#elif defined (__x86_64__)
+     asm volatile ("movq %0,%%cr0"::"r" ((uint64_t)v));
+ #else
+ #error "Unable to build for to-be-defined architecture type"
+diff --git a/com32/sysdump/cpuid.c b/com32/sysdump/cpuid.c
+index 846b540..67d0844 100644
+--- a/com32/sysdump/cpuid.c
++++ b/com32/sysdump/cpuid.c
+@@ -20,12 +20,12 @@ struct cpuid_info {
+ 
+ static void get_cpuid(uint32_t eax, uint32_t ecx, struct cpuid_data *data)
+ {
+-#if __SIZEOF_POINTER__ == 4
++#if defined (__i386__)
+     asm("pushl %%ebx ; cpuid ; movl %%ebx,%1 ; popl %%ebx"
+ 	: "=a" (data->eax), "=r" (data->ebx),
+ 	  "=c" (data->ecx), "=d" (data->edx)
+ 	: "a" (eax), "c" (ecx));
+-#elif __SIZEOF_POINTER__ == 8
++#elif defined (__x86_64__)
+         asm volatile("push %%rbx; cpuid; movl %%ebx, %1; pop %%rbx"
+             : "=a" (data->eax),
+               "=b" (data->ebx),
+diff --git a/core/call16.c b/core/call16.c
+index 471aef9..6cee2d5 100644
+--- a/core/call16.c
++++ b/core/call16.c
+@@ -26,10 +26,10 @@ static inline uint32_t eflags(void)
+ {
+     //uint32_t v;
+ 
+-#if __SIZEOF_POINTER__ == 4
++#if defined (__i386__)
+     uint32_t v;
+     asm volatile("pushfl ; popl %0" : "=rm" (v));
+-#elif __SIZEOF_POINTER__ == 8
++#elif defined (__x86_64__)
+     uint64_t v;
+     asm volatile("pushfq ; pop %0" : "=rm" (v));
+ #else
+diff --git a/core/lzo/enter.ash b/core/lzo/enter.ash
+index dc7782f..a2aefa5 100644
+--- a/core/lzo/enter.ash
++++ b/core/lzo/enter.ash
+@@ -45,14 +45,14 @@
+ //
+ ************************************************************************/
+ 
+-#if __SIZEOF_POINTER__ == 4
++#if defined (__i386__)
+         pushl   %ebp
+         pushl   %edi
+         pushl   %esi
+         pushl   %ebx
+         pushl   %ecx
+         pushl   %edx
+-#elif __SIZEOF_POINTER__ == 8
++#elif defined (__x86_64__)
+         push   %rbp
+         push   %rdi
+         push   %rsi
+diff --git a/core/lzo/leave.ash b/core/lzo/leave.ash
+index cc48ce6..0b9555a 100644
+--- a/core/lzo/leave.ash
++++ b/core/lzo/leave.ash
+@@ -65,14 +65,14 @@
+ 
+         negl    %eax
+         addl    $12,%esp
+-#if __SIZEOF_POINTER__ == 4
++#if defined (__i386__)
+         popl    %edx
+         popl    %ecx
+         popl    %ebx
+         popl    %esi
+         popl    %edi
+         popl    %ebp
+-#elif __SIZEOF_POINTER__ == 8
++#elif defined (__x86_64__)
+         pop    %rdx
+         pop    %rcx
+         pop    %rbx
+diff --git a/dos/stdlib.h b/dos/stdlib.h
+index d982670..9e6a80a 100644
+--- a/dos/stdlib.h
++++ b/dos/stdlib.h
+@@ -3,9 +3,9 @@
+ 
+ typedef int ssize_t;
+ /* size_t is defined elsewhere */
+-#if __SIZEOF_POINTER__ == 4
++#if defined (__i386__)
+ typedef unsigned int size_t;
+-#elif __SIZEOF_POINTER__ == 8
++#elif defined (__x86_64__)
+ typedef unsigned long size_t;
+ #else
+ #error "unsupported architecture"
+diff --git a/efi/main.c b/efi/main.c
+index 13b9403..adad340 100644
+--- a/efi/main.c
++++ b/efi/main.c
+@@ -417,7 +417,7 @@ struct boot_params {
+  * allocate_pool()/free_pool()
+  * memory_map()
+  */ 
+-#if __SIZEOF_POINTER__ == 4
++#if defined (__i386__)
+ #define EFI_LOAD_SIG	"EL32"
+ static inline void kernel_jump(EFI_PHYSICAL_ADDRESS kernel_start,
+ 			       struct boot_params *boot_params)
+@@ -446,7 +446,7 @@ static inline void handover_jump(EFI_HANDLE image, struct boot_params *bp,
+ 		         "m" (image), "m" (kernel_start));
+ #endif
+ }
+-#elif __SIZEOF_POINTER__ == 8
++#elif defined (__x86_64__)
+ #define EFI_LOAD_SIG	"EL64"
+ typedef void(*kernel_func)(void *, struct boot_params *);
+ typedef void(*handover_func)(void *, EFI_SYSTEM_TABLE *, struct boot_params *);
+@@ -906,7 +906,7 @@ int efi_boot_linux(void *kernel_buf, size_t kernel_size,
+ 	 * protocol.
+ 	 */
+ 	/* Allocate gdt consistent with the alignment for architecture */
+-	status = emalloc(gdt.limit, __SIZEOF_POINTER__ , (EFI_PHYSICAL_ADDRESS *)&gdt.base);
++	status = emalloc(gdt.limit, sizeof(void *), (EFI_PHYSICAL_ADDRESS *)&gdt.base);
+ 	if (status != EFI_SUCCESS) {
+ 		printf("Failed to allocate memory for GDT, bailing out\n");
+ 		goto free_map;
+diff --git a/efi/wrapper.c b/efi/wrapper.c
+index 04c895f..90dae22 100644
+--- a/efi/wrapper.c
++++ b/efi/wrapper.c
+@@ -24,10 +24,10 @@
+ 
+ #include "wrapper.h"
+ 
+-#if __SIZEOF_POINTER__ == 4
++#if defined (__i386__)
+ typedef Elf32_Ehdr Elf_Ehdr;
+ typedef Elf32_Addr Elf_Addr;
+-#elif __SIZEOF_POINTER__ == 8
++#elif defined (__x86_64__)
+ typedef Elf64_Ehdr Elf_Ehdr;
+ typedef Elf64_Addr Elf_Addr;
+ #else
+diff --git a/memdisk/memdisk.h b/memdisk/memdisk.h
+index 6da5aff..37fd798 100644
+--- a/memdisk/memdisk.h
++++ b/memdisk/memdisk.h
+@@ -25,7 +25,7 @@
+ #include <com32.h>
+ 
+ /* define it only for i386 */
+-#if __SIZEOF_POINTER__ == 4
++#if defined (__i386__)
+ #define __cdecl __attribute__((cdecl,regparm(0)))
+ #endif
+ 
+diff --git a/memdisk/setup.c b/memdisk/setup.c
+index 72c6785..ee6a16a 100644
+--- a/memdisk/setup.c
++++ b/memdisk/setup.c
+@@ -671,9 +671,9 @@ static void relocate_rm_code(uint32_t newbase)
+     set_seg_base(gdt_base, 0x10, rm_args.rm_base);
+     set_seg_base(gdt_base, 0x18, rm_args.rm_base);
+ 
+-#if __SIZEOF_POINTER__ == 4
++#if defined (__i386__)
+     asm volatile ("lgdtl %0"::"m" (*(char *)gdt_base));
+-#elif __SIZEOF_POINTER__ == 8
++#elif defined (__x86_64__)
+     asm volatile ("lgdt %0"::"m" (*(char *)gdt_base));
+ #else
+ #error "unsupported architecture"
+diff --git a/memdisk/start32.S b/memdisk/start32.S
+index ecebe68..cef147b 100644
+--- a/memdisk/start32.S
++++ b/memdisk/start32.S
+@@ -62,9 +62,9 @@ _start:
+ 	addl	$8, %edi
+ 	loop	1b
+ 
+-#if __SIZEOF_POINTER__ == 4
++#if defined (__i386__)
+ 	lidtl	idt_ptr
+-#elif __SIZEOF_POINTER__ == 8
++#elif defined (__x86_64__)
+ 	lidt	idt_ptr
+ #else
+ #error "unsupported architecture"
+diff --git a/memdump/code16.h b/memdump/code16.h
+index ebf5ff4..b60b680 100644
+--- a/memdump/code16.h
++++ b/memdump/code16.h
+@@ -1,5 +1,5 @@
+ /* Must be included first of all */
+-#if __SIZEOF_POINTER__ == 4
++#if defined (__i386__)
+ #ifdef __ASSEMBLY__
+ 	.code16
+ #else
+-- 
+1.7.4.1
+
diff --git a/meta/recipes-devtools/syslinux/syslinux_6.01.bb b/meta/recipes-devtools/syslinux/syslinux_6.01.bb
index 1c240de..f9d21ea 100644
--- a/meta/recipes-devtools/syslinux/syslinux_6.01.bb
+++ b/meta/recipes-devtools/syslinux/syslinux_6.01.bb
@@ -8,7 +8,9 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3 \
 # ldlinux.* stuff for now, so skip mtools-native
 DEPENDS = "nasm-native util-linux"
 
-SRC_URI = "${KERNELORG_MIRROR}/linux/utils/boot/syslinux/6.xx/syslinux-${PV}.tar.bz2"
+SRC_URI = "${KERNELORG_MIRROR}/linux/utils/boot/syslinux/6.xx/syslinux-${PV}.tar.bz2 \
+           file://gcc-compatibility.patch \
+          "
 
 SRC_URI[md5sum] = "6945ee89e29119d459baed4937bbc534"
 SRC_URI[sha256sum] = "83a04cf81e6a46b80ee5a321926eea095af3498b04317e3674b46c125c7a5b43"
-- 
1.8.1.2.545.g2f19ada




More information about the Openembedded-core mailing list