kmod: add patch to fix build failure with old gcc versions

When building with old gcc versions (such as gcc 4.3), the current
version of kmod fails with:

shared/util.c:52: error: expected identifier or '(' before 'do'
shared/util.c:52: error: expected identifier or '(' before 'while'

This is due to a use of the internal assert_cc() macro outside of a
function, while this macro is defined for old gcc versions in a way that
cannot be used outside functions.

This wasn't noticed by the autobuilders because we don't have such old
target compilers. On the host side, we have some autobuilder instances
with such old gcc versions, but host-kmod is only used by the linux
package, which is never tested by the autobuilders.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
This commit is contained in:
Thomas Petazzoni 2017-06-03 16:59:30 +02:00 committed by Peter Korsgaard
parent 1c9b77f380
commit 72c77544ba

View File

@ -0,0 +1,56 @@
From 7cd698eb31059012305d8bb7516577c8cd383e32 Mon Sep 17 00:00:00 2001
From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Date: Sat, 3 Jun 2017 16:52:37 +0200
Subject: [PATCH] shared/util.c: assert_cc() can only be used inside functions
shared/macro.h has two versions of assert_cc, one that uses gcc
_Static_assert(), which requires recent enough gcc versions, and one
that uses a fake array to trigger a build error. The latter can only
work inside functions, so assert_cc() should only be used inside
functions.
Fixes the following build failure when building kmod with old gcc
versions such as gcc 4.3.x:
shared/util.c:52: error: expected identifier or '(' before 'do'
shared/util.c:52: error: expected identifier or '(' before 'while'
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
shared/util.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/shared/util.c b/shared/util.c
index 9de080a..fd2028d 100644
--- a/shared/util.c
+++ b/shared/util.c
@@ -49,8 +49,6 @@ static const struct kmod_ext {
{ }
};
-assert_cc(EAGAIN == EWOULDBLOCK);
-
/* string handling functions and memory allocations */
/* ************************************************************************ */
@@ -201,6 +199,8 @@ ssize_t read_str_safe(int fd, char *buf, size_t buflen)
size_t todo = buflen - 1;
size_t done = 0;
+ assert_cc(EAGAIN == EWOULDBLOCK);
+
do {
ssize_t r = read(fd, buf + done, todo);
@@ -226,6 +226,8 @@ ssize_t write_str_safe(int fd, const char *buf, size_t buflen)
size_t todo = buflen;
size_t done = 0;
+ assert_cc(EAGAIN == EWOULDBLOCK);
+
do {
ssize_t r = write(fd, buf + done, todo);
--
2.7.4