[Buildroot] [PATCH] uclibc: fix knock build issue

Waldemar Brodkorb wbx at openadk.org
Thu Jun 22 22:07:23 UTC 2017


This patch sync's with GNU C library and removes __FAVOR_BSD.

Fixes:
  http://autobuild.buildroot.net/results/908/90863b5adb769a346acd3dc4bbe8d5fa497a0581/build-end.log

Reported-by: Thomas Petazzoni <thomas.petazzoni at free-electrons.com>
Signed-off-by: Waldemar Brodkorb <wbx at openadk.org>
---
 package/uclibc/0001-remove-__FAVOR_BSD.patch | 373 +++++++++++++++++++++++++++
 1 file changed, 373 insertions(+)
 create mode 100644 package/uclibc/0001-remove-__FAVOR_BSD.patch

diff --git a/package/uclibc/0001-remove-__FAVOR_BSD.patch b/package/uclibc/0001-remove-__FAVOR_BSD.patch
new file mode 100644
index 0000000..d65c36d
--- /dev/null
+++ b/package/uclibc/0001-remove-__FAVOR_BSD.patch
@@ -0,0 +1,373 @@
+From 58a5ba12bffad5916d9897c2870fc483f1db8282 Mon Sep 17 00:00:00 2001
+From: Waldemar Brodkorb <wbx at openadk.org>
+Date: Thu, 22 Jun 2017 22:20:20 +0200
+Subject: [PATCH] remove __FAVOR_BSD
+
+Remove __FAVOR_BSD and sync with GNU C library
+
+Some issues compiling knock application fixed.
+
+Reported-By: Thomas Petazzoni <thomas.petazzoni at free-electrons.com>
+Signed-off-by: Waldemar Brodkorb <wbx at openadk.org>
+---
+ include/features.h    |  10 ----
+ include/netinet/tcp.h | 123 ++++++++++++++++++++++++++------------------------
+ include/netinet/udp.h |  33 +++++++-------
+ include/setjmp.h      |  10 +---
+ include/signal.h      |  18 ++------
+ include/unistd.h      |  30 ++----------
+ 6 files changed, 88 insertions(+), 136 deletions(-)
+
+diff --git a/include/features.h b/include/features.h
+index 3a99593..7dc913f 100644
+--- a/include/features.h
++++ b/include/features.h
+@@ -78,7 +78,6 @@
+    __USE_GNU		Define GNU extensions.
+    __USE_REENTRANT	Define reentrant/thread-safe *_r functions.
+    __USE_FORTIFY_LEVEL	Additional security measures used, according to level.
+-   __FAVOR_BSD		Favor 4.3BSD things in cases of conflict.
+ 
+    The macros `__GNU_LIBRARY__', `__GLIBC__', and `__GLIBC_MINOR__' are
+    defined by this file unconditionally.  `__GNU_LIBRARY__' is provided
+@@ -115,7 +114,6 @@
+ #undef	__USE_GNU
+ #undef	__USE_REENTRANT
+ #undef	__USE_FORTIFY_LEVEL
+-#undef	__FAVOR_BSD
+ #undef	__KERNEL_STRICT_NAMES
+ 
+ /* Suppress kernel-name space pollution unless user expressedly asks
+@@ -155,14 +153,6 @@
+ # define _DEFAULT_SOURCE	1
+ #endif
+ 
+-/* If _BSD_SOURCE was defined by the user, favor BSD over POSIX.  */
+-#if defined _BSD_SOURCE && \
+-    !(defined _POSIX_SOURCE || defined _POSIX_C_SOURCE || \
+-      defined _XOPEN_SOURCE || defined _XOPEN_SOURCE_EXTENDED || \
+-      defined _GNU_SOURCE || defined _SVID_SOURCE)
+-# define __FAVOR_BSD	1
+-#endif
+-
+ /* If _GNU_SOURCE was defined by the user, turn on all the other features.  */
+ #ifdef _GNU_SOURCE
+ # undef  _ISOC99_SOURCE
+diff --git a/include/netinet/tcp.h b/include/netinet/tcp.h
+index 04032bb..ade01cd 100644
+--- a/include/netinet/tcp.h
++++ b/include/netinet/tcp.h
+@@ -65,75 +65,78 @@
+ #ifdef __USE_MISC
+ # include <sys/types.h>
+ # include <sys/socket.h>
++# include <stdint.h>
+ 
+-# ifdef __FAVOR_BSD
+-typedef	u_int32_t tcp_seq;
++typedef	uint32_t tcp_seq;
+ /*
+  * TCP header.
+  * Per RFC 793, September, 1981.
+  */
+ struct tcphdr
+   {
+-    u_int16_t th_sport;		/* source port */
+-    u_int16_t th_dport;		/* destination port */
+-    tcp_seq th_seq;		/* sequence number */
+-    tcp_seq th_ack;		/* acknowledgement number */
+-#  if __BYTE_ORDER == __LITTLE_ENDIAN
+-    u_int8_t th_x2:4;		/* (unused) */
+-    u_int8_t th_off:4;		/* data offset */
+-#  endif
+-#  if __BYTE_ORDER == __BIG_ENDIAN
+-    u_int8_t th_off:4;		/* data offset */
+-    u_int8_t th_x2:4;		/* (unused) */
+-#  endif
+-    u_int8_t th_flags;
+-#  define TH_FIN	0x01
+-#  define TH_SYN	0x02
+-#  define TH_RST	0x04
+-#  define TH_PUSH	0x08
+-#  define TH_ACK	0x10
+-#  define TH_URG	0x20
+-    u_int16_t th_win;		/* window */
+-    u_int16_t th_sum;		/* checksum */
+-    u_int16_t th_urp;		/* urgent pointer */
++    __extension__ union
++    {
++      struct
++      {
++	uint16_t th_sport;	/* source port */
++	uint16_t th_dport;	/* destination port */
++	tcp_seq th_seq;		/* sequence number */
++	tcp_seq th_ack;		/* acknowledgement number */
++# if __BYTE_ORDER == __LITTLE_ENDIAN
++	uint8_t th_x2:4;	/* (unused) */
++	uint8_t th_off:4;	/* data offset */
++# endif
++# if __BYTE_ORDER == __BIG_ENDIAN
++	uint8_t th_off:4;	/* data offset */
++	uint8_t th_x2:4;	/* (unused) */
++# endif
++	uint8_t th_flags;
++# define TH_FIN	0x01
++# define TH_SYN	0x02
++# define TH_RST	0x04
++# define TH_PUSH	0x08
++# define TH_ACK	0x10
++# define TH_URG	0x20
++	uint16_t th_win;	/* window */
++	uint16_t th_sum;	/* checksum */
++	uint16_t th_urp;	/* urgent pointer */
++      };
++      struct
++      {
++	uint16_t source;
++	uint16_t dest;
++	uint32_t seq;
++	uint32_t ack_seq;
++# if __BYTE_ORDER == __LITTLE_ENDIAN
++	uint16_t res1:4;
++	uint16_t doff:4;
++	uint16_t fin:1;
++	uint16_t syn:1;
++	uint16_t rst:1;
++	uint16_t psh:1;
++	uint16_t ack:1;
++	uint16_t urg:1;
++	uint16_t res2:2;
++# elif __BYTE_ORDER == __BIG_ENDIAN
++	uint16_t doff:4;
++	uint16_t res1:4;
++	uint16_t res2:2;
++	uint16_t urg:1;
++	uint16_t ack:1;
++	uint16_t psh:1;
++	uint16_t rst:1;
++	uint16_t syn:1;
++	uint16_t fin:1;
++# else
++#  error "Adjust your <bits/endian.h> defines"
++# endif
++	uint16_t window;
++	uint16_t check;
++	uint16_t urg_ptr;
++      };
++    };
+ };
+ 
+-# else /* !__FAVOR_BSD */
+-struct tcphdr
+-  {
+-    u_int16_t source;
+-    u_int16_t dest;
+-    u_int32_t seq;
+-    u_int32_t ack_seq;
+-#  if __BYTE_ORDER == __LITTLE_ENDIAN
+-    u_int16_t res1:4;
+-    u_int16_t doff:4;
+-    u_int16_t fin:1;
+-    u_int16_t syn:1;
+-    u_int16_t rst:1;
+-    u_int16_t psh:1;
+-    u_int16_t ack:1;
+-    u_int16_t urg:1;
+-    u_int16_t res2:2;
+-#  elif __BYTE_ORDER == __BIG_ENDIAN
+-    u_int16_t doff:4;
+-    u_int16_t res1:4;
+-    u_int16_t res2:2;
+-    u_int16_t urg:1;
+-    u_int16_t ack:1;
+-    u_int16_t psh:1;
+-    u_int16_t rst:1;
+-    u_int16_t syn:1;
+-    u_int16_t fin:1;
+-#  else
+-#   error "Adjust your <bits/endian.h> defines"
+-#  endif
+-    u_int16_t window;
+-    u_int16_t check;
+-    u_int16_t urg_ptr;
+-};
+-# endif /* __FAVOR_BSD */
+-
+ enum
+ {
+   TCP_ESTABLISHED = 1,
+diff --git a/include/netinet/udp.h b/include/netinet/udp.h
+index 7d49768..ac6f234 100644
+--- a/include/netinet/udp.h
++++ b/include/netinet/udp.h
+@@ -52,27 +52,28 @@
+ 
+ 
+ /* UDP header as specified by RFC 768, August 1980. */
+-#ifdef __FAVOR_BSD
+ 
+ struct udphdr
+ {
+-  u_int16_t uh_sport;		/* source port */
+-  u_int16_t uh_dport;		/* destination port */
+-  u_int16_t uh_ulen;		/* udp length */
+-  u_int16_t uh_sum;		/* udp checksum */
++  __extension__ union
++  {
++    struct
++    {
++      uint16_t uh_sport;	/* source port */
++      uint16_t uh_dport;	/* destination port */
++      uint16_t uh_ulen;		/* udp length */
++      uint16_t uh_sum;		/* udp checksum */
++    };
++    struct
++    {
++      uint16_t source;
++      uint16_t dest;
++      uint16_t len;
++      uint16_t check;
++    };
++  };
+ };
+ 
+-#else
+-
+-struct udphdr
+-{
+-  u_int16_t source;
+-  u_int16_t dest;
+-  u_int16_t len;
+-  u_int16_t check;
+-};
+-#endif
+-
+ /* UDP socket options */
+ #define UDP_CORK	1	/* Never send partially complete segments.  */
+ #define UDP_ENCAP	100	/* Set the socket to accept
+diff --git a/include/setjmp.h b/include/setjmp.h
+index 71c1d35..27cac95 100644
+--- a/include/setjmp.h
++++ b/include/setjmp.h
+@@ -59,21 +59,13 @@ __END_NAMESPACE_STD
+ extern int __sigsetjmp (struct __jmp_buf_tag __env[1], int __savemask)
+     __THROWNL;
+ 
+-#ifndef	__FAVOR_BSD
+ /* Store the calling environment in ENV, not saving the signal mask.
+    Return 0.  */
+ extern int _setjmp (struct __jmp_buf_tag __env[1]) __THROWNL;
+ 
+ /* Do not save the signal mask.  This is equivalent to the `_setjmp'
+    BSD function.  */
+-# define setjmp(env)	_setjmp (env)
+-#else
+-/* We are in 4.3 BSD-compatibility mode in which `setjmp'
+-   saves the signal mask like `sigsetjmp (ENV, 1)'.  We have to
+-   define a macro since ISO C says `setjmp' is one.  */
+-# define setjmp(env)	setjmp (env)
+-#endif /* Favor BSD.  */
+-
++#define setjmp(env)	_setjmp (env)
+ 
+ __BEGIN_NAMESPACE_STD
+ 
+diff --git a/include/signal.h b/include/signal.h
+index 38292a7..d2d5e4a 100644
+--- a/include/signal.h
++++ b/include/signal.h
+@@ -191,27 +191,15 @@ extern void psiginfo (const siginfo_t *__pinfo, const char *__s);
+ /* The `sigpause' function has two different interfaces.  The original
+    BSD definition defines the argument as a mask of the signal, while
+    the more modern interface in X/Open defines it as the signal
+-   number.  We go with the BSD version unless the user explicitly
+-   selects the X/Open version.
++   number.  We go with the X/Open version.
+ 
+    This function is a cancellation point and therefore not marked with
+    __THROW.  */
+-/*extern int __sigpause (int __sig_or_mask, int __is_sig);*/
+-
+-#ifdef __FAVOR_BSD
+-/* Set the mask of blocked signals to MASK,
+-   wait for a signal to arrive, and then restore the mask.  */
+-/*extern int sigpause (int __mask) __THROW __attribute_deprecated__;
+-# define sigpause(mask) __sigpause ((mask), 0)*/
+-/* uClibc note: BSD sigpause is available as __bsd_sigpause.
+- * It is intentionally not prototyped */
+-#else
+-# ifdef __USE_XOPEN
++
++# ifdef __USE_XOPEN_EXTENDED
+ /* Remove a signal from the signal mask and suspend the process.  */
+ extern int sigpause(int __sig);
+-/*#  define sigpause(sig) __sigpause ((sig), 1)*/
+ # endif
+-#endif
+ #endif /* __UCLIBC_SUSV4_LEGACY__ */
+ 
+ #if 0 /*def __USE_BSD*/
+diff --git a/include/unistd.h b/include/unistd.h
+index 8e4daf6..f48ce21 100644
+--- a/include/unistd.h
++++ b/include/unistd.h
+@@ -673,17 +673,8 @@ libc_hidden_proto(getpid)
+ /* Get the process ID of the calling process's parent.  */
+ extern __pid_t getppid (void) __THROW;
+ 
+-/* Get the process group ID of the calling process.
+-   This function is different on old BSD. */
+-#ifndef __FAVOR_BSD
++/* Get the process group ID of the calling process.  */
+ extern __pid_t getpgrp (void) __THROW;
+-#else
+-# ifdef __REDIRECT_NTH
+-extern __pid_t __REDIRECT_NTH (getpgrp, (__pid_t __pid), __getpgid);
+-# else
+-#  define getpgrp __getpgid
+-# endif
+-#endif
+ 
+ /* Get the process group ID of process PID.  */
+ extern __pid_t __getpgid (__pid_t __pid) __THROW;
+@@ -698,7 +689,7 @@ extern __pid_t getpgid (__pid_t __pid) __THROW;
+ extern int setpgid (__pid_t __pid, __pid_t __pgid) __THROW;
+ libc_hidden_proto(setpgid)
+ 
+-#if defined __USE_SVID || defined __USE_BSD || defined __USE_XOPEN_EXTENDED
++#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
+ /* Both System V and BSD have `setpgrp' functions, but with different
+    calling conventions.  The BSD function is the same as POSIX.1 `setpgid'
+    (above).  The System V function takes no arguments and puts the calling
+@@ -706,26 +697,13 @@ libc_hidden_proto(setpgid)
+ 
+    New programs should always use `setpgid' instead.
+ 
+-   The default in GNU is to provide the System V function.  The BSD
+-   function is available under -D_BSD_SOURCE.  */
+-
+-# ifndef __FAVOR_BSD
++   GNU provides the POSIX.1 function.  */
+ 
+ /* Set the process group ID of the calling process to its own PID.
+    This is exactly the same as `setpgid (0, 0)'.  */
+ extern int setpgrp (void) __THROW;
+ 
+-# else
+-
+-/* Another name for `setpgid' (above).  */
+-#  ifdef __REDIRECT_NTH
+-extern int __REDIRECT_NTH (setpgrp, (__pid_t __pid, __pid_t __pgrp), setpgid);
+-#  else
+-#   define setpgrp setpgid
+-#  endif
+-
+-# endif	/* Favor BSD.  */
+-#endif	/* Use SVID or BSD.  */
++#endif	/* Use misc or X/Open.  */
+ 
+ /* Create a new session with the calling process as its leader.
+    The process group IDs of the session and the calling process
+-- 
+2.1.4
+
-- 
2.1.4



More information about the buildroot mailing list