summaryrefslogtreecommitdiffstats
path: root/meta/recipes-core/uclibc
diff options
context:
space:
mode:
authorKhem Raj <raj.khem@gmail.com>2015-08-17 02:35:33 -0700
committerRichard Purdie <richard.purdie@linuxfoundation.org>2015-08-19 18:05:36 +0100
commitd6eb9cceb3079d0512535f8e5e32fe3a28fdf9b2 (patch)
treed7f603eadeec6d241e1867061356c5aa90047f14 /meta/recipes-core/uclibc
parent71e18354198276fa7a9c4d343693bec90ec9b50d (diff)
downloadpoky-d6eb9cceb3079d0512535f8e5e32fe3a28fdf9b2.tar.gz
uclibc: Upgrade to tip of master
Drop upstreamed patches convert the rest to git am'able patches (From OE-Core rev: 1c28f9300f133dc49755b34e4861ab5509609da4) Signed-off-by: Khem Raj <raj.khem@gmail.com> Signed-off-by: Ross Burton <ross.burton@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/recipes-core/uclibc')
-rw-r--r--meta/recipes-core/uclibc/uclibc-git.inc36
-rw-r--r--meta/recipes-core/uclibc/uclibc-git/0001-Add-eventfd_read-and-eventfd_write.patch120
-rw-r--r--meta/recipes-core/uclibc/uclibc-git/0001-Define-IPTOS_CLASS_-macros-according-to-RFC-2474.patch75
-rw-r--r--meta/recipes-core/uclibc/uclibc-git/0001-Disable-lrount_tes-function.patch37
-rw-r--r--meta/recipes-core/uclibc/uclibc-git/0001-Revert-utent.c-wtent.c-move-functions-from-utxent.c.patch319
-rw-r--r--meta/recipes-core/uclibc/uclibc-git/0001-atexit_old-Do-not-add-it-to-shared-libc.patch44
-rw-r--r--meta/recipes-core/uclibc/uclibc-git/0001-librt-Use-nodefaultlibs-instead-of-nostdlib.patch33
-rw-r--r--meta/recipes-core/uclibc/uclibc-git/0001-nptl-arm-Move-aeabi_read_tp-to-uclibc_nonshared.a.patch28
-rw-r--r--meta/recipes-core/uclibc/uclibc-git/0001-nptl-atfork-Hide-pthread_atfork-in-shared-versions.patch74
-rw-r--r--meta/recipes-core/uclibc/uclibc-git/0001-timex-Sync-with-glibc.patch33
-rw-r--r--meta/recipes-core/uclibc/uclibc-git/0002-Add-implementation-for-copysignl-for-ppc.patch (renamed from meta/recipes-core/uclibc/uclibc-git/powerpc_copysignl.patch)32
-rw-r--r--meta/recipes-core/uclibc/uclibc-git/0002-wire-setns-syscall.patch68
-rw-r--r--meta/recipes-core/uclibc/uclibc-git/0003-Add-argp-implementation.patch (renamed from meta/recipes-core/uclibc/uclibc-git/argp-support.patch)911
-rw-r--r--meta/recipes-core/uclibc/uclibc-git/0004-Dont-support-localised-optimizations-this-helps-to-h.patch30
-rw-r--r--meta/recipes-core/uclibc/uclibc-git/0005-Always-use-O2-for-compiling-fork.c.patch33
-rw-r--r--meta/recipes-core/uclibc/uclibc-git/0006-ldso-limited-support-for-ORIGIN-in-rpath.patch (renamed from meta/recipes-core/uclibc/uclibc-git/0001-ldso-limited-support-for-ORIGIN-in-rpath.patch)13
-rw-r--r--meta/recipes-core/uclibc/uclibc-git/0007-nptl-atfork-Hide-pthread_atfork-in-shared-versions.patch35
-rw-r--r--meta/recipes-core/uclibc/uclibc-git/argp-headers.patch583
-rw-r--r--meta/recipes-core/uclibc/uclibc-git/compile-arm-fork-with-O2.patch21
-rw-r--r--meta/recipes-core/uclibc/uclibc-git/ldso-mark-_dl_exit-as-noreturn.patch48
-rw-r--r--meta/recipes-core/uclibc/uclibc-git/remove_attribute_optimize_Os.patch19
-rw-r--r--meta/recipes-core/uclibc/uclibc-git/uclibc_enable_log2_test.patch35
-rw-r--r--meta/recipes-core/uclibc/uclibc.inc2
23 files changed, 944 insertions, 1685 deletions
diff --git a/meta/recipes-core/uclibc/uclibc-git.inc b/meta/recipes-core/uclibc/uclibc-git.inc
index 3c489406d9..14a577f432 100644
--- a/meta/recipes-core/uclibc/uclibc-git.inc
+++ b/meta/recipes-core/uclibc/uclibc-git.inc
@@ -1,30 +1,20 @@
1SRCREV = "48a0006012679ff0eda6f256da958d73a924fb57" 1SRCREV = "ca1c74d67dd115d059a875150e10b8560a9c35a8"
2 2
3PV = "0.9.33+git${SRCPV}" 3PV = "0.9.33+git${SRCPV}"
4 4
5FILESEXTRAPATHS =. "${FILE_DIRNAME}/uclibc-git:" 5FILESEXTRAPATHS =. "${FILE_DIRNAME}/uclibc-git:"
6 6
7SRC_URI = "git://uclibc.org/uClibc.git;branch=master \ 7SRC_URI = "git://uclibc.org/uClibc.git;branch=master \
8 file://uClibc.machine \ 8 file://uClibc.machine \
9 file://uClibc.distro \ 9 file://uClibc.distro \
10 file://obstack.cfg \ 10 file://obstack.cfg \
11 file://locale.cfg \ 11 file://locale.cfg \
12 file://uclibc_enable_log2_test.patch \ 12 file://0001-Disable-lrount_tes-function.patch \
13 file://powerpc_copysignl.patch \ 13 file://0002-Add-implementation-for-copysignl-for-ppc.patch \
14 file://argp-support.patch \ 14 file://0003-Add-argp-implementation.patch \
15 file://argp-headers.patch \ 15 file://0004-Dont-support-localised-optimizations-this-helps-to-h.patch \
16 file://remove_attribute_optimize_Os.patch \ 16 file://0005-Always-use-O2-for-compiling-fork.c.patch \
17 file://compile-arm-fork-with-O2.patch \ 17 file://0006-ldso-limited-support-for-ORIGIN-in-rpath.patch \
18 file://0001-ldso-limited-support-for-ORIGIN-in-rpath.patch \ 18 file://0007-nptl-atfork-Hide-pthread_atfork-in-shared-versions.patch \
19 file://0001-atexit_old-Do-not-add-it-to-shared-libc.patch \ 19"
20 file://0001-nptl-arm-Move-aeabi_read_tp-to-uclibc_nonshared.a.patch \
21 file://0001-nptl-atfork-Hide-pthread_atfork-in-shared-versions.patch \
22 file://0001-librt-Use-nodefaultlibs-instead-of-nostdlib.patch \
23 file://0001-Revert-utent.c-wtent.c-move-functions-from-utxent.c.patch \
24 file://0001-Add-eventfd_read-and-eventfd_write.patch \
25 file://0002-wire-setns-syscall.patch \
26 file://0001-Define-IPTOS_CLASS_-macros-according-to-RFC-2474.patch \
27 file://0001-timex-Sync-with-glibc.patch \
28 file://ldso-mark-_dl_exit-as-noreturn.patch \
29 "
30S = "${WORKDIR}/git" 20S = "${WORKDIR}/git"
diff --git a/meta/recipes-core/uclibc/uclibc-git/0001-Add-eventfd_read-and-eventfd_write.patch b/meta/recipes-core/uclibc/uclibc-git/0001-Add-eventfd_read-and-eventfd_write.patch
deleted file mode 100644
index dd0efc0f36..0000000000
--- a/meta/recipes-core/uclibc/uclibc-git/0001-Add-eventfd_read-and-eventfd_write.patch
+++ /dev/null
@@ -1,120 +0,0 @@
1From e3aae24ede969e2dede1aa19c2ee520cab71ce11 Mon Sep 17 00:00:00 2001
2From: Khem Raj <raj.khem@gmail.com>
3Date: Thu, 20 Feb 2014 00:30:18 -0800
4Subject: [PATCH 1/3] Add eventfd_read() and eventfd_write()
5
6Signed-off-by: Khem Raj <raj.khem@gmail.com>
7Upstream-Status: Pending
8---
9 libc/sysdeps/linux/common/Makefile.in | 2 ++
10 libc/sysdeps/linux/common/eventfd_read.c | 27 +++++++++++++++++++++++++++
11 libc/sysdeps/linux/common/eventfd_write.c | 28 ++++++++++++++++++++++++++++
12 libc/sysdeps/linux/common/sys/eventfd.h | 4 ----
13 4 files changed, 57 insertions(+), 4 deletions(-)
14 create mode 100644 libc/sysdeps/linux/common/eventfd_read.c
15 create mode 100644 libc/sysdeps/linux/common/eventfd_write.c
16
17diff --git a/libc/sysdeps/linux/common/Makefile.in b/libc/sysdeps/linux/common/Makefile.in
18index dbf0b0f..45d2e21 100644
19--- a/libc/sysdeps/linux/common/Makefile.in
20+++ b/libc/sysdeps/linux/common/Makefile.in
21@@ -25,6 +25,8 @@ CSRC-$(UCLIBC_LINUX_SPECIFIC) += \
22 capset.c \
23 dup3.c \
24 eventfd.c \
25+ eventfd_read.c \
26+ eventfd_write.c \
27 inotify.c \
28 ioperm.c \
29 iopl.c \
30diff --git a/libc/sysdeps/linux/common/eventfd_read.c b/libc/sysdeps/linux/common/eventfd_read.c
31new file mode 100644
32index 0000000..75f2aaa
33--- /dev/null
34+++ b/libc/sysdeps/linux/common/eventfd_read.c
35@@ -0,0 +1,27 @@
36+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
37+ This file is part of the GNU C Library.
38+
39+ The GNU C Library is free software; you can redistribute it and/or
40+ modify it under the terms of the GNU Lesser General Public
41+ License as published by the Free Software Foundation; either
42+ version 2.1 of the License, or (at your option) any later version.
43+
44+ The GNU C Library is distributed in the hope that it will be useful,
45+ but WITHOUT ANY WARRANTY; without even the implied warranty of
46+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
47+ Lesser General Public License for more details.
48+
49+ You should have received a copy of the GNU Lesser General Public
50+ License along with the GNU C Library; if not, see
51+ <http://www.gnu.org/licenses/>. */
52+
53+#include <errno.h>
54+#include <unistd.h>
55+#include <sys/eventfd.h>
56+
57+
58+int
59+eventfd_read (int fd, eventfd_t *value)
60+{
61+ return read (fd, value, sizeof (eventfd_t)) != sizeof (eventfd_t) ? -1 : 0;
62+}
63diff --git a/libc/sysdeps/linux/common/eventfd_write.c b/libc/sysdeps/linux/common/eventfd_write.c
64new file mode 100644
65index 0000000..e1509cf
66--- /dev/null
67+++ b/libc/sysdeps/linux/common/eventfd_write.c
68@@ -0,0 +1,28 @@
69+/* Copyright (C) 2007-2014 Free Software Foundation, Inc.
70+ This file is part of the GNU C Library.
71+
72+ The GNU C Library is free software; you can redistribute it and/or
73+ modify it under the terms of the GNU Lesser General Public
74+ License as published by the Free Software Foundation; either
75+ version 2.1 of the License, or (at your option) any later version.
76+
77+ The GNU C Library is distributed in the hope that it will be useful,
78+ but WITHOUT ANY WARRANTY; without even the implied warranty of
79+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
80+ Lesser General Public License for more details.
81+
82+ You should have received a copy of the GNU Lesser General Public
83+ License along with the GNU C Library; if not, see
84+ <http://www.gnu.org/licenses/>. */
85+
86+#include <errno.h>
87+#include <unistd.h>
88+#include <sys/eventfd.h>
89+
90+
91+int
92+eventfd_write (int fd, eventfd_t value)
93+{
94+ return write (fd, &value,
95+ sizeof (eventfd_t)) != sizeof (eventfd_t) ? -1 : 0;
96+}
97diff --git a/libc/sysdeps/linux/common/sys/eventfd.h b/libc/sysdeps/linux/common/sys/eventfd.h
98index 1bf785f..91b265b 100644
99--- a/libc/sysdeps/linux/common/sys/eventfd.h
100+++ b/libc/sysdeps/linux/common/sys/eventfd.h
101@@ -33,16 +33,12 @@ __BEGIN_DECLS
102 value to COUNT. */
103 extern int eventfd (int __count, int __flags) __THROW;
104
105-#if 0 /* not (yet) implemented in uClibc */
106-
107 /* Read event counter and possibly wait for events. */
108 extern int eventfd_read (int __fd, eventfd_t *__value);
109
110 /* Increment event counter. */
111 extern int eventfd_write (int __fd, eventfd_t __value);
112
113-#endif
114-
115 __END_DECLS
116
117 #endif /* sys/eventfd.h */
118--
1191.9.0
120
diff --git a/meta/recipes-core/uclibc/uclibc-git/0001-Define-IPTOS_CLASS_-macros-according-to-RFC-2474.patch b/meta/recipes-core/uclibc/uclibc-git/0001-Define-IPTOS_CLASS_-macros-according-to-RFC-2474.patch
deleted file mode 100644
index d613823695..0000000000
--- a/meta/recipes-core/uclibc/uclibc-git/0001-Define-IPTOS_CLASS_-macros-according-to-RFC-2474.patch
+++ /dev/null
@@ -1,75 +0,0 @@
1From be8ed13a90c528adfbe3c8543946bb2c5a2ad713 Mon Sep 17 00:00:00 2001
2From: Khem Raj <raj.khem@gmail.com>
3Date: Mon, 25 Aug 2014 15:50:36 -0700
4Subject: [PATCH] Define IPTOS_CLASS_* macros according to RFC 2474
5
6Signed-off-by: Khem Raj <raj.khem@gmail.com>
7Upstream-status: Pending
8---
9 include/netinet/ip.h | 42 ++++++++++++++++++++++++++++++------------
10 1 file changed, 30 insertions(+), 12 deletions(-)
11
12diff --git a/include/netinet/ip.h b/include/netinet/ip.h
13index 19e1249..3fe58b9 100644
14--- a/include/netinet/ip.h
15+++ b/include/netinet/ip.h
16@@ -188,7 +188,25 @@ struct ip_timestamp
17 #define IPTOS_DSCP_EF 0xb8
18
19 /*
20- * Definitions for IP type of service (ip_tos)
21+ * In RFC 2474, Section 4.2.2.1, the Class Selector Codepoints subsume
22+ * the old ToS Precedence values.
23+ */
24+#define IPTOS_CLASS_MASK 0xe0
25+#define IPTOS_CLASS(class) ((class) & IPTOS_CLASS_MASK)
26+#define IPTOS_CLASS_CS0 0x00
27+#define IPTOS_CLASS_CS1 0x20
28+#define IPTOS_CLASS_CS2 0x40
29+#define IPTOS_CLASS_CS3 0x60
30+#define IPTOS_CLASS_CS4 0x80
31+#define IPTOS_CLASS_CS5 0xa0
32+#define IPTOS_CLASS_CS6 0xc0
33+#define IPTOS_CLASS_CS7 0xe0
34+
35+#define IPTOS_CLASS_DEFAULT IPTOS_CLASS_CS0
36+
37+/*
38+ * Definitions for IP type of service (ip_tos) [deprecated; use DSCP
39+ * and CS definitions above instead.]
40 */
41 #define IPTOS_TOS_MASK 0x1E
42 #define IPTOS_TOS(tos) ((tos) & IPTOS_TOS_MASK)
43@@ -199,18 +217,18 @@ struct ip_timestamp
44 #define IPTOS_MINCOST IPTOS_LOWCOST
45
46 /*
47- * Definitions for IP precedence (also in ip_tos) (hopefully unused)
48+ * Definitions for IP precedence (also in ip_tos) [also deprecated.]
49 */
50-#define IPTOS_PREC_MASK 0xe0
51-#define IPTOS_PREC(tos) ((tos) & IPTOS_PREC_MASK)
52-#define IPTOS_PREC_NETCONTROL 0xe0
53-#define IPTOS_PREC_INTERNETCONTROL 0xc0
54-#define IPTOS_PREC_CRITIC_ECP 0xa0
55-#define IPTOS_PREC_FLASHOVERRIDE 0x80
56-#define IPTOS_PREC_FLASH 0x60
57-#define IPTOS_PREC_IMMEDIATE 0x40
58-#define IPTOS_PREC_PRIORITY 0x20
59-#define IPTOS_PREC_ROUTINE 0x00
60+#define IPTOS_PREC_MASK IPTOS_CLASS_MASK
61+#define IPTOS_PREC(tos) IPTOS_CLASS(tos)
62+#define IPTOS_PREC_NETCONTROL IPTOS_CLASS_CS7
63+#define IPTOS_PREC_INTERNETCONTROL IPTOS_CLASS_CS6
64+#define IPTOS_PREC_CRITIC_ECP IPTOS_CLASS_CS5
65+#define IPTOS_PREC_FLASHOVERRIDE IPTOS_CLASS_CS4
66+#define IPTOS_PREC_FLASH IPTOS_CLASS_CS3
67+#define IPTOS_PREC_IMMEDIATE IPTOS_CLASS_CS2
68+#define IPTOS_PREC_PRIORITY IPTOS_CLASS_CS1
69+#define IPTOS_PREC_ROUTINE IPTOS_CLASS_CS0
70
71 /*
72 * Definitions for options.
73--
742.1.0
75
diff --git a/meta/recipes-core/uclibc/uclibc-git/0001-Disable-lrount_tes-function.patch b/meta/recipes-core/uclibc/uclibc-git/0001-Disable-lrount_tes-function.patch
new file mode 100644
index 0000000000..506f146a79
--- /dev/null
+++ b/meta/recipes-core/uclibc/uclibc-git/0001-Disable-lrount_tes-function.patch
@@ -0,0 +1,37 @@
1From 14b865b3438d0df29b4969148678d8fa8943e1ef Mon Sep 17 00:00:00 2001
2From: Khem Raj <raj.khem@gmail.com>
3Date: Sun, 16 Aug 2015 20:49:33 -0700
4Subject: [PATCH 1/7] Disable lrount_tes() function
5
6Its not used anyway, avoids some strict compiler warnings
7
8Signed-off-by: Khem Raj <raj.khem@gmail.com>
9---
10Upstream-Status: Pending
11
12 test/math/libm-test.inc | 2 --
13 1 file changed, 2 deletions(-)
14
15diff --git a/test/math/libm-test.inc b/test/math/libm-test.inc
16index f50b48b..6d70a95 100644
17--- a/test/math/libm-test.inc
18+++ b/test/math/libm-test.inc
19@@ -3470,7 +3470,6 @@ logb_test (void)
20 }
21
22
23-#if 0
24 static void
25 lround_test (void)
26 {
27@@ -3605,7 +3604,6 @@ llround_test (void)
28
29 END (llround);
30 }
31-#endif
32
33 static void
34 modf_test (void)
35--
362.1.4
37
diff --git a/meta/recipes-core/uclibc/uclibc-git/0001-Revert-utent.c-wtent.c-move-functions-from-utxent.c.patch b/meta/recipes-core/uclibc/uclibc-git/0001-Revert-utent.c-wtent.c-move-functions-from-utxent.c.patch
deleted file mode 100644
index 4ac765c334..0000000000
--- a/meta/recipes-core/uclibc/uclibc-git/0001-Revert-utent.c-wtent.c-move-functions-from-utxent.c.patch
+++ /dev/null
@@ -1,319 +0,0 @@
1Upstream-Status: Pending
2
3From 096abf14d2dc978607ccd8a0d7f42da65d8991f3 Mon Sep 17 00:00:00 2001
4From: Khem Raj <raj.khem@gmail.com>
5Date: Sun, 9 Sep 2012 22:00:04 -0700
6Subject: [PATCH] Revert "utent.c, wtent.c: move functions from utxent.c"
7
8This reverts commit 84135275cfeebc0b233c1c96eeada4d4178a0b18.
9---
10 include/utmp.h | 8 +++++
11 libc/misc/utmp/utent.c | 80 +++++++++++------------------------------------
12 libc/misc/utmp/utxent.c | 4 +--
13 libc/misc/utmp/wtent.c | 14 ++-------
14 4 files changed, 30 insertions(+), 76 deletions(-)
15
16Index: git/include/utmp.h
17===================================================================
18--- git.orig/include/utmp.h 2013-01-21 16:37:18.000000000 -0800
19+++ git/include/utmp.h 2013-01-21 16:40:56.987583099 -0800
20@@ -56,30 +56,37 @@
21 /* Append entry UTMP to the wtmp-like file WTMP_FILE. */
22 extern void updwtmp (const char *__wtmp_file, const struct utmp *__utmp)
23 __THROW;
24+libc_hidden_proto(updwtmp)
25
26 /* Change name of the utmp file to be examined. */
27 extern int utmpname (const char *__file) __THROW;
28+libc_hidden_proto(utmpname)
29
30 /* Read next entry from a utmp-like file. */
31 extern struct utmp *getutent (void) __THROW;
32+libc_hidden_proto(getutent)
33
34 /* Reset the input stream to the beginning of the file. */
35 extern void setutent (void) __THROW;
36+libc_hidden_proto(setutent)
37
38 /* Close the current open file. */
39 extern void endutent (void) __THROW;
40+libc_hidden_proto(endutent)
41
42 /* Search forward from the current point in the utmp file until the
43 next entry with a ut_type matching ID->ut_type. */
44 extern struct utmp *getutid (const struct utmp *__id) __THROW;
45+libc_hidden_proto(getutid)
46
47 /* Search forward from the current point in the utmp file until the
48 next entry with a ut_line matching LINE->ut_line. */
49 extern struct utmp *getutline (const struct utmp *__line) __THROW;
50+libc_hidden_proto(getutline)
51
52 /* Write out entry pointed to by UTMP_PTR into the utmp file. */
53 extern struct utmp *pututline (const struct utmp *__utmp_ptr) __THROW;
54-
55+libc_hidden_proto(pututline)
56
57 #if 0 /* def __USE_MISC */
58 /* Reentrant versions of the file for handling utmp files. */
59Index: git/libc/misc/utmp/utent.c
60===================================================================
61--- git.orig/libc/misc/utmp/utent.c 2013-01-21 16:37:18.000000000 -0800
62+++ git/libc/misc/utmp/utent.c 2013-01-21 16:38:14.035578638 -0800
63@@ -19,9 +19,6 @@
64 #include <errno.h>
65 #include <string.h>
66 #include <utmp.h>
67-#ifdef __UCLIBC_HAS_UTMPX__
68-# include <utmpx.h>
69-#endif
70 #include <not-cancel.h>
71
72 #include <bits/uClibc_mutex.h>
73@@ -34,7 +31,7 @@
74 static const char *static_ut_name = default_file_name;
75
76 /* This function must be called with the LOCK held */
77-static void __setutent_unlocked(void)
78+static void __setutent(void)
79 {
80 if (static_fd < 0) {
81 static_fd = open_not_cancel_2(static_ut_name, O_RDWR | O_CLOEXEC);
82@@ -53,24 +50,19 @@
83 lseek(static_fd, 0, SEEK_SET);
84 }
85 #if defined __UCLIBC_HAS_THREADS__
86-static void __setutent(void)
87+void setutent(void)
88 {
89 __UCLIBC_MUTEX_LOCK(utmplock);
90- __setutent_unlocked();
91+ __setutent();
92 __UCLIBC_MUTEX_UNLOCK(utmplock);
93 }
94 #else
95-static void __setutent(void);
96-strong_alias(__setutent_unlocked,__setutent)
97-#endif
98 strong_alias(__setutent,setutent)
99-
100-#ifdef __UCLIBC_HAS_UTMPX__
101-strong_alias(__setutent,setutxent)
102 #endif
103+libc_hidden_def(setutent)
104
105 /* This function must be called with the LOCK held */
106-static struct utmp *__getutent_unlocked(void)
107+static struct utmp *__getutent(void)
108 {
109 if (static_fd < 0) {
110 __setutent();
111@@ -86,27 +78,19 @@
112 return NULL;
113 }
114 #if defined __UCLIBC_HAS_THREADS__
115-static struct utmp *__getutent(void)
116+struct utmp *getutent(void)
117 {
118 struct utmp *ret;
119
120 __UCLIBC_MUTEX_LOCK(utmplock);
121- ret = __getutent_unlocked();
122+ ret = __getutent();
123 __UCLIBC_MUTEX_UNLOCK(utmplock);
124 return ret;
125 }
126 #else
127-static struct utmp *__getutent(void);
128-strong_alias(__getutent_unlocked,__getutent)
129-#endif
130 strong_alias(__getutent,getutent)
131-
132-#ifdef __UCLIBC_HAS_UTMPX__
133-struct utmpx *getutxent(void)
134-{
135- return (struct utmpx *) __getutent ();
136-}
137 #endif
138+libc_hidden_def(getutent)
139
140 static void __endutent(void)
141 {
142@@ -117,13 +101,10 @@
143 __UCLIBC_MUTEX_UNLOCK(utmplock);
144 }
145 strong_alias(__endutent,endutent)
146-
147-#ifdef __UCLIBC_HAS_UTMPX__
148-strong_alias(__endutent,endutxent)
149-#endif
150+libc_hidden_def(endutent)
151
152 /* This function must be called with the LOCK held */
153-static struct utmp *__getutid_unlocked(const struct utmp *utmp_entry)
154+static struct utmp *__getutid(const struct utmp *utmp_entry)
155 {
156 struct utmp *lutmp;
157 unsigned type;
158@@ -133,7 +114,7 @@
159 type = utmp_entry->ut_type - 1;
160 type /= 4;
161
162- while ((lutmp = __getutent_unlocked()) != NULL) {
163+ while ((lutmp = __getutent()) != NULL) {
164 if (type == 0 && lutmp->ut_type == utmp_entry->ut_type) {
165 /* one of RUN_LVL, BOOT_TIME, NEW_TIME, OLD_TIME */
166 return lutmp;
167@@ -147,34 +128,26 @@
168 return NULL;
169 }
170 #if defined __UCLIBC_HAS_THREADS__
171-static struct utmp *__getutid(const struct utmp *utmp_entry)
172+struct utmp *getutid(const struct utmp *utmp_entry)
173 {
174 struct utmp *ret;
175
176 __UCLIBC_MUTEX_LOCK(utmplock);
177- ret = __getutid_unlocked(utmp_entry);
178+ ret = __getutid(utmp_entry);
179 __UCLIBC_MUTEX_UNLOCK(utmplock);
180 return ret;
181 }
182 #else
183-static struct utmp *__getutid(const struct utmp *utmp_entry);
184-strong_alias(__getutid_unlocked,__getutid)
185-#endif
186 strong_alias(__getutid,getutid)
187-
188-#ifdef __UCLIBC_HAS_UTMPX__
189-struct utmpx *getutxid(const struct utmpx *utmp_entry)
190-{
191- return (struct utmpx *) __getutid ((const struct utmp *) utmp_entry);
192-}
193 #endif
194+libc_hidden_def(getutid)
195
196 static struct utmp *__getutline(const struct utmp *utmp_entry)
197 {
198 struct utmp *lutmp;
199
200 __UCLIBC_MUTEX_LOCK(utmplock);
201- while ((lutmp = __getutent_unlocked()) != NULL) {
202+ while ((lutmp = __getutent()) != NULL) {
203 if (lutmp->ut_type == USER_PROCESS || lutmp->ut_type == LOGIN_PROCESS) {
204 if (strncmp(lutmp->ut_line, utmp_entry->ut_line, sizeof(lutmp->ut_line)) == 0) {
205 break;
206@@ -185,13 +158,7 @@
207 return lutmp;
208 }
209 strong_alias(__getutline,getutline)
210-
211-#ifdef __UCLIBC_HAS_UTMPX__
212-struct utmpx *getutxline(const struct utmpx *utmp_entry)
213-{
214- return (struct utmpx *) __getutline ((const struct utmp *) utmp_entry);
215-}
216-#endif
217+libc_hidden_def(getutline)
218
219 static struct utmp *__pututline(const struct utmp *utmp_entry)
220 {
221@@ -200,7 +167,7 @@
222 the file pointer where they want it, everything will work out. */
223 lseek(static_fd, (off_t) - sizeof(struct utmp), SEEK_CUR);
224
225- if (__getutid_unlocked(utmp_entry) != NULL)
226+ if (__getutid(utmp_entry) != NULL)
227 lseek(static_fd, (off_t) - sizeof(struct utmp), SEEK_CUR);
228 else
229 lseek(static_fd, (off_t) 0, SEEK_END);
230@@ -211,13 +178,7 @@
231 return (struct utmp *)utmp_entry;
232 }
233 strong_alias(__pututline,pututline)
234-
235-#ifdef __UCLIBC_HAS_UTMPX__
236-struct utmpx *pututxline (const struct utmpx *utmp_entry)
237-{
238- return (struct utmpx *) __pututline ((const struct utmp *) utmp_entry);
239-}
240-#endif
241+libc_hidden_def(pututline)
242
243 static int __utmpname(const char *new_ut_name)
244 {
245@@ -241,7 +202,4 @@
246 return 0; /* or maybe return -(static_ut_name != new_ut_name)? */
247 }
248 strong_alias(__utmpname,utmpname)
249-
250-#ifdef __UCLIBC_HAS_UTMPX__
251-strong_alias(__utmpname,utmpxname)
252-#endif
253+libc_hidden_def(utmpname)
254Index: git/libc/misc/utmp/utxent.c
255===================================================================
256--- git.orig/libc/misc/utmp/utxent.c 2013-01-21 16:37:18.000000000 -0800
257+++ git/libc/misc/utmp/utxent.c 2013-01-21 16:38:14.035578638 -0800
258@@ -13,7 +13,6 @@
259 #include <utmpx.h>
260 #include <utmp.h>
261
262-#if 0 /* moved to utent.c */
263 void setutxent(void)
264 {
265 setutent ();
266@@ -49,12 +48,10 @@
267 return utmpname (new_ut_name);
268 }
269
270-/* moved to wtent.c */
271 void updwtmpx (const char *wtmpx_file, const struct utmpx *utmpx)
272 {
273 updwtmp (wtmpx_file, (const struct utmp *) utmpx);
274 }
275-#endif
276
277 /* Copy the information in UTMPX to UTMP. */
278 void getutmp (const struct utmpx *utmpx, struct utmp *utmp)
279@@ -107,3 +104,4 @@
280 utmpx->ut_time = utmp->ut_time;
281 #endif
282 }
283+
284Index: git/libc/misc/utmp/wtent.c
285===================================================================
286--- git.orig/libc/misc/utmp/wtent.c 2013-01-21 16:37:18.000000000 -0800
287+++ git/libc/misc/utmp/wtent.c 2013-01-21 16:38:14.035578638 -0800
288@@ -11,9 +11,6 @@
289 #include <time.h>
290 #include <unistd.h>
291 #include <utmp.h>
292-#ifdef __UCLIBC_HAS_UTMPX__
293-# include <utmpx.h>
294-#endif
295 #include <fcntl.h>
296 #include <sys/file.h>
297 #include <not-cancel.h>
298@@ -36,7 +33,7 @@
299 }
300 #endif
301
302-static void __updwtmp(const char *wtmp_file, const struct utmp *lutmp)
303+void updwtmp(const char *wtmp_file, const struct utmp *lutmp)
304 {
305 int fd;
306
307@@ -49,11 +46,4 @@
308 }
309 }
310 }
311-strong_alias(__updwtmp,updwtmp)
312-
313-#ifdef __UCLIBC_HAS_UTMPX__
314-void updwtmpx (const char *wtmpx_file, const struct utmpx *utmpx)
315-{
316- __updwtmp (wtmpx_file, (const struct utmp *) utmpx);
317-}
318-#endif
319+libc_hidden_def(updwtmp)
diff --git a/meta/recipes-core/uclibc/uclibc-git/0001-atexit_old-Do-not-add-it-to-shared-libc.patch b/meta/recipes-core/uclibc/uclibc-git/0001-atexit_old-Do-not-add-it-to-shared-libc.patch
deleted file mode 100644
index b6dfce483e..0000000000
--- a/meta/recipes-core/uclibc/uclibc-git/0001-atexit_old-Do-not-add-it-to-shared-libc.patch
+++ /dev/null
@@ -1,44 +0,0 @@
1From 74667582526b39a1906228574d73a6528f4587eb Mon Sep 17 00:00:00 2001
2From: Khem Raj <raj.khem@gmail.com>
3Date: Sat, 23 Jun 2012 13:26:30 -0700
4Subject: [PATCH] atexit_old: Do not add it to shared libc
5
6atexit should only be in either uclibc_nonshared.a
7shared libc case or libc.a in static build case
8
9Signed-off-by: Khem Raj <raj.khem@gmail.com>
10
11Upstream-Status: Pending
12---
13 libc/stdlib/Makefile.in | 4 ++--
14 1 file changed, 2 insertions(+), 2 deletions(-)
15
16diff --git a/libc/stdlib/Makefile.in b/libc/stdlib/Makefile.in
17index 3166b8e..3d686d9 100644
18--- a/libc/stdlib/Makefile.in
19+++ b/libc/stdlib/Makefile.in
20@@ -60,7 +60,6 @@ CSRC-$(if $(findstring yyy,$(UCLIBC_HAS_FLOATS)$(UCLIBC_HAS_WCHAR)$(UCLIBC_HAS_X
21
22 # multi source _atexit.c
23 CSRC-y += __cxa_atexit.c __cxa_finalize.c __exit_handler.c exit.c on_exit.c
24-CSRC-$(COMPAT_ATEXIT) += old_atexit.c
25
26 STDLIB_DIR := $(top_srcdir)libc/stdlib
27 STDLIB_OUT := $(top_builddir)libc/stdlib
28@@ -70,11 +69,12 @@ STDLIB_OBJ := $(patsubst %.c,$(STDLIB_OUT)/%.o,$(CSRC-y))
29
30 libc-y += $(STDLIB_OBJ)
31 libc-static-y += $(STDLIB_OUT)/atexit.o $(STDLIB_OUT)/system.o
32+libc-static-$(COMPAT_ATEXIT) += $(STDLIB_OUT)/old_atexit.o
33 libc-shared-y += $(STDLIB_OUT)/system.oS
34
35 # this should always be the PIC version, because it could be used in shared libs
36 libc-nonshared-y += $(STDLIB_OUT)/atexit.os
37-
38+libc-nonshared-$(COMPAT_ATEXIT) += $(STDLIB_OUT)/old_atexit.os
39 libc-nomulti-y += $(STDLIB_OUT)/labs.o $(STDLIB_OUT)/atol.o $(STDLIB_OUT)/_stdlib_strto_l.o $(STDLIB_OUT)/_stdlib_strto_ll.o
40 libc-nomulti-$(UCLIBC_HAS_XLOCALE) += $(STDLIB_OUT)/_stdlib_strto_l_l.o $(STDLIB_OUT)/_stdlib_strto_ll_l.o
41
42--
431.7.9.5
44
diff --git a/meta/recipes-core/uclibc/uclibc-git/0001-librt-Use-nodefaultlibs-instead-of-nostdlib.patch b/meta/recipes-core/uclibc/uclibc-git/0001-librt-Use-nodefaultlibs-instead-of-nostdlib.patch
deleted file mode 100644
index ecb9d31645..0000000000
--- a/meta/recipes-core/uclibc/uclibc-git/0001-librt-Use-nodefaultlibs-instead-of-nostdlib.patch
+++ /dev/null
@@ -1,33 +0,0 @@
1From 95f9b6f37152b8316735d3c86c0db963ff59e22d Mon Sep 17 00:00:00 2001
2From: Khem Raj <raj.khem@gmail.com>
3Date: Sat, 23 Jun 2012 16:51:52 -0700
4Subject: [PATCH] librt: Use -nodefaultlibs instead of -nostdlib
5
6nostdlib disables linking in startup files too which is not
7what we want here since it needs to resolve __dso_handle
8which comes from crtbeginS.o, otherwise librt has this
9undefined reference to a weak undefined __dso_handle that
10shows up as error (with gold linker)
11when shared libraries are being built which are
12linking in librt
13
14Signed-off-by: Khem Raj <raj.khem@gmail.com>
15Upstream-Status: Pending
16---
17 librt/Makefile.in | 1 +
18 1 file changed, 1 insertion(+)
19
20Index: git/librt/Makefile.in
21===================================================================
22--- git.orig/librt/Makefile.in 2012-06-24 10:32:59.512653237 -0700
23+++ git/librt/Makefile.in 2012-06-24 11:31:00.660821666 -0700
24@@ -15,6 +15,9 @@
25 ifeq ($(UCLIBC_HAS_THREADS_NATIVE),y)
26 LIBS-librt.so += $(top_builddir)lib/libdl.so $(top_builddir)lib/libpthread.so
27 endif
28+START_FILE-librt.so := $(SHARED_START_FILES)
29+END_FILE-librt.so := $(SHARED_END_FILES)
30+
31
32 librt_FULL_NAME := librt-$(VERSION).so
33
diff --git a/meta/recipes-core/uclibc/uclibc-git/0001-nptl-arm-Move-aeabi_read_tp-to-uclibc_nonshared.a.patch b/meta/recipes-core/uclibc/uclibc-git/0001-nptl-arm-Move-aeabi_read_tp-to-uclibc_nonshared.a.patch
deleted file mode 100644
index 7e7c5793f1..0000000000
--- a/meta/recipes-core/uclibc/uclibc-git/0001-nptl-arm-Move-aeabi_read_tp-to-uclibc_nonshared.a.patch
+++ /dev/null
@@ -1,28 +0,0 @@
1From 714f543f4fa8fb3911449b6ce1517481359e0cff Mon Sep 17 00:00:00 2001
2From: Khem Raj <raj.khem@gmail.com>
3Date: Sat, 23 Jun 2012 14:21:17 -0700
4Subject: [PATCH] nptl/arm: Move aeabi_read_tp to uclibc_nonshared.a
5
6Otherwise it creates wrong references from shared libs
7
8Signed-off-by: Khem Raj <raj.khem@gmail.com>
9Upstream-Status: Pending
10---
11 libc/sysdeps/linux/arm/Makefile.arch | 4 +++-
12 1 file changed, 3 insertions(+), 1 deletion(-)
13
14Index: git/libc/sysdeps/linux/arm/Makefile.arch
15===================================================================
16--- git.orig/libc/sysdeps/linux/arm/Makefile.arch 2013-05-23 11:13:32.000000000 -0700
17+++ git/libc/sysdeps/linux/arm/Makefile.arch 2013-05-23 11:16:18.304333131 -0700
18@@ -13,7 +13,9 @@
19 vfork.S clone.S
20
21 SSRC-$(UCLIBC_HAS_LFS) += mmap64.S
22-SSRC-$(UCLIBC_HAS_THREADS_NATIVE) += libc-aeabi_read_tp.S libc-thumb_atomics.S
23+SSRC-$(UCLIBC_HAS_THREADS_NATIVE) += libc-thumb_atomics.S
24+libc-nonshared-$(UCLIBC_HAS_THREADS_NATIVE) += $(ARCH_OUT)/libc-aeabi_read_tp.os
25+libc-static-$(UCLIBC_HAS_THREADS_NATIVE) += $(ARCH_OUT)/libc-aeabi_read_tp.o
26 CSRC-$(UCLIBC_HAS_CONTEXT_FUNCS) += makecontext.c
27 SSRC-$(UCLIBC_HAS_CONTEXT_FUNCS) += getcontext.S setcontext.S swapcontext.S
28
diff --git a/meta/recipes-core/uclibc/uclibc-git/0001-nptl-atfork-Hide-pthread_atfork-in-shared-versions.patch b/meta/recipes-core/uclibc/uclibc-git/0001-nptl-atfork-Hide-pthread_atfork-in-shared-versions.patch
deleted file mode 100644
index 297a40bd04..0000000000
--- a/meta/recipes-core/uclibc/uclibc-git/0001-nptl-atfork-Hide-pthread_atfork-in-shared-versions.patch
+++ /dev/null
@@ -1,74 +0,0 @@
1From d021e6252b33e779857846714fb1899a25c9965d Mon Sep 17 00:00:00 2001
2From: Khem Raj <raj.khem@gmail.com>
3Date: Sat, 23 Jun 2012 15:59:01 -0700
4Subject: [PATCH] nptl/atfork: Hide pthread_atfork in shared versions
5
6Signed-off-by: Khem Raj <raj.khem@gmail.com>
7Upstream-Status: Pending
8---
9 libpthread/nptl/Makefile.in | 4 +++-
10 libpthread/nptl/pthread_atfork.c | 12 ++++++++++--
11 2 files changed, 13 insertions(+), 3 deletions(-)
12
13diff --git a/libpthread/nptl/Makefile.in b/libpthread/nptl/Makefile.in
14index 158bcae..3ef7175 100644
15--- a/libpthread/nptl/Makefile.in
16+++ b/libpthread/nptl/Makefile.in
17@@ -16,6 +16,7 @@ libc-shared-routines-y = forward.c libc-cancellation.c
18 libc-static-routines-y = alloca_cutoff.c libc-cancellation.c
19 libpthread-shared-only-routines-y = version.c
20 libpthread-static-only-routines-y = pthread_atfork.c
21+
22 libpthread-routines- += $(notdir $(wildcard $(libpthread_DIR)/gen_*.c)) # dummy generated files
23 libpthread-routines- += allocatestack.c # dummy included by pthread_create.c
24 libpthread-routines- += pthread_mutex_getprioceiling.c pthread_mutex_setprioceiling.c # XXX: delete those or use them!
25@@ -208,7 +209,7 @@ CFLAGS-msgsnd.c = -fexceptions -fasynchronous-unwind-tables
26 CFLAGS-tcdrain.c = -fexceptions -fasynchronous-unwind-tables
27
28 CFLAGS-pt-system.c = -fexceptions -I$(top_srcdir)libc/stdlib
29-
30+CFLAGS-pthread_atfork.c = -DNOT_IN_libc
31 #
32 # The rest of this file is uClibc specific.
33 #
34@@ -224,3 +225,4 @@ CFLAGS-OMIT-alloca_cutoff.c = $(CFLAGS-nptl)
35 CFLAGS-OMIT-forward.c = $(CFLAGS-nptl)
36 CFLAGS-OMIT-libc-lowlevelock.c = $(CFLAGS-nptl)
37 CFLAGS-OMIT-libc-cancellation.c = $(CFLAGS-nptl)
38+
39diff --git a/libpthread/nptl/pthread_atfork.c b/libpthread/nptl/pthread_atfork.c
40index e607d49..6224c17 100644
41--- a/libpthread/nptl/pthread_atfork.c
42+++ b/libpthread/nptl/pthread_atfork.c
43@@ -38,13 +38,17 @@
44 #include <fork.h>
45
46 /* This is defined by newer gcc version unique for each module. */
47-extern void *__dso_handle __attribute__ ((__weak__));
48- //,__visibility__ ("hidden")));
49+extern void *__dso_handle __attribute__ ((__weak__,
50+ __visibility__ ("hidden")));
51
52
53 /* Hide the symbol so that no definition but the one locally in the
54 executable or DSO is used. */
55 int
56+#ifndef __pthread_atfork
57+/* Don't mark the compatibility function as hidden. */
58+attribute_hidden
59+#endif
60 __pthread_atfork (
61 void (*prepare) (void),
62 void (*parent) (void),
63@@ -53,4 +57,8 @@ __pthread_atfork (
64 return __register_atfork (prepare, parent, child,
65 &__dso_handle == NULL ? NULL : __dso_handle);
66 }
67+#ifndef __pthread_atfork
68+extern int pthread_atfork (void (*prepare) (void), void (*parent) (void),
69+ void (*child) (void)) attribute_hidden;
70 strong_alias (__pthread_atfork, pthread_atfork)
71+#endif
72--
731.7.9.5
74
diff --git a/meta/recipes-core/uclibc/uclibc-git/0001-timex-Sync-with-glibc.patch b/meta/recipes-core/uclibc/uclibc-git/0001-timex-Sync-with-glibc.patch
deleted file mode 100644
index 5d6a0a5366..0000000000
--- a/meta/recipes-core/uclibc/uclibc-git/0001-timex-Sync-with-glibc.patch
+++ /dev/null
@@ -1,33 +0,0 @@
1From f489cc44a209f6c4370e94c9c788fc9cc4820be1 Mon Sep 17 00:00:00 2001
2From: Khem Raj <raj.khem@gmail.com>
3Date: Mon, 25 Aug 2014 16:22:57 -0700
4Subject: [PATCH] timex: Sync with glibc
5
6Signed-off-by: Khem Raj <raj.khem@gmail.com>
7Upstream-status: Pending
8---
9 include/sys/timex.h | 8 ++++++--
10 1 file changed, 6 insertions(+), 2 deletions(-)
11
12diff --git a/include/sys/timex.h b/include/sys/timex.h
13index 9082a28..57059bd 100644
14--- a/include/sys/timex.h
15+++ b/include/sys/timex.h
16@@ -67,8 +67,12 @@ struct timex
17 #define ADJ_ESTERROR 0x0008 /* estimated time error */
18 #define ADJ_STATUS 0x0010 /* clock status */
19 #define ADJ_TIMECONST 0x0020 /* pll time constant */
20-#define ADJ_TICK 0x4000 /* tick value */
21-#define ADJ_OFFSET_SINGLESHOT 0x8001 /* old-fashioned adjtime */
22+#define ADJ_TAI 0x0080 /* set TAI offset */
23+#define ADJ_MICRO 0x1000 /* select microsecond resolution */
24+#define ADJ_NANO 0x2000 /* select nanosecond resolution */
25+#define ADJ_TICK 0x4000 /* tick value */
26+#define ADJ_OFFSET_SINGLESHOT 0x8001 /* old-fashioned adjtime */
27+#define ADJ_OFFSET_SS_READ 0xa001 /* read-only adjtime */
28
29 /* xntp 3.4 compatibility names */
30 #define MOD_OFFSET ADJ_OFFSET
31--
322.1.0
33
diff --git a/meta/recipes-core/uclibc/uclibc-git/powerpc_copysignl.patch b/meta/recipes-core/uclibc/uclibc-git/0002-Add-implementation-for-copysignl-for-ppc.patch
index 2f014cd91e..d4275c997e 100644
--- a/meta/recipes-core/uclibc/uclibc-git/powerpc_copysignl.patch
+++ b/meta/recipes-core/uclibc/uclibc-git/0002-Add-implementation-for-copysignl-for-ppc.patch
@@ -1,13 +1,21 @@
1Add ppc copysignl implementation 1From 5d362074e5975b150a35bcfa77eab1bfa4e30de7 Mon Sep 17 00:00:00 2001
2From: Khem Raj <raj.khem@gmail.com>
3Date: Sun, 16 Aug 2015 20:50:56 -0700
4Subject: [PATCH 2/7] Add implementation for copysignl for ppc
2 5
6Signed-off-by: Khem Raj <raj.khem@gmail.com>
7---
3Upstream-Status: Pending 8Upstream-Status: Pending
4 9
5Signed-off-by: Khem Raj <raj.khem@gmail.com> 10 libc/sysdeps/linux/powerpc/Makefile.arch | 2 +-
11 libc/sysdeps/linux/powerpc/copysignl.c | 89 ++++++++++++++++++++++++++++++++
12 2 files changed, 90 insertions(+), 1 deletion(-)
13 create mode 100644 libc/sysdeps/linux/powerpc/copysignl.c
6 14
7Index: git/libc/sysdeps/linux/powerpc/Makefile.arch 15diff --git a/libc/sysdeps/linux/powerpc/Makefile.arch b/libc/sysdeps/linux/powerpc/Makefile.arch
8=================================================================== 16index 4fbcb11..7c09c87 100644
9--- git.orig/libc/sysdeps/linux/powerpc/Makefile.arch 2013-05-23 11:09:50.000000000 -0700 17--- a/libc/sysdeps/linux/powerpc/Makefile.arch
10+++ git/libc/sysdeps/linux/powerpc/Makefile.arch 2013-05-23 11:12:06.072328399 -0700 18+++ b/libc/sysdeps/linux/powerpc/Makefile.arch
11@@ -5,7 +5,7 @@ 19@@ -5,7 +5,7 @@
12 # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. 20 # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
13 # 21 #
@@ -17,10 +25,11 @@ Index: git/libc/sysdeps/linux/powerpc/Makefile.arch
17 25
18 SSRC-y := \ 26 SSRC-y := \
19 __longjmp.S setjmp.S bsd-setjmp.S bsd-_setjmp.S brk.S \ 27 __longjmp.S setjmp.S bsd-setjmp.S bsd-_setjmp.S brk.S \
20Index: git/libc/sysdeps/linux/powerpc/copysignl.c 28diff --git a/libc/sysdeps/linux/powerpc/copysignl.c b/libc/sysdeps/linux/powerpc/copysignl.c
21=================================================================== 29new file mode 100644
22--- /dev/null 1970-01-01 00:00:00.000000000 +0000 30index 0000000..000f653
23+++ git/libc/sysdeps/linux/powerpc/copysignl.c 2013-05-23 11:11:37.600327865 -0700 31--- /dev/null
32+++ b/libc/sysdeps/linux/powerpc/copysignl.c
24@@ -0,0 +1,89 @@ 33@@ -0,0 +1,89 @@
25+/* s_copysignl.c -- long double version of s_copysign.c. 34+/* s_copysignl.c -- long double version of s_copysign.c.
26+ * Conversion to long double by Ulrich Drepper, 35+ * Conversion to long double by Ulrich Drepper,
@@ -111,3 +120,6 @@ Index: git/libc/sysdeps/linux/powerpc/copysignl.c
111+} 120+}
112+ 121+
113+libc_hidden_def(copysignl); 122+libc_hidden_def(copysignl);
123--
1242.1.4
125
diff --git a/meta/recipes-core/uclibc/uclibc-git/0002-wire-setns-syscall.patch b/meta/recipes-core/uclibc/uclibc-git/0002-wire-setns-syscall.patch
deleted file mode 100644
index 94c6f68571..0000000000
--- a/meta/recipes-core/uclibc/uclibc-git/0002-wire-setns-syscall.patch
+++ /dev/null
@@ -1,68 +0,0 @@
1From db575359d4b8164ad6c2ac5f36c7a50c065a2864 Mon Sep 17 00:00:00 2001
2From: Khem Raj <raj.khem@gmail.com>
3Date: Thu, 20 Feb 2014 00:44:34 -0800
4Subject: [PATCH 2/3] wire setns syscall
5
6Signed-off-by: Khem Raj <raj.khem@gmail.com>
7Upstream-Status: Pending
8---
9 libc/sysdeps/linux/common/Makefile.in | 1 +
10 libc/sysdeps/linux/common/bits/sched.h | 4 ++++
11 libc/sysdeps/linux/common/setns.c | 18 ++++++++++++++++++
12 3 files changed, 23 insertions(+)
13 create mode 100644 libc/sysdeps/linux/common/setns.c
14
15diff --git a/libc/sysdeps/linux/common/Makefile.in b/libc/sysdeps/linux/common/Makefile.in
16index 45d2e21..10d9884 100644
17--- a/libc/sysdeps/linux/common/Makefile.in
18+++ b/libc/sysdeps/linux/common/Makefile.in
19@@ -45,6 +45,7 @@ CSRC-$(UCLIBC_LINUX_SPECIFIC) += \
20 sendfile.c \
21 setfsgid.c \
22 setfsuid.c \
23+ setns.c \
24 setresgid.c \
25 setresuid.c \
26 signalfd.c \
27diff --git a/libc/sysdeps/linux/common/bits/sched.h b/libc/sysdeps/linux/common/bits/sched.h
28index a5eb6ee..9436f66 100644
29--- a/libc/sysdeps/linux/common/bits/sched.h
30+++ b/libc/sysdeps/linux/common/bits/sched.h
31@@ -85,6 +85,10 @@ extern int unshare (int __flags) __THROW;
32
33 /* Get index of currently used CPU. */
34 extern int sched_getcpu (void) __THROW;
35+
36+/* Switch process to namespace of type NSTYPE indicated by FD. */
37+extern int setns (int __fd, int __nstype) __THROW;
38+
39 #endif
40
41 __END_DECLS
42diff --git a/libc/sysdeps/linux/common/setns.c b/libc/sysdeps/linux/common/setns.c
43new file mode 100644
44index 0000000..376bf26
45--- /dev/null
46+++ b/libc/sysdeps/linux/common/setns.c
47@@ -0,0 +1,18 @@
48+/* vi: set sw=4 ts=4: */
49+/*
50+ * setns() for uClibc
51+ *
52+ * Copyright (C) 2014 Khem Raj <raj.khem@gmail.com>
53+ *
54+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
55+ */
56+
57+#include <sys/syscall.h>
58+#include <sched.h>
59+
60+/*
61+ * setns()
62+ */
63+#ifdef __NR_setns
64+_syscall2(int, setns, int, fd, int, nstype)
65+#endif
66--
671.9.0
68
diff --git a/meta/recipes-core/uclibc/uclibc-git/argp-support.patch b/meta/recipes-core/uclibc/uclibc-git/0003-Add-argp-implementation.patch
index bcec6a593a..ee9448337c 100644
--- a/meta/recipes-core/uclibc/uclibc-git/argp-support.patch
+++ b/meta/recipes-core/uclibc/uclibc-git/0003-Add-argp-implementation.patch
@@ -1,31 +1,37 @@
1From: Salvatore Cro <salvatore.cro at st.com> 1From eaae816fb22929469aa4cc3402b91b512fc69549 Mon Sep 17 00:00:00 2001
2From: Salvatore Cro <salvatore.cro@st.com>
3Date: Sun, 16 Aug 2015 20:53:37 -0700
4Subject: [PATCH 3/7] Add argp implementation
2 5
3Argp is an advanced support for parsing unix-style argument vectors. 6Argp is an advanced support for parsing unix-style argument vectors.
4In addition to the common getopt interface, it provides automatic response 7In addition to the common getopt interface, it provides automatic
5to `--help' and `--version' options and use of custom parser in conjunction 8response
9to `--help' and `--version' options and use of custom parser in
10conjunction
6with argp native option parser, among others. 11with argp native option parser, among others.
7Argp support is required by elfutils package and prelink. 12Argp support is required by elfutils package and prelink.
8 13
9In uClibc argp functionalities has been moved from C library to libuargp.so 14In uClibc argp functionalities has been moved from C library to
15libuargp.so
10Further the libc.so linker script contains an AS_NEEDED entry so that 16Further the libc.so linker script contains an AS_NEEDED entry so that
11it doesn't need to link libuargp.so explicitely. 17it doesn't need to link libuargp.so explicitely.
12 18
13Signed-off-by: Salvatore Cro <salvatore.cro at st.com> 19Signed-off-by: Salvatore Cro <salvatore.cro@st.com>
14Signed-off-by: Filippo Arcidiacono <filippo.arcidiacono at st.com> 20Signed-off-by: Filippo Arcidiacono <filippo.arcidiacono@st.com>
15Signed-off-by: Carmelo Amoroso <carmelo.amoroso at st.com> 21Signed-off-by: Carmelo Amoroso <carmelo.amoroso@st.com>
16 22Signed-off-by: Khem Raj <raj.khem@gmail.com>
23---
17Upstream-Status: Pending 24Upstream-Status: Pending
18 25
19--- 26 Makefile.in | 9 +
20 Makefile.in | 8 + 27 Makerules | 7 +-
21 Makerules | 8 +- 28 Rules.mak | 13 +
22 Rules.mak | 7 +
23 extra/Configs/Config.in | 17 + 29 extra/Configs/Config.in | 17 +
30 include/argp.h | 566 ++++++++
24 libc/sysdeps/linux/common/bits/getopt_int.h | 136 ++ 31 libc/sysdeps/linux/common/bits/getopt_int.h | 136 ++
25 libc/unistd/getopt.c | 18 +- 32 libc/unistd/getopt.c | 19 +-
26 libc/unistd/getopt_int.h | 134 --
27 libuargp/Makefile | 14 + 33 libuargp/Makefile | 14 +
28 libuargp/Makefile.in | 76 ++ 34 libuargp/Makefile.in | 73 ++
29 libuargp/argp-ba.c | 26 + 35 libuargp/argp-ba.c | 26 +
30 libuargp/argp-eexst.c | 32 + 36 libuargp/argp-eexst.c | 32 +
31 libuargp/argp-fmtstream.c | 439 +++++++ 37 libuargp/argp-fmtstream.c | 439 +++++++
@@ -46,9 +52,9 @@ Upstream-Status: Pending
46 test/argp/bug-argp1.c | 26 + 52 test/argp/bug-argp1.c | 26 +
47 test/argp/tst-argp1.c | 118 ++ 53 test/argp/tst-argp1.c | 118 ++
48 test/argp/tst-argp2.c | 101 ++ 54 test/argp/tst-argp2.c | 101 ++
49 29 files changed, 4911 insertions(+), 138 deletions(-) 55 29 files changed, 5481 insertions(+), 4 deletions(-)
56 create mode 100644 include/argp.h
50 create mode 100644 libc/sysdeps/linux/common/bits/getopt_int.h 57 create mode 100644 libc/sysdeps/linux/common/bits/getopt_int.h
51 delete mode 100644 libc/unistd/getopt_int.h
52 create mode 100644 libuargp/Makefile 58 create mode 100644 libuargp/Makefile
53 create mode 100644 libuargp/Makefile.in 59 create mode 100644 libuargp/Makefile.in
54 create mode 100644 libuargp/argp-ba.c 60 create mode 100644 libuargp/argp-ba.c
@@ -72,19 +78,19 @@ Upstream-Status: Pending
72 create mode 100644 test/argp/tst-argp1.c 78 create mode 100644 test/argp/tst-argp1.c
73 create mode 100644 test/argp/tst-argp2.c 79 create mode 100644 test/argp/tst-argp2.c
74 80
75Index: git/Makefile.in 81diff --git a/Makefile.in b/Makefile.in
76=================================================================== 82index 04671a4..a450af9 100644
77--- git.orig/Makefile.in 2012-06-18 13:10:12.000000000 -0700 83--- a/Makefile.in
78+++ git/Makefile.in 2012-06-18 13:12:06.448829343 -0700 84+++ b/Makefile.in
79@@ -48,6 +48,7 @@ 85@@ -39,6 +39,7 @@ include $(top_srcdir)libresolv/Makefile.in
80 include $(top_srcdir)libutil/Makefile.in 86 include $(top_srcdir)libutil/Makefile.in
81 include $(top_srcdir)libpthread/Makefile.in 87 include $(top_srcdir)libpthread/Makefile.in
82 include $(top_srcdir)librt/Makefile.in 88 include $(top_srcdir)librt/Makefile.in
83+include $(top_srcdir)libuargp/Makefile.in 89+include $(top_srcdir)libuargp/Makefile.in
84 include $(top_srcdir)libubacktrace/Makefile.in 90 include $(top_srcdir)libubacktrace/Makefile.in
85 include $(top_srcdir)extra/locale/Makefile.in
86 91
87@@ -250,6 +251,7 @@ 92 # last included to catch all the objects added by others (locales/threads)
93@@ -262,6 +263,7 @@ HEADERS_RM- += sgtty.h
88 endif 94 endif
89 HEADERS_RM-$(HAVE_SHARED) += dlfcn.h bits/dlfcn.h 95 HEADERS_RM-$(HAVE_SHARED) += dlfcn.h bits/dlfcn.h
90 HEADERS_RM-$(PTHREADS_DEBUG_SUPPORT) += thread_db.h 96 HEADERS_RM-$(PTHREADS_DEBUG_SUPPORT) += thread_db.h
@@ -92,24 +98,33 @@ Index: git/Makefile.in
92 HEADERS_RM-$(UCLIBC_HAS_BSD_ERR) += err.h 98 HEADERS_RM-$(UCLIBC_HAS_BSD_ERR) += err.h
93 HEADERS_RM-$(UCLIBC_HAS_CRYPT) += crypt.h 99 HEADERS_RM-$(UCLIBC_HAS_CRYPT) += crypt.h
94 HEADERS_RM-$(UCLIBC_HAS_EPOLL) += sys/epoll.h 100 HEADERS_RM-$(UCLIBC_HAS_EPOLL) += sys/epoll.h
95@@ -368,6 +370,12 @@ 101@@ -386,6 +388,13 @@ else
96 -$(INSTALL) -m 755 $(top_builddir)lib/libc.so $(PREFIX)$(DEVEL_PREFIX)$(MULTILIB_DIR)/ 102 -$(INSTALL) -m 755 $(top_builddir)lib/libc.so $(PREFIX)$(DEVEL_PREFIX)$(MULTILIB_DIR)/
97 endif 103 endif
98 echo "$(UBACKTRACE_ASNEEDED)" >> $(PREFIX)$(DEVEL_PREFIX)$(MULTILIB_DIR)/libc.so 104 echo "$(UBACKTRACE_ASNEEDED)" >> $(PREFIX)$(DEVEL_PREFIX)$(MULTILIB_DIR)/libc.so
99+ifeq ($(UCLIBC_HAS_ARGP),y) 105+ifeq ($(UCLIBC_HAS_ARGP),y)
100+# Add the AS_NEEDED entry for libuargp.so 106+# Add the AS_NEEDED entry for libuargp.so
101+ if [ -f $(top_builddir)lib/libc.so -a -f $(PREFIX)$(RUNTIME_PREFIX)lib/$(SHARED_MAJORNAME) ] ; then \ 107+ if [ -f $(top_builddir)lib/libc.so -a -f $(PREFIX)$(RUNTIME_PREFIX)$(MULTILIB_DIR)/$(SHARED_MAJORNAME) ] ; then \
102+ echo "GROUP ( $(UARGP_ASNEEDED) )" >> $(PREFIX)$(DEVEL_PREFIX)lib/libc.so; \ 108+ echo "GROUP ( $(UARGP_ASNEEDED) )" >> $(PREFIX)$(DEVEL_PREFIX)$(MULTILIB_DIR)/libc.so; \
103+ fi 109+ fi
104+endif 110+endif
111+
105 ifeq ($(UCLIBC_HAS_THREADS),y) 112 ifeq ($(UCLIBC_HAS_THREADS),y)
106 ifneq ($(LINUXTHREADS_OLD),y) 113 ifneq ($(LINUXTHREADS_OLD),y)
107 ifeq ($(HARDWIRED_ABSPATH),y) 114 ifeq ($(HARDWIRED_ABSPATH),y)
108Index: git/Makerules 115diff --git a/Makerules b/Makerules
109=================================================================== 116index d6f7e24..e70050d 100644
110--- git.orig/Makerules 2012-06-18 13:10:12.000000000 -0700 117--- a/Makerules
111+++ git/Makerules 2012-06-18 13:10:44.052825547 -0700 118+++ b/Makerules
112@@ -32,12 +32,12 @@ 119@@ -48,6 +48,7 @@ $(eval $(call add_IS_IN_lib,libresolv,$(libresolv-a-y) $(libresolv-so-y)))
120 $(eval $(call add_IS_IN_lib,librt,$(librt-a-y) $(librt-so-y)))
121 $(eval $(call add_IS_IN_lib,libutil,$(libutil-a-y) $(libutil-so-y)))
122 $(eval $(call add_IS_IN_lib,libubacktrace,$(libubacktrace-a-y) $(libubacktrace-so-y)))
123+$(eval $(call add_IS_IN_lib,libuargp,$(libuargp-a-y) $(libuargp-so-y)))
124
125 shared_objs = $(libc-y:.o=.os) $(libc-shared-y) $(libc-nonshared-y) \
126 $(libcrypt-so-y) $(libdl-so-y) \
127@@ -55,12 +56,12 @@ shared_objs = $(libc-y:.o=.os) $(libc-shared-y) $(libc-nonshared-y) \
113 $(libpthread-so-y) $(libpthread-nonshared-y) $(libthread_db-so-y) \ 128 $(libpthread-so-y) $(libpthread-nonshared-y) $(libthread_db-so-y) \
114 $(libresolv-so-y) $(librt-so-y) \ 129 $(libresolv-so-y) $(librt-so-y) \
115 $(ldso-y) \ 130 $(ldso-y) \
@@ -124,7 +139,7 @@ Index: git/Makerules
124 ifeq ($(DOPIC),y) 139 ifeq ($(DOPIC),y)
125 ar_objs := $(ar_objs:.o=.os) 140 ar_objs := $(ar_objs:.o=.os)
126 endif 141 endif
127@@ -472,7 +472,7 @@ 142@@ -498,7 +499,7 @@ files.dep := $(libc-a-y) $(libc-so-y) $(libc-nonshared-y) \
128 $(librt-a-y) $(librt-so-y) $(libresolv-a-y) $(libresolv-so-y) \ 143 $(librt-a-y) $(librt-so-y) $(libresolv-a-y) $(libresolv-so-y) \
129 $(libcrypt-a-y) $(libcrypt-so-y) $(libutil-a-y) $(libutil-so-y) \ 144 $(libcrypt-a-y) $(libcrypt-so-y) $(libutil-a-y) $(libutil-so-y) \
130 $(libnsl-a-y) $(libnsl-so-y) $(ldso-y) $(libdl-a-y) $(libdl-so-y) \ 145 $(libnsl-a-y) $(libnsl-so-y) $(ldso-y) $(libdl-a-y) $(libdl-so-y) \
@@ -133,30 +148,36 @@ Index: git/Makerules
133 .depends.dep := \ 148 .depends.dep := \
134 $(patsubst %.s,%.s.dep,$(filter %.s,$(files.dep))) \ 149 $(patsubst %.s,%.s.dep,$(filter %.s,$(files.dep))) \
135 $(patsubst %.o,%.o.dep,$(filter %.o,$(files.dep))) \ 150 $(patsubst %.o,%.o.dep,$(filter %.o,$(files.dep))) \
136Index: git/Rules.mak 151diff --git a/Rules.mak b/Rules.mak
137=================================================================== 152index de9ffb3..a2baf58 100644
138--- git.orig/Rules.mak 2012-06-18 13:10:12.000000000 -0700 153--- a/Rules.mak
139+++ git/Rules.mak 2012-06-18 13:10:44.056825544 -0700 154+++ b/Rules.mak
140@@ -589,6 +589,13 @@ 155@@ -602,6 +602,19 @@ export UBACKTRACE_ASNEEDED:=$(shell $(CC) -Wl,--help 2>/dev/null | grep -q -- --
141 else 156 else
142 export UBACKTRACE_ASNEEDED:="" 157 export UBACKTRACE_ASNEEDED:=""
143 endif 158 endif
144+ifeq ($(UCLIBC_HAS_ARGP),y) 159+ifeq ($(UCLIBC_HAS_ARGP),y)
160+ifeq ($(HARDWIRED_ABSPATH),y)
145+# Only used in installed libc.so linker script 161+# Only used in installed libc.so linker script
146+UARGP_FULL_NAME := $(RUNTIME_PREFIX)lib/libuargp.so.$(MAJOR_VERSION) 162+UARGP_FULL_NAME := $(subst //,/,$(RUNTIME_PREFIX)$(MULTILIB_DIR)/libuargp.so.$(MAJOR_VERSION))
147+export UARGP_ASNEEDED:=$(shell $(LD) --help 2>/dev/null | grep -q -- --as-needed && echo "AS_NEEDED ( $(UARGP_FULL_NAME) )" || echo "$(UARGP_FULL_NAME)") 163+else
164+UARGP_FULL_NAME := libuargp.so.$(MAJOR_VERSION)
165+endif
166+export UARGP_ASNEEDED:=$(shell $(CC) -Wl,--help 2>/dev/null | grep -q -- --as-needed && \
167+ echo "GROUP ( AS_NEEDED ( $(UARGP_FULL_NAME) ) )" || \
168+ echo "GROUP ( $(UARGP_FULL_NAME) )")
148+else 169+else
149+export UARGP_ASNEEDED:="" 170+export UARGP_ASNEEDED:=""
150+endif 171+endif
151 endif 172 endif
152 173
153 # Add a bunch of extra pedantic annoyingly strict checks 174 # Add a bunch of extra pedantic annoyingly strict checks
154Index: git/extra/Configs/Config.in 175diff --git a/extra/Configs/Config.in b/extra/Configs/Config.in
155=================================================================== 176index 242e45a..b36d4c9 100644
156--- git.orig/extra/Configs/Config.in 2012-06-18 13:10:12.000000000 -0700 177--- a/extra/Configs/Config.in
157+++ git/extra/Configs/Config.in 2012-06-18 13:10:44.056825544 -0700 178+++ b/extra/Configs/Config.in
158@@ -1853,6 +1853,23 @@ 179@@ -1943,6 +1943,23 @@ config UCLIBC_HAS_GNU_GETSUBOPT
159 smaller SUSv3 compatible getsubopt(). 180 Answer Y if you want to include getsubopt().
160 181
161 Most people will answer Y. 182 Most people will answer Y.
162+ 183+
@@ -179,10 +200,583 @@ Index: git/extra/Configs/Config.in
179 endmenu 200 endmenu
180 201
181 202
182Index: git/libc/sysdeps/linux/common/bits/getopt_int.h 203diff --git a/include/argp.h b/include/argp.h
183=================================================================== 204new file mode 100644
184--- /dev/null 1970-01-01 00:00:00.000000000 +0000 205index 0000000..9d53728
185+++ git/libc/sysdeps/linux/common/bits/getopt_int.h 2012-06-18 13:10:44.056825544 -0700 206--- /dev/null
207+++ b/include/argp.h
208@@ -0,0 +1,566 @@
209+/* Hierarchial argument parsing, layered over getopt.
210+ Copyright (C) 1995-1999, 2003, 2004, 2005, 2006, 2007, 2009
211+ Free Software Foundation, Inc.
212+ This file is part of the GNU C Library.
213+ Written by Miles Bader <miles at gnu.ai.mit.edu>.
214+
215+ The GNU C Library is free software; you can redistribute it and/or
216+ modify it under the terms of the GNU Lesser General Public
217+ License as published by the Free Software Foundation; either
218+ version 2.1 of the License, or (at your option) any later version.
219+
220+ The GNU C Library is distributed in the hope that it will be useful,
221+ but WITHOUT ANY WARRANTY; without even the implied warranty of
222+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
223+ Lesser General Public License for more details.
224+
225+ You should have received a copy of the GNU Lesser General Public
226+ License along with the GNU C Library; if not, write to the Free
227+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
228+ 02111-1307 USA.
229+
230+ Modified for uClibc by: Salvatore Cro <salvatore.cro at st.com>
231+*/
232+
233+#ifndef _ARGP_H
234+#define _ARGP_H
235+
236+#include <stdio.h>
237+#include <ctype.h>
238+#include <limits.h>
239+
240+#define __need_error_t
241+#include <errno.h>
242+
243+#ifndef __const
244+# define __const const
245+#endif
246+
247+#ifndef __THROW
248+# define __THROW
249+#endif
250+#ifndef __NTH
251+# define __NTH(fct) fct __THROW
252+#endif
253+
254+#ifndef __attribute__
255+/* This feature is available in gcc versions 2.5 and later. */
256+# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || defined(__STRICT_ANSI__)
257+# define __attribute__(Spec) /* empty */
258+# endif
259+/* The __-protected variants of `format' and `printf' attributes
260+ are accepted by gcc versions 2.6.4 (effectively 2.7) and later. */
261+# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7) || defined(__STRICT_ANSI__)
262+# define __format__ format
263+# define __printf__ printf
264+# endif
265+#endif
266+
267+/* GCC 2.95 and later have "__restrict"; C99 compilers have
268+ "restrict", and "configure" may have defined "restrict". */
269+#ifndef __restrict
270+# if ! (2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__))
271+# if defined restrict || 199901L <= __STDC_VERSION__
272+# define __restrict restrict
273+# else
274+# define __restrict
275+# endif
276+# endif
277+#endif
278+
279+#ifndef __error_t_defined
280+typedef int error_t;
281+# define __error_t_defined
282+#endif
283+
284+#ifdef __cplusplus
285+extern "C" {
286+#endif
287+
288+/* A description of a particular option. A pointer to an array of
289+ these is passed in the OPTIONS field of an argp structure. Each option
290+ entry can correspond to one long option and/or one short option; more
291+ names for the same option can be added by following an entry in an option
292+ array with options having the OPTION_ALIAS flag set. */
293+struct argp_option
294+{
295+ /* The long option name. For more than one name for the same option, you
296+ can use following options with the OPTION_ALIAS flag set. */
297+ __const char *name;
298+
299+ /* What key is returned for this option. If > 0 and printable, then it's
300+ also accepted as a short option. */
301+ int key;
302+
303+ /* If non-NULL, this is the name of the argument associated with this
304+ option, which is required unless the OPTION_ARG_OPTIONAL flag is set. */
305+ __const char *arg;
306+
307+ /* OPTION_ flags. */
308+ int flags;
309+
310+ /* The doc string for this option. If both NAME and KEY are 0, This string
311+ will be printed outdented from the normal option column, making it
312+ useful as a group header (it will be the first thing printed in its
313+ group); in this usage, it's conventional to end the string with a `:'. */
314+ __const char *doc;
315+
316+ /* The group this option is in. In a long help message, options are sorted
317+ alphabetically within each group, and the groups presented in the order
318+ 0, 1, 2, ..., n, -m, ..., -2, -1. Every entry in an options array with
319+ if this field 0 will inherit the group number of the previous entry, or
320+ zero if it's the first one, unless its a group header (NAME and KEY both
321+ 0), in which case, the previous entry + 1 is the default. Automagic
322+ options such as --help are put into group -1. */
323+ int group;
324+};
325+
326+/* The argument associated with this option is optional. */
327+#define OPTION_ARG_OPTIONAL 0x1
328+
329+/* This option isn't displayed in any help messages. */
330+#define OPTION_HIDDEN 0x2
331+
332+/* This option is an alias for the closest previous non-alias option. This
333+ means that it will be displayed in the same help entry, and will inherit
334+ fields other than NAME and KEY from the aliased option. */
335+#define OPTION_ALIAS 0x4
336+
337+/* This option isn't actually an option (and so should be ignored by the
338+ actual option parser), but rather an arbitrary piece of documentation that
339+ should be displayed in much the same manner as the options. If this flag
340+ is set, then the option NAME field is displayed unmodified (e.g., no `--'
341+ prefix is added) at the left-margin (where a *short* option would normally
342+ be displayed), and the documentation string in the normal place. For
343+ purposes of sorting, any leading whitespace and punctuation is ignored,
344+ except that if the first non-whitespace character is not `-', this entry
345+ is displayed after all options (and OPTION_DOC entries with a leading `-')
346+ in the same group. */
347+#define OPTION_DOC 0x8
348+
349+/* This option shouldn't be included in `long' usage messages (but is still
350+ included in help messages). This is mainly intended for options that are
351+ completely documented in an argp's ARGS_DOC field, in which case including
352+ the option in the generic usage list would be redundant. For instance,
353+ if ARGS_DOC is "FOO BAR\n-x BLAH", and the `-x' option's purpose is to
354+ distinguish these two cases, -x should probably be marked
355+ OPTION_NO_USAGE. */
356+#define OPTION_NO_USAGE 0x10
357+
358+struct argp; /* fwd declare this type */
359+struct argp_state; /* " */
360+struct argp_child; /* " */
361+
362+/* The type of a pointer to an argp parsing function. */
363+typedef error_t (*argp_parser_t) (int __key, char *__arg,
364+ struct argp_state *__state);
365+
366+/* What to return for unrecognized keys. For special ARGP_KEY_ keys, such
367+ returns will simply be ignored. For user keys, this error will be turned
368+ into EINVAL (if the call to argp_parse is such that errors are propagated
369+ back to the user instead of exiting); returning EINVAL itself would result
370+ in an immediate stop to parsing in *all* cases. */
371+#define ARGP_ERR_UNKNOWN E2BIG /* Hurd should never need E2BIG. XXX */
372+
373+/* Special values for the KEY argument to an argument parsing function.
374+ ARGP_ERR_UNKNOWN should be returned if they aren't understood.
375+
376+ The sequence of keys to a parsing function is either (where each
377+ uppercased word should be prefixed by `ARGP_KEY_' and opt is a user key):
378+
379+ INIT opt... NO_ARGS END SUCCESS -- No non-option arguments at all
380+ or INIT (opt | ARG)... END SUCCESS -- All non-option args parsed
381+ or INIT (opt | ARG)... SUCCESS -- Some non-option arg unrecognized
382+
383+ The third case is where every parser returned ARGP_KEY_UNKNOWN for an
384+ argument, in which case parsing stops at that argument (returning the
385+ unparsed arguments to the caller of argp_parse if requested, or stopping
386+ with an error message if not).
387+
388+ If an error occurs (either detected by argp, or because the parsing
389+ function returned an error value), then the parser is called with
390+ ARGP_KEY_ERROR, and no further calls are made. */
391+
392+/* This is not an option at all, but rather a command line argument. If a
393+ parser receiving this key returns success, the fact is recorded, and the
394+ ARGP_KEY_NO_ARGS case won't be used. HOWEVER, if while processing the
395+ argument, a parser function decrements the NEXT field of the state it's
396+ passed, the option won't be considered processed; this is to allow you to
397+ actually modify the argument (perhaps into an option), and have it
398+ processed again. */
399+#define ARGP_KEY_ARG 0
400+/* There are remaining arguments not parsed by any parser, which may be found
401+ starting at (STATE->argv + STATE->next). If success is returned, but
402+ STATE->next left untouched, it's assumed that all arguments were consume,
403+ otherwise, the parser should adjust STATE->next to reflect any arguments
404+ consumed. */
405+#define ARGP_KEY_ARGS 0x1000006
406+/* There are no more command line arguments at all. */
407+#define ARGP_KEY_END 0x1000001
408+/* Because it's common to want to do some special processing if there aren't
409+ any non-option args, user parsers are called with this key if they didn't
410+ successfully process any non-option arguments. Called just before
411+ ARGP_KEY_END (where more general validity checks on previously parsed
412+ arguments can take place). */
413+#define ARGP_KEY_NO_ARGS 0x1000002
414+/* Passed in before any parsing is done. Afterwards, the values of each
415+ element of the CHILD_INPUT field, if any, in the state structure is
416+ copied to each child's state to be the initial value of the INPUT field. */
417+#define ARGP_KEY_INIT 0x1000003
418+/* Use after all other keys, including SUCCESS & END. */
419+#define ARGP_KEY_FINI 0x1000007
420+/* Passed in when parsing has successfully been completed (even if there are
421+ still arguments remaining). */
422+#define ARGP_KEY_SUCCESS 0x1000004
423+/* Passed in if an error occurs. */
424+#define ARGP_KEY_ERROR 0x1000005
425+
426+/* An argp structure contains a set of options declarations, a function to
427+ deal with parsing one, documentation string, a possible vector of child
428+ argp's, and perhaps a function to filter help output. When actually
429+ parsing options, getopt is called with the union of all the argp
430+ structures chained together through their CHILD pointers, with conflicts
431+ being resolved in favor of the first occurrence in the chain. */
432+struct argp
433+{
434+ /* An array of argp_option structures, terminated by an entry with both
435+ NAME and KEY having a value of 0. */
436+ __const struct argp_option *options;
437+
438+ /* What to do with an option from this structure. KEY is the key
439+ associated with the option, and ARG is any associated argument (NULL if
440+ none was supplied). If KEY isn't understood, ARGP_ERR_UNKNOWN should be
441+ returned. If a non-zero, non-ARGP_ERR_UNKNOWN value is returned, then
442+ parsing is stopped immediately, and that value is returned from
443+ argp_parse(). For special (non-user-supplied) values of KEY, see the
444+ ARGP_KEY_ definitions below. */
445+ argp_parser_t parser;
446+
447+ /* A string describing what other arguments are wanted by this program. It
448+ is only used by argp_usage to print the `Usage:' message. If it
449+ contains newlines, the strings separated by them are considered
450+ alternative usage patterns, and printed on separate lines (lines after
451+ the first are prefix by ` or: ' instead of `Usage:'). */
452+ __const char *args_doc;
453+
454+ /* If non-NULL, a string containing extra text to be printed before and
455+ after the options in a long help message (separated by a vertical tab
456+ `\v' character). */
457+ __const char *doc;
458+
459+ /* A vector of argp_children structures, terminated by a member with a 0
460+ argp field, pointing to child argps should be parsed with this one. Any
461+ conflicts are resolved in favor of this argp, or early argps in the
462+ CHILDREN list. This field is useful if you use libraries that supply
463+ their own argp structure, which you want to use in conjunction with your
464+ own. */
465+ __const struct argp_child *children;
466+
467+ /* If non-zero, this should be a function to filter the output of help
468+ messages. KEY is either a key from an option, in which case TEXT is
469+ that option's help text, or a special key from the ARGP_KEY_HELP_
470+ defines, below, describing which other help text TEXT is. The function
471+ should return either TEXT, if it should be used as-is, a replacement
472+ string, which should be malloced, and will be freed by argp, or NULL,
473+ meaning `print nothing'. The value for TEXT is *after* any translation
474+ has been done, so if any of the replacement text also needs translation,
475+ that should be done by the filter function. INPUT is either the input
476+ supplied to argp_parse, or NULL, if argp_help was called directly. */
477+ char *(*help_filter) (int __key, __const char *__text, void *__input);
478+
479+ /* If non-zero the strings used in the argp library are translated using
480+ the domain described by this string. Otherwise the currently installed
481+ default domain is used. */
482+ const char *argp_domain;
483+};
484+
485+/* Possible KEY arguments to a help filter function. */
486+#define ARGP_KEY_HELP_PRE_DOC 0x2000001 /* Help text preceeding options. */
487+#define ARGP_KEY_HELP_POST_DOC 0x2000002 /* Help text following options. */
488+#define ARGP_KEY_HELP_HEADER 0x2000003 /* Option header string. */
489+#define ARGP_KEY_HELP_EXTRA 0x2000004 /* After all other documentation;
490+ TEXT is NULL for this key. */
491+/* Explanatory note emitted when duplicate option arguments have been
492+ suppressed. */
493+#define ARGP_KEY_HELP_DUP_ARGS_NOTE 0x2000005
494+#define ARGP_KEY_HELP_ARGS_DOC 0x2000006 /* Argument doc string. */
495+
496+/* When an argp has a non-zero CHILDREN field, it should point to a vector of
497+ argp_child structures, each of which describes a subsidiary argp. */
498+struct argp_child
499+{
500+ /* The child parser. */
501+ __const struct argp *argp;
502+
503+ /* Flags for this child. */
504+ int flags;
505+
506+ /* If non-zero, an optional header to be printed in help output before the
507+ child options. As a side-effect, a non-zero value forces the child
508+ options to be grouped together; to achieve this effect without actually
509+ printing a header string, use a value of "". */
510+ __const char *header;
511+
512+ /* Where to group the child options relative to the other (`consolidated')
513+ options in the parent argp; the values are the same as the GROUP field
514+ in argp_option structs, but all child-groupings follow parent options at
515+ a particular group level. If both this field and HEADER are zero, then
516+ they aren't grouped at all, but rather merged with the parent options
517+ (merging the child's grouping levels with the parents). */
518+ int group;
519+};
520+
521+/* Parsing state. This is provided to parsing functions called by argp,
522+ which may examine and, as noted, modify fields. */
523+struct argp_state
524+{
525+ /* The top level ARGP being parsed. */
526+ __const struct argp *root_argp;
527+
528+ /* The argument vector being parsed. May be modified. */
529+ int argc;
530+ char **argv;
531+
532+ /* The index in ARGV of the next arg that to be parsed. May be modified. */
533+ int next;
534+
535+ /* The flags supplied to argp_parse. May be modified. */
536+ unsigned flags;
537+
538+ /* While calling a parsing function with a key of ARGP_KEY_ARG, this is the
539+ number of the current arg, starting at zero, and incremented after each
540+ such call returns. At all other times, this is the number of such
541+ arguments that have been processed. */
542+ unsigned arg_num;
543+
544+ /* If non-zero, the index in ARGV of the first argument following a special
545+ `--' argument (which prevents anything following being interpreted as an
546+ option). Only set once argument parsing has proceeded past this point. */
547+ int quoted;
548+
549+ /* An arbitrary pointer passed in from the user. */
550+ void *input;
551+ /* Values to pass to child parsers. This vector will be the same length as
552+ the number of children for the current parser. */
553+ void **child_inputs;
554+
555+ /* For the parser's use. Initialized to 0. */
556+ void *hook;
557+
558+ /* The name used when printing messages. This is initialized to ARGV[0],
559+ or PROGRAM_INVOCATION_NAME if that is unavailable. */
560+ char *name;
561+
562+ /* Streams used when argp prints something. */
563+ FILE *err_stream; /* For errors; initialized to stderr. */
564+ FILE *out_stream; /* For information; initialized to stdout. */
565+
566+ void *pstate; /* Private, for use by argp. */
567+};
568+
569+/* Flags for argp_parse (note that the defaults are those that are
570+ convenient for program command line parsing): */
571+
572+/* Don't ignore the first element of ARGV. Normally (and always unless
573+ ARGP_NO_ERRS is set) the first element of the argument vector is
574+ skipped for option parsing purposes, as it corresponds to the program name
575+ in a command line. */
576+#define ARGP_PARSE_ARGV0 0x01
577+
578+/* Don't print error messages for unknown options to stderr; unless this flag
579+ is set, ARGP_PARSE_ARGV0 is ignored, as ARGV[0] is used as the program
580+ name in the error messages. This flag implies ARGP_NO_EXIT (on the
581+ assumption that silent exiting upon errors is bad behaviour). */
582+#define ARGP_NO_ERRS 0x02
583+
584+/* Don't parse any non-option args. Normally non-option args are parsed by
585+ calling the parse functions with a key of ARGP_KEY_ARG, and the actual arg
586+ as the value. Since it's impossible to know which parse function wants to
587+ handle it, each one is called in turn, until one returns 0 or an error
588+ other than ARGP_ERR_UNKNOWN; if an argument is handled by no one, the
589+ argp_parse returns prematurely (but with a return value of 0). If all
590+ args have been parsed without error, all parsing functions are called one
591+ last time with a key of ARGP_KEY_END. This flag needn't normally be set,
592+ as the normal behavior is to stop parsing as soon as some argument can't
593+ be handled. */
594+#define ARGP_NO_ARGS 0x04
595+
596+/* Parse options and arguments in the same order they occur on the command
597+ line -- normally they're rearranged so that all options come first. */
598+#define ARGP_IN_ORDER 0x08
599+
600+/* Don't provide the standard long option --help, which causes usage and
601+ option help information to be output to stdout, and exit (0) called. */
602+#define ARGP_NO_HELP 0x10
603+
604+/* Don't exit on errors (they may still result in error messages). */
605+#define ARGP_NO_EXIT 0x20
606+
607+/* Use the gnu getopt `long-only' rules for parsing arguments. */
608+#define ARGP_LONG_ONLY 0x40
609+
610+/* Turns off any message-printing/exiting options. */
611+#define ARGP_SILENT (ARGP_NO_EXIT | ARGP_NO_ERRS | ARGP_NO_HELP)
612+
613+/* Parse the options strings in ARGC & ARGV according to the options in ARGP.
614+ FLAGS is one of the ARGP_ flags above. If ARG_INDEX is non-NULL, the
615+ index in ARGV of the first unparsed option is returned in it. If an
616+ unknown option is present, ARGP_ERR_UNKNOWN is returned; if some parser
617+ routine returned a non-zero value, it is returned; otherwise 0 is
618+ returned. This function may also call exit unless the ARGP_NO_HELP flag
619+ is set. INPUT is a pointer to a value to be passed in to the parser. */
620+extern error_t argp_parse (__const struct argp *__restrict __argp,
621+ int __argc, char **__restrict __argv,
622+ unsigned __flags, int *__restrict __arg_index,
623+ void *__restrict __input);
624+
625+/* Global variables. */
626+
627+/* If defined or set by the user program to a non-zero value, then a default
628+ option --version is added (unless the ARGP_NO_HELP flag is used), which
629+ will print this string followed by a newline and exit (unless the
630+ ARGP_NO_EXIT flag is used). Overridden by ARGP_PROGRAM_VERSION_HOOK. */
631+extern __const char *argp_program_version;
632+
633+/* If defined or set by the user program to a non-zero value, then a default
634+ option --version is added (unless the ARGP_NO_HELP flag is used), which
635+ calls this function with a stream to print the version to and a pointer to
636+ the current parsing state, and then exits (unless the ARGP_NO_EXIT flag is
637+ used). This variable takes precedent over ARGP_PROGRAM_VERSION. */
638+extern void (*argp_program_version_hook) (FILE *__restrict __stream,
639+ struct argp_state *__restrict
640+ __state);
641+
642+/* If defined or set by the user program, it should point to string that is
643+ the bug-reporting address for the program. It will be printed by
644+ argp_help if the ARGP_HELP_BUG_ADDR flag is set (as it is by various
645+ standard help messages), embedded in a sentence that says something like
646+ `Report bugs to ADDR.'. */
647+extern __const char *argp_program_bug_address;
648+
649+/* The exit status that argp will use when exiting due to a parsing error.
650+ If not defined or set by the user program, this defaults to EX_USAGE from
651+ <sysexits.h>. */
652+extern error_t argp_err_exit_status;
653+
654+/* Flags for argp_help. */
655+#define ARGP_HELP_USAGE 0x01 /* a Usage: message. */
656+#define ARGP_HELP_SHORT_USAGE 0x02 /* " but don't actually print options. */
657+#define ARGP_HELP_SEE 0x04 /* a `Try ... for more help' message. */
658+#define ARGP_HELP_LONG 0x08 /* a long help message. */
659+#define ARGP_HELP_PRE_DOC 0x10 /* doc string preceding long help. */
660+#define ARGP_HELP_POST_DOC 0x20 /* doc string following long help. */
661+#define ARGP_HELP_DOC (ARGP_HELP_PRE_DOC | ARGP_HELP_POST_DOC)
662+#define ARGP_HELP_BUG_ADDR 0x40 /* bug report address */
663+#define ARGP_HELP_LONG_ONLY 0x80 /* modify output appropriately to
664+ reflect ARGP_LONG_ONLY mode. */
665+
666+/* These ARGP_HELP flags are only understood by argp_state_help. */
667+#define ARGP_HELP_EXIT_ERR 0x100 /* Call exit(1) instead of returning. */
668+#define ARGP_HELP_EXIT_OK 0x200 /* Call exit(0) instead of returning. */
669+
670+/* The standard thing to do after a program command line parsing error, if an
671+ error message has already been printed. */
672+#define ARGP_HELP_STD_ERR \
673+ (ARGP_HELP_SEE | ARGP_HELP_EXIT_ERR)
674+/* The standard thing to do after a program command line parsing error, if no
675+ more specific error message has been printed. */
676+#define ARGP_HELP_STD_USAGE \
677+ (ARGP_HELP_SHORT_USAGE | ARGP_HELP_SEE | ARGP_HELP_EXIT_ERR)
678+/* The standard thing to do in response to a --help option. */
679+#define ARGP_HELP_STD_HELP \
680+ (ARGP_HELP_SHORT_USAGE | ARGP_HELP_LONG | ARGP_HELP_EXIT_OK \
681+ | ARGP_HELP_DOC | ARGP_HELP_BUG_ADDR)
682+
683+/* Output a usage message for ARGP to STREAM. FLAGS are from the set
684+ ARGP_HELP_*. */
685+extern void argp_help (__const struct argp *__restrict __argp,
686+ FILE *__restrict __stream,
687+ unsigned __flags, char *__restrict __name);
688+
689+/* The following routines are intended to be called from within an argp
690+ parsing routine (thus taking an argp_state structure as the first
691+ argument). They may or may not print an error message and exit, depending
692+ on the flags in STATE -- in any case, the caller should be prepared for
693+ them *not* to exit, and should return an appropiate error after calling
694+ them. [argp_usage & argp_error should probably be called argp_state_...,
695+ but they're used often enough that they should be short] */
696+
697+/* Output, if appropriate, a usage message for STATE to STREAM. FLAGS are
698+ from the set ARGP_HELP_*. */
699+extern void argp_state_help (__const struct argp_state *__restrict __state,
700+ FILE *__restrict __stream,
701+ unsigned int __flags);
702+/* Possibly output the standard usage message for ARGP to stderr and exit. */
703+extern void argp_usage (__const struct argp_state *__state);
704+
705+/* If appropriate, print the printf string FMT and following args, preceded
706+ by the program name and `:', to stderr, and followed by a `Try ... --help'
707+ message, then exit (1). */
708+extern void argp_error (__const struct argp_state *__restrict __state,
709+ __const char *__restrict __fmt, ...)
710+ __attribute__ ((__format__ (__printf__, 2, 3)));
711+/* Similar to the standard gnu error-reporting function error(), but will
712+ respect the ARGP_NO_EXIT and ARGP_NO_ERRS flags in STATE, and will print
713+ to STATE->err_stream. This is useful for argument parsing code that is
714+ shared between program startup (when exiting is desired) and runtime
715+ option parsing (when typically an error code is returned instead). The
716+ difference between this function and argp_error is that the latter is for
717+ *parsing errors*, and the former is for other problems that occur during
718+ parsing but don't reflect a (syntactic) problem with the input. */
719+extern void argp_failure (__const struct argp_state *__restrict __state,
720+ int __status, int __errnum,
721+ __const char *__restrict __fmt, ...)
722+ __attribute__ ((__format__ (__printf__, 4, 5)));
723+/* Returns true if the option OPT is a valid short option. */
724+extern int _option_is_short (__const struct argp_option *__opt) __THROW;
725+extern int __option_is_short (__const struct argp_option *__opt) __THROW;
726+
727+/* Returns true if the option OPT is in fact the last (unused) entry in an
728+ options array. */
729+extern int _option_is_end (__const struct argp_option *__opt) __THROW;
730+extern int __option_is_end (__const struct argp_option *__opt) __THROW;
731+
732+/* Return the input field for ARGP in the parser corresponding to STATE; used
733+ by the help routines. */
734+/* We think this should not be exported */
735+extern void *__argp_input (__const struct argp *__restrict __argp,
736+ __const struct argp_state *__restrict __state)
737+ __THROW;
738+
739+#ifdef __USE_EXTERN_INLINES
740+
741+# ifndef ARGP_EI
742+# define ARGP_EI __extern_inline
743+# endif
744+
745+ARGP_EI void
746+argp_usage (__const struct argp_state *__state)
747+{
748+ argp_state_help (__state, stderr, ARGP_HELP_STD_USAGE);
749+}
750+
751+ARGP_EI int
752+__NTH (__option_is_short (__const struct argp_option *__opt))
753+{
754+ if (__opt->flags & OPTION_DOC)
755+ return 0;
756+ else
757+ {
758+ int __key = __opt->key;
759+ return __key > 0 && __key <= UCHAR_MAX && isprint (__key);
760+ }
761+}
762+
763+ARGP_EI int
764+__NTH (__option_is_end (__const struct argp_option *__opt))
765+{
766+ return !__opt->key && !__opt->name && !__opt->doc && !__opt->group;
767+}
768+#endif /* Use extern inlines. */
769+
770+#ifdef __cplusplus
771+}
772+#endif
773+
774+#endif /* argp.h */
775diff --git a/libc/sysdeps/linux/common/bits/getopt_int.h b/libc/sysdeps/linux/common/bits/getopt_int.h
776new file mode 100644
777index 0000000..291edfe
778--- /dev/null
779+++ b/libc/sysdeps/linux/common/bits/getopt_int.h
186@@ -0,0 +1,136 @@ 780@@ -0,0 +1,136 @@
187+/* Internal declarations for getopt. 781+/* Internal declarations for getopt.
188+ Copyright (C) 1989-1994,1996-1999,2001,2003,2004 782+ Copyright (C) 1989-1994,1996-1999,2001,2003,2004
@@ -320,11 +914,11 @@ Index: git/libc/sysdeps/linux/common/bits/getopt_int.h
320+#endif 914+#endif
321+#endif 915+#endif
322+#endif /* getopt_int.h */ 916+#endif /* getopt_int.h */
323Index: git/libc/unistd/getopt.c 917diff --git a/libc/unistd/getopt.c b/libc/unistd/getopt.c
324=================================================================== 918index f63482b..db5e12c 100644
325--- git.orig/libc/unistd/getopt.c 2012-06-18 13:10:12.000000000 -0700 919--- a/libc/unistd/getopt.c
326+++ git/libc/unistd/getopt.c 2012-06-18 13:10:44.056825544 -0700 920+++ b/libc/unistd/getopt.c
327@@ -106,7 +106,7 @@ 921@@ -105,7 +105,7 @@
328 they can distinguish the relative order of options and other arguments. */ 922 they can distinguish the relative order of options and other arguments. */
329 923
330 #include <getopt.h> 924 #include <getopt.h>
@@ -333,7 +927,7 @@ Index: git/libc/unistd/getopt.c
333 927
334 928
335 /* For communication from `getopt' to the caller. 929 /* For communication from `getopt' to the caller.
336@@ -1170,6 +1170,15 @@ 930@@ -1170,6 +1170,15 @@ getopt_long (int argc, char *const *argv, const char *options,
337 return _getopt_internal (argc, argv, options, long_options, opt_index, 0); 931 return _getopt_internal (argc, argv, options, long_options, opt_index, 0);
338 } 932 }
339 933
@@ -349,9 +943,9 @@ Index: git/libc/unistd/getopt.c
349 /* Like getopt_long, but '-' as well as '--' can indicate a long option. 943 /* Like getopt_long, but '-' as well as '--' can indicate a long option.
350 If an option that starts with '-' (not '--') doesn't match a long option, 944 If an option that starts with '-' (not '--') doesn't match a long option,
351 but does match a short option, it is parsed as a short option 945 but does match a short option, it is parsed as a short option
352@@ -1182,4 +1191,12 @@ 946@@ -1183,4 +1192,12 @@ getopt_long_only (int argc, char *const *argv, const char *options,
353 return _getopt_internal (argc, argv, options, long_options, opt_index, 1);
354 } 947 }
948 #endif /* __UCLIBC_HAS_GETOPT_LONG__ */
355 949
356+int 950+int
357+_getopt_long_only_r (int argc, char *const *argv, const char *options, 951+_getopt_long_only_r (int argc, char *const *argv, const char *options,
@@ -362,10 +956,11 @@ Index: git/libc/unistd/getopt.c
362+} 956+}
363+ 957+
364 #endif /* Not ELIDE_CODE. */ 958 #endif /* Not ELIDE_CODE. */
365Index: git/libuargp/Makefile 959diff --git a/libuargp/Makefile b/libuargp/Makefile
366=================================================================== 960new file mode 100644
367--- /dev/null 1970-01-01 00:00:00.000000000 +0000 961index 0000000..45acdd9
368+++ git/libuargp/Makefile 2012-06-18 13:10:44.056825544 -0700 962--- /dev/null
963+++ b/libuargp/Makefile
369@@ -0,0 +1,14 @@ 964@@ -0,0 +1,14 @@
370+# Makefile for uClibc (libuargp) 965+# Makefile for uClibc (libuargp)
371+# 966+#
@@ -381,10 +976,11 @@ Index: git/libuargp/Makefile
381+all: libs 976+all: libs
382+include Makefile.in 977+include Makefile.in
383+include $(top_srcdir)Makerules 978+include $(top_srcdir)Makerules
384Index: git/libuargp/Makefile.in 979diff --git a/libuargp/Makefile.in b/libuargp/Makefile.in
385=================================================================== 980new file mode 100644
386--- /dev/null 1970-01-01 00:00:00.000000000 +0000 981index 0000000..1498abb
387+++ git/libuargp/Makefile.in 2012-06-18 13:10:44.056825544 -0700 982--- /dev/null
983+++ b/libuargp/Makefile.in
388@@ -0,0 +1,73 @@ 984@@ -0,0 +1,73 @@
389+# Makefile for uClibc (libuargp) 985+# Makefile for uClibc (libuargp)
390+# 986+#
@@ -459,10 +1055,11 @@ Index: git/libuargp/Makefile.in
459+ 1055+
460+CLEAN_libuargp: 1056+CLEAN_libuargp:
461+ $(do_rm) $(addprefix $(libuargp_OUT)/*., o os oS a) 1057+ $(do_rm) $(addprefix $(libuargp_OUT)/*., o os oS a)
462Index: git/libuargp/argp-ba.c 1058diff --git a/libuargp/argp-ba.c b/libuargp/argp-ba.c
463=================================================================== 1059new file mode 100644
464--- /dev/null 1970-01-01 00:00:00.000000000 +0000 1060index 0000000..3522b02
465+++ git/libuargp/argp-ba.c 2012-06-18 13:10:44.056825544 -0700 1061--- /dev/null
1062+++ b/libuargp/argp-ba.c
466@@ -0,0 +1,26 @@ 1063@@ -0,0 +1,26 @@
467+/* Default definition for ARGP_PROGRAM_BUG_ADDRESS. 1064+/* Default definition for ARGP_PROGRAM_BUG_ADDRESS.
468+ Copyright (C) 1996, 1997, 1999 Free Software Foundation, Inc. 1065+ Copyright (C) 1996, 1997, 1999 Free Software Foundation, Inc.
@@ -490,10 +1087,11 @@ Index: git/libuargp/argp-ba.c
490+ messages), embedded in a sentence that says something like `Report bugs to 1087+ messages), embedded in a sentence that says something like `Report bugs to
491+ ADDR.'. */ 1088+ ADDR.'. */
492+const char *argp_program_bug_address; 1089+const char *argp_program_bug_address;
493Index: git/libuargp/argp-eexst.c 1090diff --git a/libuargp/argp-eexst.c b/libuargp/argp-eexst.c
494=================================================================== 1091new file mode 100644
495--- /dev/null 1970-01-01 00:00:00.000000000 +0000 1092index 0000000..445b68d
496+++ git/libuargp/argp-eexst.c 2012-06-18 13:10:44.056825544 -0700 1093--- /dev/null
1094+++ b/libuargp/argp-eexst.c
497@@ -0,0 +1,32 @@ 1095@@ -0,0 +1,32 @@
498+/* Default definition for ARGP_ERR_EXIT_STATUS 1096+/* Default definition for ARGP_ERR_EXIT_STATUS
499+ Copyright (C) 1997 Free Software Foundation, Inc. 1097+ Copyright (C) 1997 Free Software Foundation, Inc.
@@ -527,10 +1125,11 @@ Index: git/libuargp/argp-eexst.c
527+ If not defined or set by the user program, this defaults to EX_USAGE from 1125+ If not defined or set by the user program, this defaults to EX_USAGE from
528+ <sysexits.h>. */ 1126+ <sysexits.h>. */
529+error_t argp_err_exit_status = EX_USAGE; 1127+error_t argp_err_exit_status = EX_USAGE;
530Index: git/libuargp/argp-fmtstream.c 1128diff --git a/libuargp/argp-fmtstream.c b/libuargp/argp-fmtstream.c
531=================================================================== 1129new file mode 100644
532--- /dev/null 1970-01-01 00:00:00.000000000 +0000 1130index 0000000..75227f9
533+++ git/libuargp/argp-fmtstream.c 2012-06-18 13:10:44.056825544 -0700 1131--- /dev/null
1132+++ b/libuargp/argp-fmtstream.c
534@@ -0,0 +1,439 @@ 1133@@ -0,0 +1,439 @@
535+/* Word-wrapping and line-truncating streams 1134+/* Word-wrapping and line-truncating streams
536+ Copyright (C) 1997-1999,2001,2002,2003,2005 Free Software Foundation, Inc. 1135+ Copyright (C) 1997-1999,2001,2002,2003,2005 Free Software Foundation, Inc.
@@ -971,10 +1570,11 @@ Index: git/libuargp/argp-fmtstream.c
971+#endif 1570+#endif
972+ 1571+
973+#endif /* !ARGP_FMTSTREAM_USE_LINEWRAP */ 1572+#endif /* !ARGP_FMTSTREAM_USE_LINEWRAP */
974Index: git/libuargp/argp-fmtstream.h 1573diff --git a/libuargp/argp-fmtstream.h b/libuargp/argp-fmtstream.h
975=================================================================== 1574new file mode 100644
976--- /dev/null 1970-01-01 00:00:00.000000000 +0000 1575index 0000000..ca7c834
977+++ git/libuargp/argp-fmtstream.h 2012-06-18 13:10:44.056825544 -0700 1576--- /dev/null
1577+++ b/libuargp/argp-fmtstream.h
978@@ -0,0 +1,314 @@ 1578@@ -0,0 +1,314 @@
979+/* Word-wrapping and line-truncating streams. 1579+/* Word-wrapping and line-truncating streams.
980+ Copyright (C) 1997 Free Software Foundation, Inc. 1580+ Copyright (C) 1997 Free Software Foundation, Inc.
@@ -1290,10 +1890,11 @@ Index: git/libuargp/argp-fmtstream.h
1290+#endif /* ARGP_FMTSTREAM_USE_LINEWRAP */ 1890+#endif /* ARGP_FMTSTREAM_USE_LINEWRAP */
1291+ 1891+
1292+#endif /* argp-fmtstream.h */ 1892+#endif /* argp-fmtstream.h */
1293Index: git/libuargp/argp-fs-xinl.c 1893diff --git a/libuargp/argp-fs-xinl.c b/libuargp/argp-fs-xinl.c
1294=================================================================== 1894new file mode 100644
1295--- /dev/null 1970-01-01 00:00:00.000000000 +0000 1895index 0000000..473cbbd
1296+++ git/libuargp/argp-fs-xinl.c 2012-06-18 13:10:44.056825544 -0700 1896--- /dev/null
1897+++ b/libuargp/argp-fs-xinl.c
1297@@ -0,0 +1,44 @@ 1898@@ -0,0 +1,44 @@
1298+/* Real definitions for extern inline functions in argp-fmtstream.h 1899+/* Real definitions for extern inline functions in argp-fmtstream.h
1299+ Copyright (C) 1997, 2003, 2004 Free Software Foundation, Inc. 1900+ Copyright (C) 1997, 2003, 2004 Free Software Foundation, Inc.
@@ -1339,10 +1940,11 @@ Index: git/libuargp/argp-fs-xinl.c
1339+ 1940+
1340+#endif 1941+#endif
1341+#endif 1942+#endif
1342Index: git/libuargp/argp-help.c 1943diff --git a/libuargp/argp-help.c b/libuargp/argp-help.c
1343=================================================================== 1944new file mode 100644
1344--- /dev/null 1970-01-01 00:00:00.000000000 +0000 1945index 0000000..58a5e6e
1345+++ git/libuargp/argp-help.c 2012-06-18 13:10:44.060825542 -0700 1946--- /dev/null
1947+++ b/libuargp/argp-help.c
1346@@ -0,0 +1,1882 @@ 1948@@ -0,0 +1,1882 @@
1347+/* Hierarchial argument parsing help output 1949+/* Hierarchial argument parsing help output
1348+ Copyright (C) 1995-2003, 2004, 2005, 2006, 2007 1950+ Copyright (C) 1995-2003, 2004, 2005, 2006, 2007
@@ -3226,10 +3828,11 @@ Index: git/libuargp/argp-help.c
3226+ } 3828+ }
3227+ } 3829+ }
3228+} 3830+}
3229Index: git/libuargp/argp-parse.c 3831diff --git a/libuargp/argp-parse.c b/libuargp/argp-parse.c
3230=================================================================== 3832new file mode 100644
3231--- /dev/null 1970-01-01 00:00:00.000000000 +0000 3833index 0000000..86b2b24
3232+++ git/libuargp/argp-parse.c 2012-06-18 13:10:44.060825542 -0700 3834--- /dev/null
3835+++ b/libuargp/argp-parse.c
3233@@ -0,0 +1,949 @@ 3836@@ -0,0 +1,949 @@
3234+/* Hierarchial argument parsing, layered over getopt 3837+/* Hierarchial argument parsing, layered over getopt
3235+ Copyright (C) 1995-2000, 2002, 2003, 2004 Free Software Foundation, Inc. 3838+ Copyright (C) 1995-2000, 2002, 2003, 2004 Free Software Foundation, Inc.
@@ -4180,10 +4783,11 @@ Index: git/libuargp/argp-parse.c
4180+ 4783+
4181+ return 0; 4784+ return 0;
4182+} 4785+}
4183Index: git/libuargp/argp-pv.c 4786diff --git a/libuargp/argp-pv.c b/libuargp/argp-pv.c
4184=================================================================== 4787new file mode 100644
4185--- /dev/null 1970-01-01 00:00:00.000000000 +0000 4788index 0000000..f1227b5
4186+++ git/libuargp/argp-pv.c 2012-06-18 13:10:44.060825542 -0700 4789--- /dev/null
4790+++ b/libuargp/argp-pv.c
4187@@ -0,0 +1,25 @@ 4791@@ -0,0 +1,25 @@
4188+/* Default definition for ARGP_PROGRAM_VERSION. 4792+/* Default definition for ARGP_PROGRAM_VERSION.
4189+ Copyright (C) 1996, 1997, 1999 Free Software Foundation, Inc. 4793+ Copyright (C) 1996, 1997, 1999 Free Software Foundation, Inc.
@@ -4210,10 +4814,11 @@ Index: git/libuargp/argp-pv.c
4210+ print this this string followed by a newline and exit (unless the 4814+ print this this string followed by a newline and exit (unless the
4211+ ARGP_NO_EXIT flag is used). Overridden by ARGP_PROGRAM_VERSION_HOOK. */ 4815+ ARGP_NO_EXIT flag is used). Overridden by ARGP_PROGRAM_VERSION_HOOK. */
4212+const char *argp_program_version; 4816+const char *argp_program_version;
4213Index: git/libuargp/argp-pvh.c 4817diff --git a/libuargp/argp-pvh.c b/libuargp/argp-pvh.c
4214=================================================================== 4818new file mode 100644
4215--- /dev/null 1970-01-01 00:00:00.000000000 +0000 4819index 0000000..1f1d962
4216+++ git/libuargp/argp-pvh.c 2012-06-18 13:10:44.060825542 -0700 4820--- /dev/null
4821+++ b/libuargp/argp-pvh.c
4217@@ -0,0 +1,32 @@ 4822@@ -0,0 +1,32 @@
4218+/* Default definition for ARGP_PROGRAM_VERSION_HOOK. 4823+/* Default definition for ARGP_PROGRAM_VERSION_HOOK.
4219+ Copyright (C) 1996, 1997, 1999 Free Software Foundation, Inc. 4824+ Copyright (C) 1996, 1997, 1999 Free Software Foundation, Inc.
@@ -4247,10 +4852,11 @@ Index: git/libuargp/argp-pvh.c
4247+ current parsing state, and then exits (unless the ARGP_NO_EXIT flag is 4852+ current parsing state, and then exits (unless the ARGP_NO_EXIT flag is
4248+ used). This variable takes precedent over ARGP_PROGRAM_VERSION. */ 4853+ used). This variable takes precedent over ARGP_PROGRAM_VERSION. */
4249+void (*argp_program_version_hook) (FILE *stream, struct argp_state *state); 4854+void (*argp_program_version_hook) (FILE *stream, struct argp_state *state);
4250Index: git/libuargp/argp-xinl.c 4855diff --git a/libuargp/argp-xinl.c b/libuargp/argp-xinl.c
4251=================================================================== 4856new file mode 100644
4252--- /dev/null 1970-01-01 00:00:00.000000000 +0000 4857index 0000000..f1d3000
4253+++ git/libuargp/argp-xinl.c 2012-06-18 13:10:44.060825542 -0700 4858--- /dev/null
4859+++ b/libuargp/argp-xinl.c
4254@@ -0,0 +1,35 @@ 4860@@ -0,0 +1,35 @@
4255+/* Real definitions for extern inline functions in argp.h 4861+/* Real definitions for extern inline functions in argp.h
4256+ Copyright (C) 1997, 1998, 2004 Free Software Foundation, Inc. 4862+ Copyright (C) 1997, 1998, 2004 Free Software Foundation, Inc.
@@ -4287,10 +4893,11 @@ Index: git/libuargp/argp-xinl.c
4287+#undef __OPTIMIZE__ 4893+#undef __OPTIMIZE__
4288+#define __OPTIMIZE__ 1 4894+#define __OPTIMIZE__ 1
4289+#include <argp.h> 4895+#include <argp.h>
4290Index: git/test/argp/Makefile 4896diff --git a/test/argp/Makefile b/test/argp/Makefile
4291=================================================================== 4897new file mode 100644
4292--- /dev/null 1970-01-01 00:00:00.000000000 +0000 4898index 0000000..616fe71
4293+++ git/test/argp/Makefile 2012-06-18 13:10:44.060825542 -0700 4899--- /dev/null
4900+++ b/test/argp/Makefile
4294@@ -0,0 +1,7 @@ 4901@@ -0,0 +1,7 @@
4295+# uClibc argp tests 4902+# uClibc argp tests
4296+# Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. 4903+# Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
@@ -4299,10 +4906,11 @@ Index: git/test/argp/Makefile
4299+include ../Rules.mak 4906+include ../Rules.mak
4300+-include Makefile.in 4907+-include Makefile.in
4301+include ../Test.mak 4908+include ../Test.mak
4302Index: git/test/argp/Makefile.in 4909diff --git a/test/argp/Makefile.in b/test/argp/Makefile.in
4303=================================================================== 4910new file mode 100644
4304--- /dev/null 1970-01-01 00:00:00.000000000 +0000 4911index 0000000..d81b359
4305+++ git/test/argp/Makefile.in 2012-06-18 13:10:44.060825542 -0700 4912--- /dev/null
4913+++ b/test/argp/Makefile.in
4306@@ -0,0 +1,12 @@ 4914@@ -0,0 +1,12 @@
4307+# uClibc argp tests 4915+# uClibc argp tests
4308+# Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. 4916+# Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
@@ -4316,10 +4924,11 @@ Index: git/test/argp/Makefile.in
4316+OPTS_argp-ex4 = ARG1 string1 string2 string3 4924+OPTS_argp-ex4 = ARG1 string1 string2 string3
4317+OPTS_bug-argp1 = -- --help 4925+OPTS_bug-argp1 = -- --help
4318+ 4926+
4319Index: git/test/argp/argp-ex1.c 4927diff --git a/test/argp/argp-ex1.c b/test/argp/argp-ex1.c
4320=================================================================== 4928new file mode 100644
4321--- /dev/null 1970-01-01 00:00:00.000000000 +0000 4929index 0000000..7bb5f22
4322+++ git/test/argp/argp-ex1.c 2012-06-18 13:10:44.060825542 -0700 4930--- /dev/null
4931+++ b/test/argp/argp-ex1.c
4323@@ -0,0 +1,15 @@ 4932@@ -0,0 +1,15 @@
4324+/* Argp example #1 -- a minimal program using argp */ 4933+/* Argp example #1 -- a minimal program using argp */
4325+ 4934+
@@ -4336,10 +4945,11 @@ Index: git/test/argp/argp-ex1.c
4336+ argp_parse (0, argc, argv, 0, 0, 0); 4945+ argp_parse (0, argc, argv, 0, 0, 0);
4337+ exit (0); 4946+ exit (0);
4338+} 4947+}
4339Index: git/test/argp/argp-ex2.c 4948diff --git a/test/argp/argp-ex2.c b/test/argp/argp-ex2.c
4340=================================================================== 4949new file mode 100644
4341--- /dev/null 1970-01-01 00:00:00.000000000 +0000 4950index 0000000..c49fbac
4342+++ git/test/argp/argp-ex2.c 2012-06-18 13:10:44.060825542 -0700 4951--- /dev/null
4952+++ b/test/argp/argp-ex2.c
4343@@ -0,0 +1,45 @@ 4953@@ -0,0 +1,45 @@
4344+/* Argp example #2 -- a pretty minimal program using argp */ 4954+/* Argp example #2 -- a pretty minimal program using argp */
4345+ 4955+
@@ -4386,10 +4996,11 @@ Index: git/test/argp/argp-ex2.c
4386+ argp_parse (&argp, argc, argv, 0, 0, 0); 4996+ argp_parse (&argp, argc, argv, 0, 0, 0);
4387+ exit (0); 4997+ exit (0);
4388+} 4998+}
4389Index: git/test/argp/argp-ex3.c 4999diff --git a/test/argp/argp-ex3.c b/test/argp/argp-ex3.c
4390=================================================================== 5000new file mode 100644
4391--- /dev/null 1970-01-01 00:00:00.000000000 +0000 5001index 0000000..24d5c50
4392+++ git/test/argp/argp-ex3.c 2012-06-18 13:10:44.060825542 -0700 5002--- /dev/null
5003+++ b/test/argp/argp-ex3.c
4393@@ -0,0 +1,153 @@ 5004@@ -0,0 +1,153 @@
4394+/* Argp example #3 -- a program with options and arguments using argp */ 5005+/* Argp example #3 -- a program with options and arguments using argp */
4395+ 5006+
@@ -4544,10 +5155,11 @@ Index: git/test/argp/argp-ex3.c
4544+ 5155+
4545+ exit (0); 5156+ exit (0);
4546+} 5157+}
4547Index: git/test/argp/argp-ex4.c 5158diff --git a/test/argp/argp-ex4.c b/test/argp/argp-ex4.c
4548=================================================================== 5159new file mode 100644
4549--- /dev/null 1970-01-01 00:00:00.000000000 +0000 5160index 0000000..c77c7ef
4550+++ git/test/argp/argp-ex4.c 2012-06-18 13:10:44.060825542 -0700 5161--- /dev/null
5162+++ b/test/argp/argp-ex4.c
4551@@ -0,0 +1,167 @@ 5163@@ -0,0 +1,167 @@
4552+/* Argp example #4 -- a program with somewhat more complicated options */ 5164+/* Argp example #4 -- a program with somewhat more complicated options */
4553+ 5165+
@@ -4716,10 +5328,11 @@ Index: git/test/argp/argp-ex4.c
4716+ 5328+
4717+ exit (0); 5329+ exit (0);
4718+} 5330+}
4719Index: git/test/argp/argp-test.c 5331diff --git a/test/argp/argp-test.c b/test/argp/argp-test.c
4720=================================================================== 5332new file mode 100644
4721--- /dev/null 1970-01-01 00:00:00.000000000 +0000 5333index 0000000..b3d573b
4722+++ git/test/argp/argp-test.c 2012-06-18 13:10:44.060825542 -0700 5334--- /dev/null
5335+++ b/test/argp/argp-test.c
4723@@ -0,0 +1,209 @@ 5336@@ -0,0 +1,209 @@
4724+/* Test program for argp argument parser 5337+/* Test program for argp argument parser
4725+ Copyright (C) 1997 Free Software Foundation, Inc. 5338+ Copyright (C) 1997 Free Software Foundation, Inc.
@@ -4930,10 +5543,11 @@ Index: git/test/argp/argp-test.c
4930+ printf ("After parsing: foonly = %x\n", params.foonly); 5543+ printf ("After parsing: foonly = %x\n", params.foonly);
4931+ return 0; 5544+ return 0;
4932+} 5545+}
4933Index: git/test/argp/bug-argp1.c 5546diff --git a/test/argp/bug-argp1.c b/test/argp/bug-argp1.c
4934=================================================================== 5547new file mode 100644
4935--- /dev/null 1970-01-01 00:00:00.000000000 +0000 5548index 0000000..a28cf4b
4936+++ git/test/argp/bug-argp1.c 2012-06-18 13:10:44.060825542 -0700 5549--- /dev/null
5550+++ b/test/argp/bug-argp1.c
4937@@ -0,0 +1,26 @@ 5551@@ -0,0 +1,26 @@
4938+#include <argp.h> 5552+#include <argp.h>
4939+ 5553+
@@ -4961,10 +5575,11 @@ Index: git/test/argp/bug-argp1.c
4961+ 5575+
4962+#define TEST_FUNCTION do_test (argc, argv) 5576+#define TEST_FUNCTION do_test (argc, argv)
4963+#include "../test-skeleton.c" 5577+#include "../test-skeleton.c"
4964Index: git/test/argp/tst-argp1.c 5578diff --git a/test/argp/tst-argp1.c b/test/argp/tst-argp1.c
4965=================================================================== 5579new file mode 100644
4966--- /dev/null 1970-01-01 00:00:00.000000000 +0000 5580index 0000000..827daca
4967+++ git/test/argp/tst-argp1.c 2012-06-18 13:10:44.060825542 -0700 5581--- /dev/null
5582+++ b/test/argp/tst-argp1.c
4968@@ -0,0 +1,118 @@ 5583@@ -0,0 +1,118 @@
4969+/* Copyright (C) 2002, 2003 Free Software Foundation, Inc. 5584+/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
4970+ This file is part of the GNU C Library. 5585+ This file is part of the GNU C Library.
@@ -5084,10 +5699,11 @@ Index: git/test/argp/tst-argp1.c
5084+ 5699+
5085+#define TEST_FUNCTION do_test () 5700+#define TEST_FUNCTION do_test ()
5086+#include "../test-skeleton.c" 5701+#include "../test-skeleton.c"
5087Index: git/test/argp/tst-argp2.c 5702diff --git a/test/argp/tst-argp2.c b/test/argp/tst-argp2.c
5088=================================================================== 5703new file mode 100644
5089--- /dev/null 1970-01-01 00:00:00.000000000 +0000 5704index 0000000..705cdca
5090+++ git/test/argp/tst-argp2.c 2012-06-18 13:10:44.064825538 -0700 5705--- /dev/null
5706+++ b/test/argp/tst-argp2.c
5091@@ -0,0 +1,101 @@ 5707@@ -0,0 +1,101 @@
5092+/* Copyright (C) 2007 Free Software Foundation, Inc. 5708+/* Copyright (C) 2007 Free Software Foundation, Inc.
5093+ This file is part of the GNU C Library. 5709+ This file is part of the GNU C Library.
@@ -5190,3 +5806,6 @@ Index: git/test/argp/tst-argp2.c
5190+ 5806+
5191+#define TEST_FUNCTION do_test () 5807+#define TEST_FUNCTION do_test ()
5192+#include "../test-skeleton.c" 5808+#include "../test-skeleton.c"
5809--
58102.1.4
5811
diff --git a/meta/recipes-core/uclibc/uclibc-git/0004-Dont-support-localised-optimizations-this-helps-to-h.patch b/meta/recipes-core/uclibc/uclibc-git/0004-Dont-support-localised-optimizations-this-helps-to-h.patch
new file mode 100644
index 0000000000..629e13c762
--- /dev/null
+++ b/meta/recipes-core/uclibc/uclibc-git/0004-Dont-support-localised-optimizations-this-helps-to-h.patch
@@ -0,0 +1,30 @@
1From 31785c544abe8b215dbb2264fb11ee7051515797 Mon Sep 17 00:00:00 2001
2From: Khem Raj <raj.khem@gmail.com>
3Date: Sun, 16 Aug 2015 20:58:59 -0700
4Subject: [PATCH 4/7] Dont support localised optimizations this helps to have a
5 global -O level
6
7Signed-off-by: Khem Raj <raj.khem@gmail.com>
8---
9Upstream-Status: Pending
10
11 libpthread/nptl/pthread_mutex_timedlock.c | 2 ++
12 1 file changed, 2 insertions(+)
13
14diff --git a/libpthread/nptl/pthread_mutex_timedlock.c b/libpthread/nptl/pthread_mutex_timedlock.c
15index 04187f6..f56f6c5 100644
16--- a/libpthread/nptl/pthread_mutex_timedlock.c
17+++ b/libpthread/nptl/pthread_mutex_timedlock.c
18@@ -28,7 +28,9 @@
19 * error: can't find a register in class ‘GENERAL_REGS’ while reloading ‘asm’
20 */
21 int
22+#ifndef __OPTIMIZE__
23 attribute_optimize("Os")
24+#endif
25 pthread_mutex_timedlock (
26 pthread_mutex_t *mutex,
27 const struct timespec *abstime)
28--
292.1.4
30
diff --git a/meta/recipes-core/uclibc/uclibc-git/0005-Always-use-O2-for-compiling-fork.c.patch b/meta/recipes-core/uclibc/uclibc-git/0005-Always-use-O2-for-compiling-fork.c.patch
new file mode 100644
index 0000000000..ad9b246ab5
--- /dev/null
+++ b/meta/recipes-core/uclibc/uclibc-git/0005-Always-use-O2-for-compiling-fork.c.patch
@@ -0,0 +1,33 @@
1From 883debc22e30a947fe5858cc07ee5aebd3d07a2e Mon Sep 17 00:00:00 2001
2From: Khem Raj <raj.khem@gmail.com>
3Date: Sun, 16 Aug 2015 20:59:56 -0700
4Subject: [PATCH 5/7] Always use -O2 for compiling fork.c
5
6When compiling in thumb mode for arm with -Os gcc gives up since it can
7not find registers to spill. So we use -O2 option for compiling fork.c
8It may be addressable in gcc.
9
10Signed-off-by: Khem Raj <raj.khem@gmail.com>
11---
12Upstream-Status: Pending
13
14 libpthread/nptl/sysdeps/unix/sysv/linux/arm/Makefile.arch | 6 ++++++
15 1 file changed, 6 insertions(+)
16
17diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/arm/Makefile.arch b/libpthread/nptl/sysdeps/unix/sysv/linux/arm/Makefile.arch
18index 0ea0b29..0767e9c 100644
19--- a/libpthread/nptl/sysdeps/unix/sysv/linux/arm/Makefile.arch
20+++ b/libpthread/nptl/sysdeps/unix/sysv/linux/arm/Makefile.arch
21@@ -21,3 +21,9 @@ ASFLAGS-pt-vfork.S = -marm
22 CFLAGS-OMIT-pt-vfork.S = -mthumb
23 ASFLAGS-vfork.S = -marm
24 CFLAGS-OMIT-vfork.S = -mthumb
25+
26+# For arm fork.c does not compile with -Os when compiling
27+# in thumb1 mode
28+ifeq ($(COMPILE_IN_THUMB_MODE),y)
29+CFLAGS-fork.c = -O2
30+endif
31--
322.1.4
33
diff --git a/meta/recipes-core/uclibc/uclibc-git/0001-ldso-limited-support-for-ORIGIN-in-rpath.patch b/meta/recipes-core/uclibc/uclibc-git/0006-ldso-limited-support-for-ORIGIN-in-rpath.patch
index 7479ec35e1..f0d87371bc 100644
--- a/meta/recipes-core/uclibc/uclibc-git/0001-ldso-limited-support-for-ORIGIN-in-rpath.patch
+++ b/meta/recipes-core/uclibc/uclibc-git/0006-ldso-limited-support-for-ORIGIN-in-rpath.patch
@@ -1,7 +1,7 @@
1From 32eaf738faafad2b16e1f3f5beb91736b3c27a3b Mon Sep 17 00:00:00 2001 1From b40c129ed2d53b69463883a5422dd4a012a398f9 Mon Sep 17 00:00:00 2001
2From: Junling Zheng <zhengjunling@huawei.com> 2From: Junling Zheng <zhengjunling@huawei.com>
3Date: Fri, 3 Apr 2015 05:02:27 +0000 3Date: Fri, 3 Apr 2015 05:02:27 +0000
4Subject: [PATCH] ldso: limited support for $ORIGIN in rpath 4Subject: [PATCH 6/7] ldso: limited support for $ORIGIN in rpath
5MIME-Version: 1.0 5MIME-Version: 1.0
6Content-Type: text/plain; charset=UTF-8 6Content-Type: text/plain; charset=UTF-8
7Content-Transfer-Encoding: 8bit 7Content-Transfer-Encoding: 8bit
@@ -26,7 +26,10 @@ Upstream-Status: Submitted
26 26
27Signed-off-by: Timo Teräs <timo.teras at iki.fi> 27Signed-off-by: Timo Teräs <timo.teras at iki.fi>
28Signed-off-by: Junling Zheng <zhengjunling@huawei.com> 28Signed-off-by: Junling Zheng <zhengjunling@huawei.com>
29Signed-off-by: Khem Raj <raj.khem@gmail.com>
29--- 30---
31Upstream-Status: Pending
32
30 ldso/include/dl-string.h | 2 ++ 33 ldso/include/dl-string.h | 2 ++
31 ldso/ldso/dl-elf.c | 79 +++++++++++++++++++++++++----------------------- 34 ldso/ldso/dl-elf.c | 79 +++++++++++++++++++++++++-----------------------
32 ldso/ldso/ldso.c | 18 +++++++++-- 35 ldso/ldso/ldso.c | 18 +++++++++--
@@ -47,7 +50,7 @@ index aacad10..14ae617 100644
47 # define _dl_memcmp memcmp 50 # define _dl_memcmp memcmp
48 # define _dl_memset memset 51 # define _dl_memset memset
49diff --git a/ldso/ldso/dl-elf.c b/ldso/ldso/dl-elf.c 52diff --git a/ldso/ldso/dl-elf.c b/ldso/ldso/dl-elf.c
50index 1b06bc1..b323c90 100644 53index 5631905..6ab7afe 100644
51--- a/ldso/ldso/dl-elf.c 54--- a/ldso/ldso/dl-elf.c
52+++ b/ldso/ldso/dl-elf.c 55+++ b/ldso/ldso/dl-elf.c
53@@ -133,56 +133,60 @@ _dl_protect_relro (struct elf_resolve *l) 56@@ -133,56 +133,60 @@ _dl_protect_relro (struct elf_resolve *l)
@@ -190,7 +193,7 @@ index 1b06bc1..b323c90 100644
190 return tpnt1; 193 return tpnt1;
191 194
192diff --git a/ldso/ldso/ldso.c b/ldso/ldso/ldso.c 195diff --git a/ldso/ldso/ldso.c b/ldso/ldso/ldso.c
193index 5619629..73bcc41 100644 196index f38f9e3..3812908 100644
194--- a/ldso/ldso/ldso.c 197--- a/ldso/ldso/ldso.c
195+++ b/ldso/ldso/ldso.c 198+++ b/ldso/ldso/ldso.c
196@@ -402,6 +402,20 @@ static ptrdiff_t _dl_build_local_scope (struct elf_resolve **list, 199@@ -402,6 +402,20 @@ static ptrdiff_t _dl_build_local_scope (struct elf_resolve **list,
@@ -226,5 +229,5 @@ index 5619629..73bcc41 100644
226 #ifdef __DSBT__ 229 #ifdef __DSBT__
227 _dl_ldso_dsbt = (void *)tpnt->dynamic_info[DT_DSBT_BASE_IDX]; 230 _dl_ldso_dsbt = (void *)tpnt->dynamic_info[DT_DSBT_BASE_IDX];
228-- 231--
2291.8.3.4 2322.1.4
230 233
diff --git a/meta/recipes-core/uclibc/uclibc-git/0007-nptl-atfork-Hide-pthread_atfork-in-shared-versions.patch b/meta/recipes-core/uclibc/uclibc-git/0007-nptl-atfork-Hide-pthread_atfork-in-shared-versions.patch
new file mode 100644
index 0000000000..ee932c3803
--- /dev/null
+++ b/meta/recipes-core/uclibc/uclibc-git/0007-nptl-atfork-Hide-pthread_atfork-in-shared-versions.patch
@@ -0,0 +1,35 @@
1From 90516af9f776f9c2835b47fc52775dcb307a85ac Mon Sep 17 00:00:00 2001
2From: Khem Raj <raj.khem@gmail.com>
3Date: Sat, 23 Jun 2012 15:59:01 -0700
4Subject: [PATCH 7/7] nptl/atfork: Hide pthread_atfork in shared versions
5
6Signed-off-by: Khem Raj <raj.khem@gmail.com>
7Upstream-Status: Pending
8---
9 libpthread/nptl/Makefile.in | 3 ++-
10 1 file changed, 2 insertions(+), 1 deletion(-)
11
12diff --git a/libpthread/nptl/Makefile.in b/libpthread/nptl/Makefile.in
13index 55eeba2..8cb8fa9 100644
14--- a/libpthread/nptl/Makefile.in
15+++ b/libpthread/nptl/Makefile.in
16@@ -16,6 +16,7 @@ libc-shared-routines-y = forward.c libc-cancellation.c
17 libc-static-routines-y = alloca_cutoff.c libc-cancellation.c
18 libpthread-shared-only-routines-y = version.c
19 libpthread-static-only-routines-y = pthread_atfork.c
20+
21 libpthread-routines- += $(notdir $(wildcard $(libpthread_DIR)/gen_*.c)) # dummy generated files
22 libpthread-routines- += allocatestack.c # dummy included by pthread_create.c
23 libpthread-routines- += pthread_mutex_getprioceiling.c pthread_mutex_setprioceiling.c # XXX: delete those or use them!
24@@ -201,7 +202,7 @@ CFLAGS-msgsnd.c = -fexceptions -fasynchronous-unwind-tables
25 CFLAGS-tcdrain.c = -fexceptions -fasynchronous-unwind-tables
26
27 CFLAGS-pt-system.c = -fexceptions -I$(top_srcdir)libc/stdlib
28-
29+CFLAGS-pthread_atfork.c = -DNOT_IN_libc
30 #
31 # The rest of this file is uClibc specific.
32 #
33--
342.1.4
35
diff --git a/meta/recipes-core/uclibc/uclibc-git/argp-headers.patch b/meta/recipes-core/uclibc/uclibc-git/argp-headers.patch
deleted file mode 100644
index b31b991846..0000000000
--- a/meta/recipes-core/uclibc/uclibc-git/argp-headers.patch
+++ /dev/null
@@ -1,583 +0,0 @@
1Added headers file needed by argp sources.
2
3Signed-off-by: Salvatore Cro <salvatore.cro at st.com>
4---
5 include/argp.h | 566 ++++++++++++++++++++++++++++++++++++++++++++
6 libc/argp/argp-fmtstream.h | 314 ++++++++++++++++++++++++
7 2 files changed, 880 insertions(+), 0 deletions(-)
8 create mode 100644 include/argp.h
9 create mode 100644 libc/argp/argp-fmtstream.h
10
11Upstream-Status: Pending
12
13Index: git/include/argp.h
14===================================================================
15--- /dev/null
16+++ git/include/argp.h
17@@ -0,0 +1,566 @@
18+/* Hierarchial argument parsing, layered over getopt.
19+ Copyright (C) 1995-1999, 2003, 2004, 2005, 2006, 2007, 2009
20+ Free Software Foundation, Inc.
21+ This file is part of the GNU C Library.
22+ Written by Miles Bader <miles at gnu.ai.mit.edu>.
23+
24+ The GNU C Library is free software; you can redistribute it and/or
25+ modify it under the terms of the GNU Lesser General Public
26+ License as published by the Free Software Foundation; either
27+ version 2.1 of the License, or (at your option) any later version.
28+
29+ The GNU C Library is distributed in the hope that it will be useful,
30+ but WITHOUT ANY WARRANTY; without even the implied warranty of
31+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
32+ Lesser General Public License for more details.
33+
34+ You should have received a copy of the GNU Lesser General Public
35+ License along with the GNU C Library; if not, write to the Free
36+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
37+ 02111-1307 USA.
38+
39+ Modified for uClibc by: Salvatore Cro <salvatore.cro at st.com>
40+*/
41+
42+#ifndef _ARGP_H
43+#define _ARGP_H
44+
45+#include <stdio.h>
46+#include <ctype.h>
47+#include <limits.h>
48+
49+#define __need_error_t
50+#include <errno.h>
51+
52+#ifndef __const
53+# define __const const
54+#endif
55+
56+#ifndef __THROW
57+# define __THROW
58+#endif
59+#ifndef __NTH
60+# define __NTH(fct) fct __THROW
61+#endif
62+
63+#ifndef __attribute__
64+/* This feature is available in gcc versions 2.5 and later. */
65+# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || defined(__STRICT_ANSI__)
66+# define __attribute__(Spec) /* empty */
67+# endif
68+/* The __-protected variants of `format' and `printf' attributes
69+ are accepted by gcc versions 2.6.4 (effectively 2.7) and later. */
70+# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7) || defined(__STRICT_ANSI__)
71+# define __format__ format
72+# define __printf__ printf
73+# endif
74+#endif
75+
76+/* GCC 2.95 and later have "__restrict"; C99 compilers have
77+ "restrict", and "configure" may have defined "restrict". */
78+#ifndef __restrict
79+# if ! (2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__))
80+# if defined restrict || 199901L <= __STDC_VERSION__
81+# define __restrict restrict
82+# else
83+# define __restrict
84+# endif
85+# endif
86+#endif
87+
88+#ifndef __error_t_defined
89+typedef int error_t;
90+# define __error_t_defined
91+#endif
92+
93+#ifdef __cplusplus
94+extern "C" {
95+#endif
96+
97+/* A description of a particular option. A pointer to an array of
98+ these is passed in the OPTIONS field of an argp structure. Each option
99+ entry can correspond to one long option and/or one short option; more
100+ names for the same option can be added by following an entry in an option
101+ array with options having the OPTION_ALIAS flag set. */
102+struct argp_option
103+{
104+ /* The long option name. For more than one name for the same option, you
105+ can use following options with the OPTION_ALIAS flag set. */
106+ __const char *name;
107+
108+ /* What key is returned for this option. If > 0 and printable, then it's
109+ also accepted as a short option. */
110+ int key;
111+
112+ /* If non-NULL, this is the name of the argument associated with this
113+ option, which is required unless the OPTION_ARG_OPTIONAL flag is set. */
114+ __const char *arg;
115+
116+ /* OPTION_ flags. */
117+ int flags;
118+
119+ /* The doc string for this option. If both NAME and KEY are 0, This string
120+ will be printed outdented from the normal option column, making it
121+ useful as a group header (it will be the first thing printed in its
122+ group); in this usage, it's conventional to end the string with a `:'. */
123+ __const char *doc;
124+
125+ /* The group this option is in. In a long help message, options are sorted
126+ alphabetically within each group, and the groups presented in the order
127+ 0, 1, 2, ..., n, -m, ..., -2, -1. Every entry in an options array with
128+ if this field 0 will inherit the group number of the previous entry, or
129+ zero if it's the first one, unless its a group header (NAME and KEY both
130+ 0), in which case, the previous entry + 1 is the default. Automagic
131+ options such as --help are put into group -1. */
132+ int group;
133+};
134+
135+/* The argument associated with this option is optional. */
136+#define OPTION_ARG_OPTIONAL 0x1
137+
138+/* This option isn't displayed in any help messages. */
139+#define OPTION_HIDDEN 0x2
140+
141+/* This option is an alias for the closest previous non-alias option. This
142+ means that it will be displayed in the same help entry, and will inherit
143+ fields other than NAME and KEY from the aliased option. */
144+#define OPTION_ALIAS 0x4
145+
146+/* This option isn't actually an option (and so should be ignored by the
147+ actual option parser), but rather an arbitrary piece of documentation that
148+ should be displayed in much the same manner as the options. If this flag
149+ is set, then the option NAME field is displayed unmodified (e.g., no `--'
150+ prefix is added) at the left-margin (where a *short* option would normally
151+ be displayed), and the documentation string in the normal place. For
152+ purposes of sorting, any leading whitespace and punctuation is ignored,
153+ except that if the first non-whitespace character is not `-', this entry
154+ is displayed after all options (and OPTION_DOC entries with a leading `-')
155+ in the same group. */
156+#define OPTION_DOC 0x8
157+
158+/* This option shouldn't be included in `long' usage messages (but is still
159+ included in help messages). This is mainly intended for options that are
160+ completely documented in an argp's ARGS_DOC field, in which case including
161+ the option in the generic usage list would be redundant. For instance,
162+ if ARGS_DOC is "FOO BAR\n-x BLAH", and the `-x' option's purpose is to
163+ distinguish these two cases, -x should probably be marked
164+ OPTION_NO_USAGE. */
165+#define OPTION_NO_USAGE 0x10
166+
167+struct argp; /* fwd declare this type */
168+struct argp_state; /* " */
169+struct argp_child; /* " */
170+
171+/* The type of a pointer to an argp parsing function. */
172+typedef error_t (*argp_parser_t) (int __key, char *__arg,
173+ struct argp_state *__state);
174+
175+/* What to return for unrecognized keys. For special ARGP_KEY_ keys, such
176+ returns will simply be ignored. For user keys, this error will be turned
177+ into EINVAL (if the call to argp_parse is such that errors are propagated
178+ back to the user instead of exiting); returning EINVAL itself would result
179+ in an immediate stop to parsing in *all* cases. */
180+#define ARGP_ERR_UNKNOWN E2BIG /* Hurd should never need E2BIG. XXX */
181+
182+/* Special values for the KEY argument to an argument parsing function.
183+ ARGP_ERR_UNKNOWN should be returned if they aren't understood.
184+
185+ The sequence of keys to a parsing function is either (where each
186+ uppercased word should be prefixed by `ARGP_KEY_' and opt is a user key):
187+
188+ INIT opt... NO_ARGS END SUCCESS -- No non-option arguments at all
189+ or INIT (opt | ARG)... END SUCCESS -- All non-option args parsed
190+ or INIT (opt | ARG)... SUCCESS -- Some non-option arg unrecognized
191+
192+ The third case is where every parser returned ARGP_KEY_UNKNOWN for an
193+ argument, in which case parsing stops at that argument (returning the
194+ unparsed arguments to the caller of argp_parse if requested, or stopping
195+ with an error message if not).
196+
197+ If an error occurs (either detected by argp, or because the parsing
198+ function returned an error value), then the parser is called with
199+ ARGP_KEY_ERROR, and no further calls are made. */
200+
201+/* This is not an option at all, but rather a command line argument. If a
202+ parser receiving this key returns success, the fact is recorded, and the
203+ ARGP_KEY_NO_ARGS case won't be used. HOWEVER, if while processing the
204+ argument, a parser function decrements the NEXT field of the state it's
205+ passed, the option won't be considered processed; this is to allow you to
206+ actually modify the argument (perhaps into an option), and have it
207+ processed again. */
208+#define ARGP_KEY_ARG 0
209+/* There are remaining arguments not parsed by any parser, which may be found
210+ starting at (STATE->argv + STATE->next). If success is returned, but
211+ STATE->next left untouched, it's assumed that all arguments were consume,
212+ otherwise, the parser should adjust STATE->next to reflect any arguments
213+ consumed. */
214+#define ARGP_KEY_ARGS 0x1000006
215+/* There are no more command line arguments at all. */
216+#define ARGP_KEY_END 0x1000001
217+/* Because it's common to want to do some special processing if there aren't
218+ any non-option args, user parsers are called with this key if they didn't
219+ successfully process any non-option arguments. Called just before
220+ ARGP_KEY_END (where more general validity checks on previously parsed
221+ arguments can take place). */
222+#define ARGP_KEY_NO_ARGS 0x1000002
223+/* Passed in before any parsing is done. Afterwards, the values of each
224+ element of the CHILD_INPUT field, if any, in the state structure is
225+ copied to each child's state to be the initial value of the INPUT field. */
226+#define ARGP_KEY_INIT 0x1000003
227+/* Use after all other keys, including SUCCESS & END. */
228+#define ARGP_KEY_FINI 0x1000007
229+/* Passed in when parsing has successfully been completed (even if there are
230+ still arguments remaining). */
231+#define ARGP_KEY_SUCCESS 0x1000004
232+/* Passed in if an error occurs. */
233+#define ARGP_KEY_ERROR 0x1000005
234+
235+/* An argp structure contains a set of options declarations, a function to
236+ deal with parsing one, documentation string, a possible vector of child
237+ argp's, and perhaps a function to filter help output. When actually
238+ parsing options, getopt is called with the union of all the argp
239+ structures chained together through their CHILD pointers, with conflicts
240+ being resolved in favor of the first occurrence in the chain. */
241+struct argp
242+{
243+ /* An array of argp_option structures, terminated by an entry with both
244+ NAME and KEY having a value of 0. */
245+ __const struct argp_option *options;
246+
247+ /* What to do with an option from this structure. KEY is the key
248+ associated with the option, and ARG is any associated argument (NULL if
249+ none was supplied). If KEY isn't understood, ARGP_ERR_UNKNOWN should be
250+ returned. If a non-zero, non-ARGP_ERR_UNKNOWN value is returned, then
251+ parsing is stopped immediately, and that value is returned from
252+ argp_parse(). For special (non-user-supplied) values of KEY, see the
253+ ARGP_KEY_ definitions below. */
254+ argp_parser_t parser;
255+
256+ /* A string describing what other arguments are wanted by this program. It
257+ is only used by argp_usage to print the `Usage:' message. If it
258+ contains newlines, the strings separated by them are considered
259+ alternative usage patterns, and printed on separate lines (lines after
260+ the first are prefix by ` or: ' instead of `Usage:'). */
261+ __const char *args_doc;
262+
263+ /* If non-NULL, a string containing extra text to be printed before and
264+ after the options in a long help message (separated by a vertical tab
265+ `\v' character). */
266+ __const char *doc;
267+
268+ /* A vector of argp_children structures, terminated by a member with a 0
269+ argp field, pointing to child argps should be parsed with this one. Any
270+ conflicts are resolved in favor of this argp, or early argps in the
271+ CHILDREN list. This field is useful if you use libraries that supply
272+ their own argp structure, which you want to use in conjunction with your
273+ own. */
274+ __const struct argp_child *children;
275+
276+ /* If non-zero, this should be a function to filter the output of help
277+ messages. KEY is either a key from an option, in which case TEXT is
278+ that option's help text, or a special key from the ARGP_KEY_HELP_
279+ defines, below, describing which other help text TEXT is. The function
280+ should return either TEXT, if it should be used as-is, a replacement
281+ string, which should be malloced, and will be freed by argp, or NULL,
282+ meaning `print nothing'. The value for TEXT is *after* any translation
283+ has been done, so if any of the replacement text also needs translation,
284+ that should be done by the filter function. INPUT is either the input
285+ supplied to argp_parse, or NULL, if argp_help was called directly. */
286+ char *(*help_filter) (int __key, __const char *__text, void *__input);
287+
288+ /* If non-zero the strings used in the argp library are translated using
289+ the domain described by this string. Otherwise the currently installed
290+ default domain is used. */
291+ const char *argp_domain;
292+};
293+
294+/* Possible KEY arguments to a help filter function. */
295+#define ARGP_KEY_HELP_PRE_DOC 0x2000001 /* Help text preceeding options. */
296+#define ARGP_KEY_HELP_POST_DOC 0x2000002 /* Help text following options. */
297+#define ARGP_KEY_HELP_HEADER 0x2000003 /* Option header string. */
298+#define ARGP_KEY_HELP_EXTRA 0x2000004 /* After all other documentation;
299+ TEXT is NULL for this key. */
300+/* Explanatory note emitted when duplicate option arguments have been
301+ suppressed. */
302+#define ARGP_KEY_HELP_DUP_ARGS_NOTE 0x2000005
303+#define ARGP_KEY_HELP_ARGS_DOC 0x2000006 /* Argument doc string. */
304+
305+/* When an argp has a non-zero CHILDREN field, it should point to a vector of
306+ argp_child structures, each of which describes a subsidiary argp. */
307+struct argp_child
308+{
309+ /* The child parser. */
310+ __const struct argp *argp;
311+
312+ /* Flags for this child. */
313+ int flags;
314+
315+ /* If non-zero, an optional header to be printed in help output before the
316+ child options. As a side-effect, a non-zero value forces the child
317+ options to be grouped together; to achieve this effect without actually
318+ printing a header string, use a value of "". */
319+ __const char *header;
320+
321+ /* Where to group the child options relative to the other (`consolidated')
322+ options in the parent argp; the values are the same as the GROUP field
323+ in argp_option structs, but all child-groupings follow parent options at
324+ a particular group level. If both this field and HEADER are zero, then
325+ they aren't grouped at all, but rather merged with the parent options
326+ (merging the child's grouping levels with the parents). */
327+ int group;
328+};
329+
330+/* Parsing state. This is provided to parsing functions called by argp,
331+ which may examine and, as noted, modify fields. */
332+struct argp_state
333+{
334+ /* The top level ARGP being parsed. */
335+ __const struct argp *root_argp;
336+
337+ /* The argument vector being parsed. May be modified. */
338+ int argc;
339+ char **argv;
340+
341+ /* The index in ARGV of the next arg that to be parsed. May be modified. */
342+ int next;
343+
344+ /* The flags supplied to argp_parse. May be modified. */
345+ unsigned flags;
346+
347+ /* While calling a parsing function with a key of ARGP_KEY_ARG, this is the
348+ number of the current arg, starting at zero, and incremented after each
349+ such call returns. At all other times, this is the number of such
350+ arguments that have been processed. */
351+ unsigned arg_num;
352+
353+ /* If non-zero, the index in ARGV of the first argument following a special
354+ `--' argument (which prevents anything following being interpreted as an
355+ option). Only set once argument parsing has proceeded past this point. */
356+ int quoted;
357+
358+ /* An arbitrary pointer passed in from the user. */
359+ void *input;
360+ /* Values to pass to child parsers. This vector will be the same length as
361+ the number of children for the current parser. */
362+ void **child_inputs;
363+
364+ /* For the parser's use. Initialized to 0. */
365+ void *hook;
366+
367+ /* The name used when printing messages. This is initialized to ARGV[0],
368+ or PROGRAM_INVOCATION_NAME if that is unavailable. */
369+ char *name;
370+
371+ /* Streams used when argp prints something. */
372+ FILE *err_stream; /* For errors; initialized to stderr. */
373+ FILE *out_stream; /* For information; initialized to stdout. */
374+
375+ void *pstate; /* Private, for use by argp. */
376+};
377+
378+/* Flags for argp_parse (note that the defaults are those that are
379+ convenient for program command line parsing): */
380+
381+/* Don't ignore the first element of ARGV. Normally (and always unless
382+ ARGP_NO_ERRS is set) the first element of the argument vector is
383+ skipped for option parsing purposes, as it corresponds to the program name
384+ in a command line. */
385+#define ARGP_PARSE_ARGV0 0x01
386+
387+/* Don't print error messages for unknown options to stderr; unless this flag
388+ is set, ARGP_PARSE_ARGV0 is ignored, as ARGV[0] is used as the program
389+ name in the error messages. This flag implies ARGP_NO_EXIT (on the
390+ assumption that silent exiting upon errors is bad behaviour). */
391+#define ARGP_NO_ERRS 0x02
392+
393+/* Don't parse any non-option args. Normally non-option args are parsed by
394+ calling the parse functions with a key of ARGP_KEY_ARG, and the actual arg
395+ as the value. Since it's impossible to know which parse function wants to
396+ handle it, each one is called in turn, until one returns 0 or an error
397+ other than ARGP_ERR_UNKNOWN; if an argument is handled by no one, the
398+ argp_parse returns prematurely (but with a return value of 0). If all
399+ args have been parsed without error, all parsing functions are called one
400+ last time with a key of ARGP_KEY_END. This flag needn't normally be set,
401+ as the normal behavior is to stop parsing as soon as some argument can't
402+ be handled. */
403+#define ARGP_NO_ARGS 0x04
404+
405+/* Parse options and arguments in the same order they occur on the command
406+ line -- normally they're rearranged so that all options come first. */
407+#define ARGP_IN_ORDER 0x08
408+
409+/* Don't provide the standard long option --help, which causes usage and
410+ option help information to be output to stdout, and exit (0) called. */
411+#define ARGP_NO_HELP 0x10
412+
413+/* Don't exit on errors (they may still result in error messages). */
414+#define ARGP_NO_EXIT 0x20
415+
416+/* Use the gnu getopt `long-only' rules for parsing arguments. */
417+#define ARGP_LONG_ONLY 0x40
418+
419+/* Turns off any message-printing/exiting options. */
420+#define ARGP_SILENT (ARGP_NO_EXIT | ARGP_NO_ERRS | ARGP_NO_HELP)
421+
422+/* Parse the options strings in ARGC & ARGV according to the options in ARGP.
423+ FLAGS is one of the ARGP_ flags above. If ARG_INDEX is non-NULL, the
424+ index in ARGV of the first unparsed option is returned in it. If an
425+ unknown option is present, ARGP_ERR_UNKNOWN is returned; if some parser
426+ routine returned a non-zero value, it is returned; otherwise 0 is
427+ returned. This function may also call exit unless the ARGP_NO_HELP flag
428+ is set. INPUT is a pointer to a value to be passed in to the parser. */
429+extern error_t argp_parse (__const struct argp *__restrict __argp,
430+ int __argc, char **__restrict __argv,
431+ unsigned __flags, int *__restrict __arg_index,
432+ void *__restrict __input);
433+
434+/* Global variables. */
435+
436+/* If defined or set by the user program to a non-zero value, then a default
437+ option --version is added (unless the ARGP_NO_HELP flag is used), which
438+ will print this string followed by a newline and exit (unless the
439+ ARGP_NO_EXIT flag is used). Overridden by ARGP_PROGRAM_VERSION_HOOK. */
440+extern __const char *argp_program_version;
441+
442+/* If defined or set by the user program to a non-zero value, then a default
443+ option --version is added (unless the ARGP_NO_HELP flag is used), which
444+ calls this function with a stream to print the version to and a pointer to
445+ the current parsing state, and then exits (unless the ARGP_NO_EXIT flag is
446+ used). This variable takes precedent over ARGP_PROGRAM_VERSION. */
447+extern void (*argp_program_version_hook) (FILE *__restrict __stream,
448+ struct argp_state *__restrict
449+ __state);
450+
451+/* If defined or set by the user program, it should point to string that is
452+ the bug-reporting address for the program. It will be printed by
453+ argp_help if the ARGP_HELP_BUG_ADDR flag is set (as it is by various
454+ standard help messages), embedded in a sentence that says something like
455+ `Report bugs to ADDR.'. */
456+extern __const char *argp_program_bug_address;
457+
458+/* The exit status that argp will use when exiting due to a parsing error.
459+ If not defined or set by the user program, this defaults to EX_USAGE from
460+ <sysexits.h>. */
461+extern error_t argp_err_exit_status;
462+
463+/* Flags for argp_help. */
464+#define ARGP_HELP_USAGE 0x01 /* a Usage: message. */
465+#define ARGP_HELP_SHORT_USAGE 0x02 /* " but don't actually print options. */
466+#define ARGP_HELP_SEE 0x04 /* a `Try ... for more help' message. */
467+#define ARGP_HELP_LONG 0x08 /* a long help message. */
468+#define ARGP_HELP_PRE_DOC 0x10 /* doc string preceding long help. */
469+#define ARGP_HELP_POST_DOC 0x20 /* doc string following long help. */
470+#define ARGP_HELP_DOC (ARGP_HELP_PRE_DOC | ARGP_HELP_POST_DOC)
471+#define ARGP_HELP_BUG_ADDR 0x40 /* bug report address */
472+#define ARGP_HELP_LONG_ONLY 0x80 /* modify output appropriately to
473+ reflect ARGP_LONG_ONLY mode. */
474+
475+/* These ARGP_HELP flags are only understood by argp_state_help. */
476+#define ARGP_HELP_EXIT_ERR 0x100 /* Call exit(1) instead of returning. */
477+#define ARGP_HELP_EXIT_OK 0x200 /* Call exit(0) instead of returning. */
478+
479+/* The standard thing to do after a program command line parsing error, if an
480+ error message has already been printed. */
481+#define ARGP_HELP_STD_ERR \
482+ (ARGP_HELP_SEE | ARGP_HELP_EXIT_ERR)
483+/* The standard thing to do after a program command line parsing error, if no
484+ more specific error message has been printed. */
485+#define ARGP_HELP_STD_USAGE \
486+ (ARGP_HELP_SHORT_USAGE | ARGP_HELP_SEE | ARGP_HELP_EXIT_ERR)
487+/* The standard thing to do in response to a --help option. */
488+#define ARGP_HELP_STD_HELP \
489+ (ARGP_HELP_SHORT_USAGE | ARGP_HELP_LONG | ARGP_HELP_EXIT_OK \
490+ | ARGP_HELP_DOC | ARGP_HELP_BUG_ADDR)
491+
492+/* Output a usage message for ARGP to STREAM. FLAGS are from the set
493+ ARGP_HELP_*. */
494+extern void argp_help (__const struct argp *__restrict __argp,
495+ FILE *__restrict __stream,
496+ unsigned __flags, char *__restrict __name);
497+
498+/* The following routines are intended to be called from within an argp
499+ parsing routine (thus taking an argp_state structure as the first
500+ argument). They may or may not print an error message and exit, depending
501+ on the flags in STATE -- in any case, the caller should be prepared for
502+ them *not* to exit, and should return an appropiate error after calling
503+ them. [argp_usage & argp_error should probably be called argp_state_...,
504+ but they're used often enough that they should be short] */
505+
506+/* Output, if appropriate, a usage message for STATE to STREAM. FLAGS are
507+ from the set ARGP_HELP_*. */
508+extern void argp_state_help (__const struct argp_state *__restrict __state,
509+ FILE *__restrict __stream,
510+ unsigned int __flags);
511+/* Possibly output the standard usage message for ARGP to stderr and exit. */
512+extern void argp_usage (__const struct argp_state *__state);
513+
514+/* If appropriate, print the printf string FMT and following args, preceded
515+ by the program name and `:', to stderr, and followed by a `Try ... --help'
516+ message, then exit (1). */
517+extern void argp_error (__const struct argp_state *__restrict __state,
518+ __const char *__restrict __fmt, ...)
519+ __attribute__ ((__format__ (__printf__, 2, 3)));
520+/* Similar to the standard gnu error-reporting function error(), but will
521+ respect the ARGP_NO_EXIT and ARGP_NO_ERRS flags in STATE, and will print
522+ to STATE->err_stream. This is useful for argument parsing code that is
523+ shared between program startup (when exiting is desired) and runtime
524+ option parsing (when typically an error code is returned instead). The
525+ difference between this function and argp_error is that the latter is for
526+ *parsing errors*, and the former is for other problems that occur during
527+ parsing but don't reflect a (syntactic) problem with the input. */
528+extern void argp_failure (__const struct argp_state *__restrict __state,
529+ int __status, int __errnum,
530+ __const char *__restrict __fmt, ...)
531+ __attribute__ ((__format__ (__printf__, 4, 5)));
532+/* Returns true if the option OPT is a valid short option. */
533+extern int _option_is_short (__const struct argp_option *__opt) __THROW;
534+extern int __option_is_short (__const struct argp_option *__opt) __THROW;
535+
536+/* Returns true if the option OPT is in fact the last (unused) entry in an
537+ options array. */
538+extern int _option_is_end (__const struct argp_option *__opt) __THROW;
539+extern int __option_is_end (__const struct argp_option *__opt) __THROW;
540+
541+/* Return the input field for ARGP in the parser corresponding to STATE; used
542+ by the help routines. */
543+/* We think this should not be exported */
544+extern void *__argp_input (__const struct argp *__restrict __argp,
545+ __const struct argp_state *__restrict __state)
546+ __THROW;
547+
548+#ifdef __USE_EXTERN_INLINES
549+
550+# ifndef ARGP_EI
551+# define ARGP_EI __extern_inline
552+# endif
553+
554+ARGP_EI void
555+argp_usage (__const struct argp_state *__state)
556+{
557+ argp_state_help (__state, stderr, ARGP_HELP_STD_USAGE);
558+}
559+
560+ARGP_EI int
561+__NTH (__option_is_short (__const struct argp_option *__opt))
562+{
563+ if (__opt->flags & OPTION_DOC)
564+ return 0;
565+ else
566+ {
567+ int __key = __opt->key;
568+ return __key > 0 && __key <= UCHAR_MAX && isprint (__key);
569+ }
570+}
571+
572+ARGP_EI int
573+__NTH (__option_is_end (__const struct argp_option *__opt))
574+{
575+ return !__opt->key && !__opt->name && !__opt->doc && !__opt->group;
576+}
577+#endif /* Use extern inlines. */
578+
579+#ifdef __cplusplus
580+}
581+#endif
582+
583+#endif /* argp.h */
diff --git a/meta/recipes-core/uclibc/uclibc-git/compile-arm-fork-with-O2.patch b/meta/recipes-core/uclibc/uclibc-git/compile-arm-fork-with-O2.patch
deleted file mode 100644
index 15ee0ca156..0000000000
--- a/meta/recipes-core/uclibc/uclibc-git/compile-arm-fork-with-O2.patch
+++ /dev/null
@@ -1,21 +0,0 @@
1When compiling in thumb mode for arm with -Os gcc gives up since it can not find registers
2to spill. So we use -O2 option for compiling fork.c It may be addressable in gcc.
3
4Signed-off-by: Khem Raj <raj.khem@gmail.com>
5
6Upstream-Status: Pending
7
8diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/arm/Makefile.arch b/libpthread/nptl/sysdeps/unix/sysv/linux/arm/Makefile.arch
9index 329d8a9..41e3646 100644
10--- a/libpthread/nptl/sysdeps/unix/sysv/linux/arm/Makefile.arch
11+++ b/libpthread/nptl/sysdeps/unix/sysv/linux/arm/Makefile.arch
12@@ -30,3 +30,9 @@ CFLAGS-OMIT-libc-lowlevellock.c = -DNOT_IN_libc -DIS_IN_libpthread
13 # This macro should be alternatively implemented in THUMB
14 # assembly.
15 ASFLAGS-vfork.S = -marm
16+
17+# For arm fork.c does not compile with -Os when in compiling
18+# in thumb1 mode
19+ifeq ($(COMPILE_IN_THUMB_MODE),y)
20+CFLAGS-fork.c = -O2
21+endif
diff --git a/meta/recipes-core/uclibc/uclibc-git/ldso-mark-_dl_exit-as-noreturn.patch b/meta/recipes-core/uclibc/uclibc-git/ldso-mark-_dl_exit-as-noreturn.patch
deleted file mode 100644
index 5279f8a759..0000000000
--- a/meta/recipes-core/uclibc/uclibc-git/ldso-mark-_dl_exit-as-noreturn.patch
+++ /dev/null
@@ -1,48 +0,0 @@
1From 2c8a7766681b704e710f51c0817534e3f9a952d1 Mon Sep 17 00:00:00 2001
2From: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
3Date: Thu, 26 Mar 2015 00:02:58 +0100
4Subject: [PATCH] ldso: mark _dl_exit as noreturn
5
6Otherwise gcc might not understand that oom() ended control-flow and
7might emit an (untaken) reference to abort() in _dl_update_slotinfo()
8on e.g. SH4 which breaks linking ld-uClibc.so.
9Arguably -ffreestanding should prevent GCC from emitting this
10'.global abort' but alas, it does not, which is another bug..
11
12Also mark the function cold to further lower the incoming frequency and
13branch probability.
14
15Upstream-Status: Backport
16
17 http://git.uclibc.org/uClibc/commit/?id=2c8a7766681b704e710f51c0817534e3f9a952d1
18
19Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
20Signed-off-by: Andre McCurdy <armccurdy@gmail.com>
21---
22 ldso/include/dl-syscall.h | 10 +++++++++-
23 1 file changed, 9 insertions(+), 1 deletion(-)
24
25diff --git a/ldso/include/dl-syscall.h b/ldso/include/dl-syscall.h
26index 675b93a..e556f7b 100644
27--- a/ldso/include/dl-syscall.h
28+++ b/ldso/include/dl-syscall.h
29@@ -52,7 +52,15 @@ extern int _dl_errno;
30 dynamic linking at all, so we cannot return any error codes.
31 We just punt if there is an error. */
32 #define __NR__dl_exit __NR_exit
33-static __always_inline _syscall1(void, _dl_exit, int, status)
34+static __always_inline attribute_noreturn __cold void _dl_exit(int status)
35+{
36+ INLINE_SYSCALL(_dl_exit, 1, status);
37+#if defined __GNUC__
38+ __builtin_unreachable(); /* shut up warning: 'noreturn' function does return*/
39+#else
40+ while (1);
41+#endif
42+}
43
44 #define __NR__dl_close __NR_close
45 static __always_inline _syscall1(int, _dl_close, int, fd)
46--
471.9.1
48
diff --git a/meta/recipes-core/uclibc/uclibc-git/remove_attribute_optimize_Os.patch b/meta/recipes-core/uclibc/uclibc-git/remove_attribute_optimize_Os.patch
deleted file mode 100644
index fb52faa7a0..0000000000
--- a/meta/recipes-core/uclibc/uclibc-git/remove_attribute_optimize_Os.patch
+++ /dev/null
@@ -1,19 +0,0 @@
1Dont support localised optimizations this helps to have a global -O level
2
3Signed-off-by: Khem Raj <raj.khem@gmail.com>
4Upstream-Status: Pending
5
6Index: git/libpthread/nptl/pthread_mutex_timedlock.c
7===================================================================
8--- git.orig/libpthread/nptl/pthread_mutex_timedlock.c 2014-08-25 10:58:06.000000000 -0700
9+++ git/libpthread/nptl/pthread_mutex_timedlock.c 2014-08-25 11:00:42.078242266 -0700
10@@ -28,7 +28,9 @@
11 * error: can't find a register in class ‘GENERAL_REGS’ while reloading ‘asm’
12 */
13 int
14+#ifndef __OPTIMIZE__
15 attribute_optimize("Os")
16+#endif
17 pthread_mutex_timedlock (
18 pthread_mutex_t *mutex,
19 const struct timespec *abstime)
diff --git a/meta/recipes-core/uclibc/uclibc-git/uclibc_enable_log2_test.patch b/meta/recipes-core/uclibc/uclibc-git/uclibc_enable_log2_test.patch
deleted file mode 100644
index 37a59884b8..0000000000
--- a/meta/recipes-core/uclibc/uclibc-git/uclibc_enable_log2_test.patch
+++ /dev/null
@@ -1,35 +0,0 @@
1uclibc now has log2 so enable the tests
2
3Signed-off-by: Khem Raj <raj.khem@gmail.com>
4Upstream-Status: Pending
5
6Index: uClibc/test/math/libm-test.inc
7===================================================================
8--- uClibc/test/math/libm-test.inc (revision 23784)
9+++ uClibc/test/math/libm-test.inc (working copy)
10@@ -3414,7 +3414,6 @@
11 }
12
13
14-#if 0
15 static void
16 log2_test (void)
17 {
18@@ -3444,7 +3443,6 @@
19
20 END (log2);
21 }
22-#endif
23
24
25 static void
26@@ -4967,9 +4965,7 @@
27 log_test ();
28 log10_test ();
29 log1p_test ();
30-#if 0
31 log2_test ();
32-#endif
33 logb_test ();
34 modf_test ();
35 ilogb_test ();
diff --git a/meta/recipes-core/uclibc/uclibc.inc b/meta/recipes-core/uclibc/uclibc.inc
index c4832289bf..533aa3d95e 100644
--- a/meta/recipes-core/uclibc/uclibc.inc
+++ b/meta/recipes-core/uclibc/uclibc.inc
@@ -21,7 +21,7 @@ PATH_prepend = "${STAGING_BINDIR_TOOLCHAIN}.${STAGINGCC}:"
21TOOLCHAIN_OPTIONS = " --sysroot=${STAGING_DIR_TCBOOTSTRAP}" 21TOOLCHAIN_OPTIONS = " --sysroot=${STAGING_DIR_TCBOOTSTRAP}"
22 22
23# siteconfig.bbclass runs configure which needs a working compiler 23# siteconfig.bbclass runs configure which needs a working compiler
24# For the compiler to work we need a working libc yet libc isn't 24# For the compiler to work we need a working libc yet libc isn't
25# in the sysroots directory at this point. This means the libc.so 25# in the sysroots directory at this point. This means the libc.so
26# linker script won't work as the --sysroot setting isn't correct. 26# linker script won't work as the --sysroot setting isn't correct.
27# Here we create a hacked up libc linker script and pass in the right 27# Here we create a hacked up libc linker script and pass in the right