File 0015-Fix-gcc10-related-issues-bsc-1166605.patch of Package syslinux
From 4622e992240afaaceca4d4db6dc93f92c7b5c2d7 Mon Sep 17 00:00:00 2001
From: Steffen Winterfeldt <snwint@suse.com>
Date: Thu, 19 Mar 2020 14:24:57 +0000
Subject: [PATCH 15/22] Fix gcc10 related issues (bsc#1166605)
* -fno-common is now the default
* provide missing strlen() implementation
---
core/include/core_pxe.h | 2 +-
dos/errno.h | 2 +-
dos/string.h | 12 +++++++++++-
mk/elf.mk | 1 +
mk/embedded.mk | 1 +
mk/lib.mk | 1 +
6 files changed, 16 insertions(+), 3 deletions(-)
diff --git a/core/include/core_pxe.h b/core/include/core_pxe.h
index 19664f9b..62355100 100644
--- a/core/include/core_pxe.h
+++ b/core/include/core_pxe.h
@@ -265,7 +265,7 @@ void ftp_open(struct url_info *url, int flags, struct inode *inode,
int ftp_readdir(struct inode *inode, struct dirent *dirent);
/* tcp.c */
-const struct pxe_conn_ops tcp_conn_ops;
+const struct pxe_conn_ops tcp_conn_ops __attribute__ ((common));
extern void gpxe_init(void);
extern int pxe_init(bool quiet);
diff --git a/dos/errno.h b/dos/errno.h
index da733bfa..3e4c6371 100644
--- a/dos/errno.h
+++ b/dos/errno.h
@@ -36,7 +36,7 @@
#define EDOM 33 /* Math argument out of domain of func */
#define ERANGE 34 /* Math result not representable */
-int errno;
+int errno __attribute__ ((common));
void perror(const char *);
#endif /* ERRNO_H */
diff --git a/dos/string.h b/dos/string.h
index f648de2d..360c4409 100644
--- a/dos/string.h
+++ b/dos/string.h
@@ -5,12 +5,13 @@
#ifndef _STRING_H
#define _STRING_H
+#include <stdlib.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)
/* This only returns true or false */
static inline int memcmp(const void *__m1, const void *__m2, unsigned int __n)
@@ -21,6 +22,15 @@ 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 */
diff --git a/mk/elf.mk b/mk/elf.mk
index b46dbd06..27a5542d 100644
--- a/mk/elf.mk
+++ b/mk/elf.mk
@@ -19,6 +19,7 @@ include $(MAKEDIR)/syslinux.mk
# Support IA32 and x86_64 platforms with one build
# Set up architecture specifics; for cross compilation, set ARCH as apt
GCCOPT := $(call gcc_ok,-std=gnu99,)
+GCCOPT := $(call gcc_ok,-fcommon,)
ifeq ($(ARCH),i386)
GCCOPT += $(call gcc_ok,-m32,)
GCCOPT += $(call gcc_ok,-march=i386)
diff --git a/mk/embedded.mk b/mk/embedded.mk
index 488dc0fc..2da2e0cc 100644
--- a/mk/embedded.mk
+++ b/mk/embedded.mk
@@ -21,6 +21,7 @@ include $(MAKEDIR)/syslinux.mk
# Initialize GCCOPT to null to begin with. Without this, make generates
# recursive error for GCCOPT
GCCOPT :=
+GCCOPT += $(call gcc_ok,-fcommon,)
ifeq ($(ARCH),i386)
GCCOPT := $(call gcc_ok,-m32)
GCCOPT += $(call gcc_ok,-march=i386)
diff --git a/mk/lib.mk b/mk/lib.mk
index f8591e56..07ec8728 100644
--- a/mk/lib.mk
+++ b/mk/lib.mk
@@ -5,6 +5,7 @@ include $(MAKEDIR)/syslinux.mk
# Support IA32 and x86_64 platforms with one build
# Set up architecture specifics; for cross compilation, set ARCH as apt
GCCOPT := $(call gcc_ok,-std=gnu99,)
+GCCOPT += $(call gcc_ok,-fcommon,)
ifeq ($(ARCH),i386)
GCCOPT += $(call gcc_ok,-m32,)
GCCOPT += $(call gcc_ok,-mpreferred-stack-boundary=2,)
--
2.42.0