Taken from Gentoo and adapted to fix the build using GCC 10. See: https://bugs.gentoo.org/705730. --- 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 -GCC
 $(call gcc_ok,-fno-stack-protector,)
+GCCOPT := $(call gcc_ok,-fno-stack-protector,) $(call gcc_ok,-fcommon)
 EFIINC = $(objdir)/include/efi
 LIBDIR  = $(objdir)/lib
 
diff --git a/dos/string.h b/dos/string.h
index f648de2..a502132 100644
--- a/dos/string.h
+++ b/dos/string.h
@@ -5,12 +5,13 @@
 #ifndef _STRING_H
 #define _STRING_H
 
+#include 
+
 /* 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)
 
 /* This only returns true or false */
 static inline int memcmp(const void *__m1, const void *__m2, unsigned int __n)
@@ -21,6 +22,13 @@ static inline int memcmp(const void *__m1, const void *__m2, unsigned int __n)
     return rv;
 }
 
+static inline size_t strlen(const char *s)
+{
+    size_t len = 0;
+    while (*s++) len++;
+    return len;
+}
+
 extern char *strchr(const char *s, int c);
 
 #endif /* _STRING_H */