mirror of
https://github.com/vincentmli/bpfire.git
synced 2026-04-09 18:45:54 +02:00
syslinux: Fix build with GCC 10
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
This commit is contained in:
@@ -77,6 +77,8 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
|
||||
|
||||
# Apply patches
|
||||
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/syslinux-6.03-sysmacros.patch
|
||||
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/syslinux-6.04_replace-builtin-strlen-that-appears-to-get-optimized.patch
|
||||
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/syslinux-6.04_pre1-fcommon.patch
|
||||
|
||||
# Build
|
||||
cd $(DIR_APP) && make bios $(MAKETUNING)
|
||||
|
||||
54
src/patches/syslinux-6.04_pre1-fcommon.patch
Normal file
54
src/patches/syslinux-6.04_pre1-fcommon.patch
Normal file
@@ -0,0 +1,54 @@
|
||||
https://bugs.gentoo.org/705730
|
||||
|
||||
gcc-10 enabled f-no-common by default. Broke syslinux linking.
|
||||
--- a/mk/com32.mk
|
||||
+++ b/mk/com32.mk
|
||||
@@ -47,6 +47,7 @@ GCCOPT += $(call gcc_ok,-falign-functions=0,-malign-functions=0)
|
||||
GCCOPT += $(call gcc_ok,-falign-jumps=0,-malign-jumps=0)
|
||||
GCCOPT += $(call gcc_ok,-falign-labels=0,-malign-labels=0)
|
||||
GCCOPT += $(call gcc_ok,-falign-loops=0,-malign-loops=0)
|
||||
+GCCOPT += $(call gcc_ok,-fcommon)
|
||||
|
||||
ifeq ($(FWCLASS),EFI)
|
||||
GCCOPT += -mno-red-zone
|
||||
--- a/mk/elf.mk
|
||||
+++ b/mk/elf.mk
|
||||
@@ -42,6 +42,7 @@ GCCOPT += $(call gcc_ok,-falign-functions=0,-malign-functions=0)
|
||||
GCCOPT += $(call gcc_ok,-falign-jumps=0,-malign-jumps=0)
|
||||
GCCOPT += $(call gcc_ok,-falign-labels=0,-malign-labels=0)
|
||||
GCCOPT += $(call gcc_ok,-falign-loops=0,-malign-loops=0)
|
||||
+GCCOPT += $(call gcc_ok,-fcommon)
|
||||
|
||||
com32 = $(topdir)/com32
|
||||
core = $(topdir)/core
|
||||
--- a/mk/embedded.mk
|
||||
+++ b/mk/embedded.mk
|
||||
@@ -51,6 +51,7 @@ GCCOPT += $(call gcc_ok,-falign-jumps=0,-malign-jumps=0)
|
||||
GCCOPT += $(call gcc_ok,-falign-labels=0,-malign-labels=0)
|
||||
GCCOPT += $(call gcc_ok,-falign-loops=0,-malign-loops=0)
|
||||
GCCOPT += $(call gcc_ok,-fvisibility=hidden)
|
||||
+GCCOPT += $(call gcc_ok,-fcommon)
|
||||
|
||||
LIBGCC := $(shell $(CC) $(GCCOPT) --print-libgcc)
|
||||
|
||||
--- a/mk/lib.mk
|
||||
+++ b/mk/lib.mk
|
||||
@@ -28,6 +28,7 @@ GCCOPT += $(call gcc_ok,-falign-functions=0,-malign-functions=0)
|
||||
GCCOPT += $(call gcc_ok,-falign-jumps=0,-malign-jumps=0)
|
||||
GCCOPT += $(call gcc_ok,-falign-labels=0,-malign-labels=0)
|
||||
GCCOPT += $(call gcc_ok,-falign-loops=0,-malign-loops=0)
|
||||
+GCCOPT += $(call gcc_ok,-fcommon)
|
||||
|
||||
INCLUDE = -I$(SRC)
|
||||
STRIP = strip --strip-all -R .comment -R .note
|
||||
--- a/mk/efi.mk
|
||||
+++ b/mk/efi.mk
|
||||
@@ -7,7 +7,7 @@ core = $(topdir)/core
|
||||
# Set up architecture specifics; for cross compilation, set ARCH as apt
|
||||
# gnuefi sets up architecture specifics in ia32 or x86_64 sub directories
|
||||
# set up the LIBDIR and EFIINC for building for the appropriate architecture
|
||||
-GCCOPT := $(call gcc_ok,-fno-stack-protector,)
|
||||
+GCCOPT := $(call gcc_ok,-fno-stack-protector,) $(call gcc_ok,-fcommon)
|
||||
EFIINC = $(objdir)/include/efi
|
||||
LIBDIR = $(objdir)/lib
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
diff --git a/dos/string.h b/dos/string.h
|
||||
index f648de2d..407d0233 100644
|
||||
--- a/dos/string.h
|
||||
+++ b/dos/string.h
|
||||
@@ -5,12 +5,22 @@
|
||||
#ifndef _STRING_H
|
||||
#define _STRING_H
|
||||
|
||||
+#include <stddef.h>
|
||||
+
|
||||
/* Standard routines */
|
||||
#define memcpy(a,b,c) __builtin_memcpy(a,b,c)
|
||||
#define memmove(a,b,c) __builtin_memmove(a,b,c)
|
||||
#define memset(a,b,c) __builtin_memset(a,b,c)
|
||||
#define strcpy(a,b) __builtin_strcpy(a,b)
|
||||
-#define strlen(a) __builtin_strlen(a)
|
||||
+#define strlen(a) inline_strlen(a)
|
||||
+
|
||||
+/* replacement for builtin strlen that appears to get optimized away */
|
||||
+static inline size_t inline_strlen(const char *str)
|
||||
+{
|
||||
+ size_t l;
|
||||
+ for (l = 0; *str++; l++);
|
||||
+ return l;
|
||||
+}
|
||||
|
||||
/* This only returns true or false */
|
||||
static inline int memcmp(const void *__m1, const void *__m2, unsigned int __n)
|
||||
Reference in New Issue
Block a user