diff options
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 @@ | |||
| 1 | SRCREV = "48a0006012679ff0eda6f256da958d73a924fb57" | 1 | SRCREV = "ca1c74d67dd115d059a875150e10b8560a9c35a8" |
| 2 | 2 | ||
| 3 | PV = "0.9.33+git${SRCPV}" | 3 | PV = "0.9.33+git${SRCPV}" |
| 4 | 4 | ||
| 5 | FILESEXTRAPATHS =. "${FILE_DIRNAME}/uclibc-git:" | 5 | FILESEXTRAPATHS =. "${FILE_DIRNAME}/uclibc-git:" |
| 6 | 6 | ||
| 7 | SRC_URI = "git://uclibc.org/uClibc.git;branch=master \ | 7 | SRC_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 | " | ||
| 30 | S = "${WORKDIR}/git" | 20 | S = "${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 @@ | |||
| 1 | From e3aae24ede969e2dede1aa19c2ee520cab71ce11 Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Khem Raj <raj.khem@gmail.com> | ||
| 3 | Date: Thu, 20 Feb 2014 00:30:18 -0800 | ||
| 4 | Subject: [PATCH 1/3] Add eventfd_read() and eventfd_write() | ||
| 5 | |||
| 6 | Signed-off-by: Khem Raj <raj.khem@gmail.com> | ||
| 7 | Upstream-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 | |||
| 17 | diff --git a/libc/sysdeps/linux/common/Makefile.in b/libc/sysdeps/linux/common/Makefile.in | ||
| 18 | index 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 \ | ||
| 30 | diff --git a/libc/sysdeps/linux/common/eventfd_read.c b/libc/sysdeps/linux/common/eventfd_read.c | ||
| 31 | new file mode 100644 | ||
| 32 | index 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 | +} | ||
| 63 | diff --git a/libc/sysdeps/linux/common/eventfd_write.c b/libc/sysdeps/linux/common/eventfd_write.c | ||
| 64 | new file mode 100644 | ||
| 65 | index 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 | +} | ||
| 97 | diff --git a/libc/sysdeps/linux/common/sys/eventfd.h b/libc/sysdeps/linux/common/sys/eventfd.h | ||
| 98 | index 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 | -- | ||
| 119 | 1.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 @@ | |||
| 1 | From be8ed13a90c528adfbe3c8543946bb2c5a2ad713 Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Khem Raj <raj.khem@gmail.com> | ||
| 3 | Date: Mon, 25 Aug 2014 15:50:36 -0700 | ||
| 4 | Subject: [PATCH] Define IPTOS_CLASS_* macros according to RFC 2474 | ||
| 5 | |||
| 6 | Signed-off-by: Khem Raj <raj.khem@gmail.com> | ||
| 7 | Upstream-status: Pending | ||
| 8 | --- | ||
| 9 | include/netinet/ip.h | 42 ++++++++++++++++++++++++++++++------------ | ||
| 10 | 1 file changed, 30 insertions(+), 12 deletions(-) | ||
| 11 | |||
| 12 | diff --git a/include/netinet/ip.h b/include/netinet/ip.h | ||
| 13 | index 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 | -- | ||
| 74 | 2.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 @@ | |||
| 1 | From 14b865b3438d0df29b4969148678d8fa8943e1ef Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Khem Raj <raj.khem@gmail.com> | ||
| 3 | Date: Sun, 16 Aug 2015 20:49:33 -0700 | ||
| 4 | Subject: [PATCH 1/7] Disable lrount_tes() function | ||
| 5 | |||
| 6 | Its not used anyway, avoids some strict compiler warnings | ||
| 7 | |||
| 8 | Signed-off-by: Khem Raj <raj.khem@gmail.com> | ||
| 9 | --- | ||
| 10 | Upstream-Status: Pending | ||
| 11 | |||
| 12 | test/math/libm-test.inc | 2 -- | ||
| 13 | 1 file changed, 2 deletions(-) | ||
| 14 | |||
| 15 | diff --git a/test/math/libm-test.inc b/test/math/libm-test.inc | ||
| 16 | index 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 | -- | ||
| 36 | 2.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 @@ | |||
| 1 | Upstream-Status: Pending | ||
| 2 | |||
| 3 | From 096abf14d2dc978607ccd8a0d7f42da65d8991f3 Mon Sep 17 00:00:00 2001 | ||
| 4 | From: Khem Raj <raj.khem@gmail.com> | ||
| 5 | Date: Sun, 9 Sep 2012 22:00:04 -0700 | ||
| 6 | Subject: [PATCH] Revert "utent.c, wtent.c: move functions from utxent.c" | ||
| 7 | |||
| 8 | This 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 | |||
| 16 | Index: 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. */ | ||
| 59 | Index: 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) | ||
| 254 | Index: 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 | + | ||
| 284 | Index: 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 @@ | |||
| 1 | From 74667582526b39a1906228574d73a6528f4587eb Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Khem Raj <raj.khem@gmail.com> | ||
| 3 | Date: Sat, 23 Jun 2012 13:26:30 -0700 | ||
| 4 | Subject: [PATCH] atexit_old: Do not add it to shared libc | ||
| 5 | |||
| 6 | atexit should only be in either uclibc_nonshared.a | ||
| 7 | shared libc case or libc.a in static build case | ||
| 8 | |||
| 9 | Signed-off-by: Khem Raj <raj.khem@gmail.com> | ||
| 10 | |||
| 11 | Upstream-Status: Pending | ||
| 12 | --- | ||
| 13 | libc/stdlib/Makefile.in | 4 ++-- | ||
| 14 | 1 file changed, 2 insertions(+), 2 deletions(-) | ||
| 15 | |||
| 16 | diff --git a/libc/stdlib/Makefile.in b/libc/stdlib/Makefile.in | ||
| 17 | index 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 | -- | ||
| 43 | 1.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 @@ | |||
| 1 | From 95f9b6f37152b8316735d3c86c0db963ff59e22d Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Khem Raj <raj.khem@gmail.com> | ||
| 3 | Date: Sat, 23 Jun 2012 16:51:52 -0700 | ||
| 4 | Subject: [PATCH] librt: Use -nodefaultlibs instead of -nostdlib | ||
| 5 | |||
| 6 | nostdlib disables linking in startup files too which is not | ||
| 7 | what we want here since it needs to resolve __dso_handle | ||
| 8 | which comes from crtbeginS.o, otherwise librt has this | ||
| 9 | undefined reference to a weak undefined __dso_handle that | ||
| 10 | shows up as error (with gold linker) | ||
| 11 | when shared libraries are being built which are | ||
| 12 | linking in librt | ||
| 13 | |||
| 14 | Signed-off-by: Khem Raj <raj.khem@gmail.com> | ||
| 15 | Upstream-Status: Pending | ||
| 16 | --- | ||
| 17 | librt/Makefile.in | 1 + | ||
| 18 | 1 file changed, 1 insertion(+) | ||
| 19 | |||
| 20 | Index: 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 @@ | |||
| 1 | From 714f543f4fa8fb3911449b6ce1517481359e0cff Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Khem Raj <raj.khem@gmail.com> | ||
| 3 | Date: Sat, 23 Jun 2012 14:21:17 -0700 | ||
| 4 | Subject: [PATCH] nptl/arm: Move aeabi_read_tp to uclibc_nonshared.a | ||
| 5 | |||
| 6 | Otherwise it creates wrong references from shared libs | ||
| 7 | |||
| 8 | Signed-off-by: Khem Raj <raj.khem@gmail.com> | ||
| 9 | Upstream-Status: Pending | ||
| 10 | --- | ||
| 11 | libc/sysdeps/linux/arm/Makefile.arch | 4 +++- | ||
| 12 | 1 file changed, 3 insertions(+), 1 deletion(-) | ||
| 13 | |||
| 14 | Index: 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 @@ | |||
| 1 | From d021e6252b33e779857846714fb1899a25c9965d Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Khem Raj <raj.khem@gmail.com> | ||
| 3 | Date: Sat, 23 Jun 2012 15:59:01 -0700 | ||
| 4 | Subject: [PATCH] nptl/atfork: Hide pthread_atfork in shared versions | ||
| 5 | |||
| 6 | Signed-off-by: Khem Raj <raj.khem@gmail.com> | ||
| 7 | Upstream-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 | |||
| 13 | diff --git a/libpthread/nptl/Makefile.in b/libpthread/nptl/Makefile.in | ||
| 14 | index 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 | + | ||
| 39 | diff --git a/libpthread/nptl/pthread_atfork.c b/libpthread/nptl/pthread_atfork.c | ||
| 40 | index 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 | -- | ||
| 73 | 1.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 @@ | |||
| 1 | From f489cc44a209f6c4370e94c9c788fc9cc4820be1 Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Khem Raj <raj.khem@gmail.com> | ||
| 3 | Date: Mon, 25 Aug 2014 16:22:57 -0700 | ||
| 4 | Subject: [PATCH] timex: Sync with glibc | ||
| 5 | |||
| 6 | Signed-off-by: Khem Raj <raj.khem@gmail.com> | ||
| 7 | Upstream-status: Pending | ||
| 8 | --- | ||
| 9 | include/sys/timex.h | 8 ++++++-- | ||
| 10 | 1 file changed, 6 insertions(+), 2 deletions(-) | ||
| 11 | |||
| 12 | diff --git a/include/sys/timex.h b/include/sys/timex.h | ||
| 13 | index 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 | -- | ||
| 32 | 2.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 @@ | |||
| 1 | Add ppc copysignl implementation | 1 | From 5d362074e5975b150a35bcfa77eab1bfa4e30de7 Mon Sep 17 00:00:00 2001 |
| 2 | From: Khem Raj <raj.khem@gmail.com> | ||
| 3 | Date: Sun, 16 Aug 2015 20:50:56 -0700 | ||
| 4 | Subject: [PATCH 2/7] Add implementation for copysignl for ppc | ||
| 2 | 5 | ||
| 6 | Signed-off-by: Khem Raj <raj.khem@gmail.com> | ||
| 7 | --- | ||
| 3 | Upstream-Status: Pending | 8 | Upstream-Status: Pending |
| 4 | 9 | ||
| 5 | Signed-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 | ||
| 7 | Index: git/libc/sysdeps/linux/powerpc/Makefile.arch | 15 | diff --git a/libc/sysdeps/linux/powerpc/Makefile.arch b/libc/sysdeps/linux/powerpc/Makefile.arch |
| 8 | =================================================================== | 16 | index 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 \ |
| 20 | Index: git/libc/sysdeps/linux/powerpc/copysignl.c | 28 | diff --git a/libc/sysdeps/linux/powerpc/copysignl.c b/libc/sysdeps/linux/powerpc/copysignl.c |
| 21 | =================================================================== | 29 | new file mode 100644 |
| 22 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 | 30 | index 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 | -- | ||
| 124 | 2.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 @@ | |||
| 1 | From db575359d4b8164ad6c2ac5f36c7a50c065a2864 Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Khem Raj <raj.khem@gmail.com> | ||
| 3 | Date: Thu, 20 Feb 2014 00:44:34 -0800 | ||
| 4 | Subject: [PATCH 2/3] wire setns syscall | ||
| 5 | |||
| 6 | Signed-off-by: Khem Raj <raj.khem@gmail.com> | ||
| 7 | Upstream-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 | |||
| 15 | diff --git a/libc/sysdeps/linux/common/Makefile.in b/libc/sysdeps/linux/common/Makefile.in | ||
| 16 | index 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 \ | ||
| 27 | diff --git a/libc/sysdeps/linux/common/bits/sched.h b/libc/sysdeps/linux/common/bits/sched.h | ||
| 28 | index 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 | ||
| 42 | diff --git a/libc/sysdeps/linux/common/setns.c b/libc/sysdeps/linux/common/setns.c | ||
| 43 | new file mode 100644 | ||
| 44 | index 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 | -- | ||
| 67 | 1.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 @@ | |||
| 1 | From: Salvatore Cro <salvatore.cro at st.com> | 1 | From eaae816fb22929469aa4cc3402b91b512fc69549 Mon Sep 17 00:00:00 2001 |
| 2 | From: Salvatore Cro <salvatore.cro@st.com> | ||
| 3 | Date: Sun, 16 Aug 2015 20:53:37 -0700 | ||
| 4 | Subject: [PATCH 3/7] Add argp implementation | ||
| 2 | 5 | ||
| 3 | Argp is an advanced support for parsing unix-style argument vectors. | 6 | Argp is an advanced support for parsing unix-style argument vectors. |
| 4 | In addition to the common getopt interface, it provides automatic response | 7 | In addition to the common getopt interface, it provides automatic |
| 5 | to `--help' and `--version' options and use of custom parser in conjunction | 8 | response |
| 9 | to `--help' and `--version' options and use of custom parser in | ||
| 10 | conjunction | ||
| 6 | with argp native option parser, among others. | 11 | with argp native option parser, among others. |
| 7 | Argp support is required by elfutils package and prelink. | 12 | Argp support is required by elfutils package and prelink. |
| 8 | 13 | ||
| 9 | In uClibc argp functionalities has been moved from C library to libuargp.so | 14 | In uClibc argp functionalities has been moved from C library to |
| 15 | libuargp.so | ||
| 10 | Further the libc.so linker script contains an AS_NEEDED entry so that | 16 | Further the libc.so linker script contains an AS_NEEDED entry so that |
| 11 | it doesn't need to link libuargp.so explicitely. | 17 | it doesn't need to link libuargp.so explicitely. |
| 12 | 18 | ||
| 13 | Signed-off-by: Salvatore Cro <salvatore.cro at st.com> | 19 | Signed-off-by: Salvatore Cro <salvatore.cro@st.com> |
| 14 | Signed-off-by: Filippo Arcidiacono <filippo.arcidiacono at st.com> | 20 | Signed-off-by: Filippo Arcidiacono <filippo.arcidiacono@st.com> |
| 15 | Signed-off-by: Carmelo Amoroso <carmelo.amoroso at st.com> | 21 | Signed-off-by: Carmelo Amoroso <carmelo.amoroso@st.com> |
| 16 | 22 | Signed-off-by: Khem Raj <raj.khem@gmail.com> | |
| 23 | --- | ||
| 17 | Upstream-Status: Pending | 24 | Upstream-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 | ||
| 75 | Index: git/Makefile.in | 81 | diff --git a/Makefile.in b/Makefile.in |
| 76 | =================================================================== | 82 | index 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) |
| 108 | Index: git/Makerules | 115 | diff --git a/Makerules b/Makerules |
| 109 | =================================================================== | 116 | index 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))) \ |
| 136 | Index: git/Rules.mak | 151 | diff --git a/Rules.mak b/Rules.mak |
| 137 | =================================================================== | 152 | index 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 |
| 154 | Index: git/extra/Configs/Config.in | 175 | diff --git a/extra/Configs/Config.in b/extra/Configs/Config.in |
| 155 | =================================================================== | 176 | index 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 | ||
| 182 | Index: git/libc/sysdeps/linux/common/bits/getopt_int.h | 203 | diff --git a/include/argp.h b/include/argp.h |
| 183 | =================================================================== | 204 | new file mode 100644 |
| 184 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 | 205 | index 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 */ | ||
| 775 | diff --git a/libc/sysdeps/linux/common/bits/getopt_int.h b/libc/sysdeps/linux/common/bits/getopt_int.h | ||
| 776 | new file mode 100644 | ||
| 777 | index 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 */ |
| 323 | Index: git/libc/unistd/getopt.c | 917 | diff --git a/libc/unistd/getopt.c b/libc/unistd/getopt.c |
| 324 | =================================================================== | 918 | index 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. */ |
| 365 | Index: git/libuargp/Makefile | 959 | diff --git a/libuargp/Makefile b/libuargp/Makefile |
| 366 | =================================================================== | 960 | new file mode 100644 |
| 367 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 | 961 | index 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 |
| 384 | Index: git/libuargp/Makefile.in | 979 | diff --git a/libuargp/Makefile.in b/libuargp/Makefile.in |
| 385 | =================================================================== | 980 | new file mode 100644 |
| 386 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 | 981 | index 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) |
| 462 | Index: git/libuargp/argp-ba.c | 1058 | diff --git a/libuargp/argp-ba.c b/libuargp/argp-ba.c |
| 463 | =================================================================== | 1059 | new file mode 100644 |
| 464 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 | 1060 | index 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; |
| 493 | Index: git/libuargp/argp-eexst.c | 1090 | diff --git a/libuargp/argp-eexst.c b/libuargp/argp-eexst.c |
| 494 | =================================================================== | 1091 | new file mode 100644 |
| 495 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 | 1092 | index 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; |
| 530 | Index: git/libuargp/argp-fmtstream.c | 1128 | diff --git a/libuargp/argp-fmtstream.c b/libuargp/argp-fmtstream.c |
| 531 | =================================================================== | 1129 | new file mode 100644 |
| 532 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 | 1130 | index 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 */ |
| 974 | Index: git/libuargp/argp-fmtstream.h | 1573 | diff --git a/libuargp/argp-fmtstream.h b/libuargp/argp-fmtstream.h |
| 975 | =================================================================== | 1574 | new file mode 100644 |
| 976 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 | 1575 | index 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 */ |
| 1293 | Index: git/libuargp/argp-fs-xinl.c | 1893 | diff --git a/libuargp/argp-fs-xinl.c b/libuargp/argp-fs-xinl.c |
| 1294 | =================================================================== | 1894 | new file mode 100644 |
| 1295 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 | 1895 | index 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 |
| 1342 | Index: git/libuargp/argp-help.c | 1943 | diff --git a/libuargp/argp-help.c b/libuargp/argp-help.c |
| 1343 | =================================================================== | 1944 | new file mode 100644 |
| 1344 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 | 1945 | index 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 | +} |
| 3229 | Index: git/libuargp/argp-parse.c | 3831 | diff --git a/libuargp/argp-parse.c b/libuargp/argp-parse.c |
| 3230 | =================================================================== | 3832 | new file mode 100644 |
| 3231 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 | 3833 | index 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 | +} |
| 4183 | Index: git/libuargp/argp-pv.c | 4786 | diff --git a/libuargp/argp-pv.c b/libuargp/argp-pv.c |
| 4184 | =================================================================== | 4787 | new file mode 100644 |
| 4185 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 | 4788 | index 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; |
| 4213 | Index: git/libuargp/argp-pvh.c | 4817 | diff --git a/libuargp/argp-pvh.c b/libuargp/argp-pvh.c |
| 4214 | =================================================================== | 4818 | new file mode 100644 |
| 4215 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 | 4819 | index 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); |
| 4250 | Index: git/libuargp/argp-xinl.c | 4855 | diff --git a/libuargp/argp-xinl.c b/libuargp/argp-xinl.c |
| 4251 | =================================================================== | 4856 | new file mode 100644 |
| 4252 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 | 4857 | index 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> |
| 4290 | Index: git/test/argp/Makefile | 4896 | diff --git a/test/argp/Makefile b/test/argp/Makefile |
| 4291 | =================================================================== | 4897 | new file mode 100644 |
| 4292 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 | 4898 | index 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 |
| 4302 | Index: git/test/argp/Makefile.in | 4909 | diff --git a/test/argp/Makefile.in b/test/argp/Makefile.in |
| 4303 | =================================================================== | 4910 | new file mode 100644 |
| 4304 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 | 4911 | index 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 | + |
| 4319 | Index: git/test/argp/argp-ex1.c | 4927 | diff --git a/test/argp/argp-ex1.c b/test/argp/argp-ex1.c |
| 4320 | =================================================================== | 4928 | new file mode 100644 |
| 4321 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 | 4929 | index 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 | +} |
| 4339 | Index: git/test/argp/argp-ex2.c | 4948 | diff --git a/test/argp/argp-ex2.c b/test/argp/argp-ex2.c |
| 4340 | =================================================================== | 4949 | new file mode 100644 |
| 4341 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 | 4950 | index 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 | +} |
| 4389 | Index: git/test/argp/argp-ex3.c | 4999 | diff --git a/test/argp/argp-ex3.c b/test/argp/argp-ex3.c |
| 4390 | =================================================================== | 5000 | new file mode 100644 |
| 4391 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 | 5001 | index 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 | +} |
| 4547 | Index: git/test/argp/argp-ex4.c | 5158 | diff --git a/test/argp/argp-ex4.c b/test/argp/argp-ex4.c |
| 4548 | =================================================================== | 5159 | new file mode 100644 |
| 4549 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 | 5160 | index 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 | +} |
| 4719 | Index: git/test/argp/argp-test.c | 5331 | diff --git a/test/argp/argp-test.c b/test/argp/argp-test.c |
| 4720 | =================================================================== | 5332 | new file mode 100644 |
| 4721 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 | 5333 | index 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 | +} |
| 4933 | Index: git/test/argp/bug-argp1.c | 5546 | diff --git a/test/argp/bug-argp1.c b/test/argp/bug-argp1.c |
| 4934 | =================================================================== | 5547 | new file mode 100644 |
| 4935 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 | 5548 | index 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" |
| 4964 | Index: git/test/argp/tst-argp1.c | 5578 | diff --git a/test/argp/tst-argp1.c b/test/argp/tst-argp1.c |
| 4965 | =================================================================== | 5579 | new file mode 100644 |
| 4966 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 | 5580 | index 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" |
| 5087 | Index: git/test/argp/tst-argp2.c | 5702 | diff --git a/test/argp/tst-argp2.c b/test/argp/tst-argp2.c |
| 5088 | =================================================================== | 5703 | new file mode 100644 |
| 5089 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 | 5704 | index 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 | -- | ||
| 5810 | 2.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 @@ | |||
| 1 | From 31785c544abe8b215dbb2264fb11ee7051515797 Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Khem Raj <raj.khem@gmail.com> | ||
| 3 | Date: Sun, 16 Aug 2015 20:58:59 -0700 | ||
| 4 | Subject: [PATCH 4/7] Dont support localised optimizations this helps to have a | ||
| 5 | global -O level | ||
| 6 | |||
| 7 | Signed-off-by: Khem Raj <raj.khem@gmail.com> | ||
| 8 | --- | ||
| 9 | Upstream-Status: Pending | ||
| 10 | |||
| 11 | libpthread/nptl/pthread_mutex_timedlock.c | 2 ++ | ||
| 12 | 1 file changed, 2 insertions(+) | ||
| 13 | |||
| 14 | diff --git a/libpthread/nptl/pthread_mutex_timedlock.c b/libpthread/nptl/pthread_mutex_timedlock.c | ||
| 15 | index 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 | -- | ||
| 29 | 2.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 @@ | |||
| 1 | From 883debc22e30a947fe5858cc07ee5aebd3d07a2e Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Khem Raj <raj.khem@gmail.com> | ||
| 3 | Date: Sun, 16 Aug 2015 20:59:56 -0700 | ||
| 4 | Subject: [PATCH 5/7] Always use -O2 for compiling fork.c | ||
| 5 | |||
| 6 | When compiling in thumb mode for arm with -Os gcc gives up since it can | ||
| 7 | not find registers to spill. So we use -O2 option for compiling fork.c | ||
| 8 | It may be addressable in gcc. | ||
| 9 | |||
| 10 | Signed-off-by: Khem Raj <raj.khem@gmail.com> | ||
| 11 | --- | ||
| 12 | Upstream-Status: Pending | ||
| 13 | |||
| 14 | libpthread/nptl/sysdeps/unix/sysv/linux/arm/Makefile.arch | 6 ++++++ | ||
| 15 | 1 file changed, 6 insertions(+) | ||
| 16 | |||
| 17 | diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/arm/Makefile.arch b/libpthread/nptl/sysdeps/unix/sysv/linux/arm/Makefile.arch | ||
| 18 | index 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 | -- | ||
| 32 | 2.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 @@ | |||
| 1 | From 32eaf738faafad2b16e1f3f5beb91736b3c27a3b Mon Sep 17 00:00:00 2001 | 1 | From b40c129ed2d53b69463883a5422dd4a012a398f9 Mon Sep 17 00:00:00 2001 |
| 2 | From: Junling Zheng <zhengjunling@huawei.com> | 2 | From: Junling Zheng <zhengjunling@huawei.com> |
| 3 | Date: Fri, 3 Apr 2015 05:02:27 +0000 | 3 | Date: Fri, 3 Apr 2015 05:02:27 +0000 |
| 4 | Subject: [PATCH] ldso: limited support for $ORIGIN in rpath | 4 | Subject: [PATCH 6/7] ldso: limited support for $ORIGIN in rpath |
| 5 | MIME-Version: 1.0 | 5 | MIME-Version: 1.0 |
| 6 | Content-Type: text/plain; charset=UTF-8 | 6 | Content-Type: text/plain; charset=UTF-8 |
| 7 | Content-Transfer-Encoding: 8bit | 7 | Content-Transfer-Encoding: 8bit |
| @@ -26,7 +26,10 @@ Upstream-Status: Submitted | |||
| 26 | 26 | ||
| 27 | Signed-off-by: Timo Teräs <timo.teras at iki.fi> | 27 | Signed-off-by: Timo Teräs <timo.teras at iki.fi> |
| 28 | Signed-off-by: Junling Zheng <zhengjunling@huawei.com> | 28 | Signed-off-by: Junling Zheng <zhengjunling@huawei.com> |
| 29 | Signed-off-by: Khem Raj <raj.khem@gmail.com> | ||
| 29 | --- | 30 | --- |
| 31 | Upstream-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 |
| 49 | diff --git a/ldso/ldso/dl-elf.c b/ldso/ldso/dl-elf.c | 52 | diff --git a/ldso/ldso/dl-elf.c b/ldso/ldso/dl-elf.c |
| 50 | index 1b06bc1..b323c90 100644 | 53 | index 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 | ||
| 192 | diff --git a/ldso/ldso/ldso.c b/ldso/ldso/ldso.c | 195 | diff --git a/ldso/ldso/ldso.c b/ldso/ldso/ldso.c |
| 193 | index 5619629..73bcc41 100644 | 196 | index 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 | -- |
| 229 | 1.8.3.4 | 232 | 2.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 @@ | |||
| 1 | From 90516af9f776f9c2835b47fc52775dcb307a85ac Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Khem Raj <raj.khem@gmail.com> | ||
| 3 | Date: Sat, 23 Jun 2012 15:59:01 -0700 | ||
| 4 | Subject: [PATCH 7/7] nptl/atfork: Hide pthread_atfork in shared versions | ||
| 5 | |||
| 6 | Signed-off-by: Khem Raj <raj.khem@gmail.com> | ||
| 7 | Upstream-Status: Pending | ||
| 8 | --- | ||
| 9 | libpthread/nptl/Makefile.in | 3 ++- | ||
| 10 | 1 file changed, 2 insertions(+), 1 deletion(-) | ||
| 11 | |||
| 12 | diff --git a/libpthread/nptl/Makefile.in b/libpthread/nptl/Makefile.in | ||
| 13 | index 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 | -- | ||
| 34 | 2.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 @@ | |||
| 1 | Added headers file needed by argp sources. | ||
| 2 | |||
| 3 | Signed-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 | |||
| 11 | Upstream-Status: Pending | ||
| 12 | |||
| 13 | Index: 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 @@ | |||
| 1 | When compiling in thumb mode for arm with -Os gcc gives up since it can not find registers | ||
| 2 | to spill. So we use -O2 option for compiling fork.c It may be addressable in gcc. | ||
| 3 | |||
| 4 | Signed-off-by: Khem Raj <raj.khem@gmail.com> | ||
| 5 | |||
| 6 | Upstream-Status: Pending | ||
| 7 | |||
| 8 | diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/arm/Makefile.arch b/libpthread/nptl/sysdeps/unix/sysv/linux/arm/Makefile.arch | ||
| 9 | index 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 @@ | |||
| 1 | From 2c8a7766681b704e710f51c0817534e3f9a952d1 Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> | ||
| 3 | Date: Thu, 26 Mar 2015 00:02:58 +0100 | ||
| 4 | Subject: [PATCH] ldso: mark _dl_exit as noreturn | ||
| 5 | |||
| 6 | Otherwise gcc might not understand that oom() ended control-flow and | ||
| 7 | might emit an (untaken) reference to abort() in _dl_update_slotinfo() | ||
| 8 | on e.g. SH4 which breaks linking ld-uClibc.so. | ||
| 9 | Arguably -ffreestanding should prevent GCC from emitting this | ||
| 10 | '.global abort' but alas, it does not, which is another bug.. | ||
| 11 | |||
| 12 | Also mark the function cold to further lower the incoming frequency and | ||
| 13 | branch probability. | ||
| 14 | |||
| 15 | Upstream-Status: Backport | ||
| 16 | |||
| 17 | http://git.uclibc.org/uClibc/commit/?id=2c8a7766681b704e710f51c0817534e3f9a952d1 | ||
| 18 | |||
| 19 | Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> | ||
| 20 | Signed-off-by: Andre McCurdy <armccurdy@gmail.com> | ||
| 21 | --- | ||
| 22 | ldso/include/dl-syscall.h | 10 +++++++++- | ||
| 23 | 1 file changed, 9 insertions(+), 1 deletion(-) | ||
| 24 | |||
| 25 | diff --git a/ldso/include/dl-syscall.h b/ldso/include/dl-syscall.h | ||
| 26 | index 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 | -- | ||
| 47 | 1.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 @@ | |||
| 1 | Dont support localised optimizations this helps to have a global -O level | ||
| 2 | |||
| 3 | Signed-off-by: Khem Raj <raj.khem@gmail.com> | ||
| 4 | Upstream-Status: Pending | ||
| 5 | |||
| 6 | Index: 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 @@ | |||
| 1 | uclibc now has log2 so enable the tests | ||
| 2 | |||
| 3 | Signed-off-by: Khem Raj <raj.khem@gmail.com> | ||
| 4 | Upstream-Status: Pending | ||
| 5 | |||
| 6 | Index: 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}:" | |||
| 21 | TOOLCHAIN_OPTIONS = " --sysroot=${STAGING_DIR_TCBOOTSTRAP}" | 21 | TOOLCHAIN_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 |
